From c98ea5e20ac8055626158cf1b143d55823747214 Mon Sep 17 00:00:00 2001 From: Nobody Date: Thu, 11 Aug 2022 22:26:39 +0300 Subject: [PATCH] Bundle lttng-modules-2.11.7 --- ltt/lttng-2.11.0/ChangeLog | 1123 ++++++ ltt/lttng-2.11.0/CodingStyle | 10 + ltt/lttng-2.11.0/Kbuild.common | 53 + ltt/lttng-2.11.0/Kconfig | 16 + ltt/lttng-2.11.0/LICENSE | 34 + ltt/lttng-2.11.0/LICENSES/GPL-2.0 | 359 ++ ltt/lttng-2.11.0/LICENSES/LGPL-2.1 | 503 +++ ltt/lttng-2.11.0/LICENSES/MIT | 30 + ltt/lttng-2.11.0/Makefile | 129 + ltt/lttng-2.11.0/README.md | 122 + ltt/lttng-2.11.0/TODO | 116 + ltt/lttng-2.11.0/blacklist/kprobes.h | 23 + ltt/lttng-2.11.0/blacklist/timekeeping.h | 20 + ltt/lttng-2.11.0/extra_version/README | 2 + ltt/lttng-2.11.0/filter-bytecode.h | 225 ++ .../instrumentation/events/README | 24 + .../instrumentation/events/lttng-module/9p.h | 57 + .../events/lttng-module/arch/x86/exceptions.h | 53 + .../lttng-module/arch/x86/irq_vectors.h | 116 + .../lttng-module/arch/x86/kvm/mmutrace.h | 313 ++ .../events/lttng-module/arch/x86/kvm/trace.h | 591 ++++ .../events/lttng-module/asoc.h | 414 +++ .../events/lttng-module/block.h | 1208 +++++++ .../events/lttng-module/btrfs.h | 2483 +++++++++++++ .../events/lttng-module/compaction.h | 158 + .../events/lttng-module/ext3.h | 522 +++ .../events/lttng-module/ext4.h | 2092 +++++++++++ .../events/lttng-module/gpio.h | 39 + .../instrumentation/events/lttng-module/i2c.h | 120 + .../instrumentation/events/lttng-module/irq.h | 190 + .../instrumentation/events/lttng-module/jbd.h | 157 + .../events/lttng-module/jbd2.h | 183 + .../events/lttng-module/kmem.h | 345 ++ .../instrumentation/events/lttng-module/kvm.h | 284 ++ .../events/lttng-module/lock.h | 138 + .../events/lttng-module/lttng-statedump.h | 145 + .../events/lttng-module/lttng-test.h | 58 + .../events/lttng-module/lttng.h | 21 + .../events/lttng-module/mm_vmscan.h | 825 +++++ .../events/lttng-module/module.h | 125 + .../events/lttng-module/napi.h | 51 + .../instrumentation/events/lttng-module/net.h | 571 +++ .../events/lttng-module/power.h | 282 ++ .../events/lttng-module/preemptirq.h | 100 + .../events/lttng-module/printk.h | 76 + .../events/lttng-module/random.h | 132 + .../instrumentation/events/lttng-module/rcu.h | 965 +++++ .../events/lttng-module/regmap.h | 145 + .../events/lttng-module/regulator.h | 118 + .../instrumentation/events/lttng-module/rpc.h | 366 ++ .../instrumentation/events/lttng-module/rpm.h | 73 + .../events/lttng-module/sched.h | 655 ++++ .../events/lttng-module/scsi.h | 498 +++ .../events/lttng-module/signal.h | 202 ++ .../instrumentation/events/lttng-module/skb.h | 63 + .../events/lttng-module/sock.h | 85 + .../events/lttng-module/timer.h | 397 +++ .../instrumentation/events/lttng-module/udp.h | 26 + .../events/lttng-module/v4l2.h | 82 + .../events/lttng-module/workqueue.h | 193 + .../events/lttng-module/writeback.h | 793 +++++ .../3.0.34/powerpc-32-syscalls-3.0.34 | 286 ++ .../3.1.0-rc6/x86-32-syscalls-3.1.0-rc6 | 291 ++ .../3.10.0-rc7/x86-64-syscalls-3.10.0-rc7 | 289 ++ .../syscalls/3.13.0/mips-32-syscalls-3.13.0 | 283 ++ .../syscalls/3.18.0/mips-32-syscalls-3.18.0 | 287 ++ .../syscalls/3.4.25/arm-32-syscalls-3.4.25 | 299 ++ .../syscalls/3.5.0/mips-32-syscalls-3.5.0 | 141 + .../syscalls/3.5.0/mips-64-syscalls-3.5.0 | 289 ++ .../syscalls/4.4.0/arm-64-syscalls-4.4.0 | 256 ++ .../instrumentation/syscalls/README | 34 + .../headers/arm-32-syscalls-3.4.25_integers.h | 1213 +++++++ ...arm-32-syscalls-3.4.25_integers_override.h | 141 + .../headers/arm-32-syscalls-3.4.25_pointers.h | 1934 ++++++++++ ...arm-32-syscalls-3.4.25_pointers_override.h | 42 + .../headers/arm-64-syscalls-4.4.0_integers.h | 1011 ++++++ .../arm-64-syscalls-4.4.0_integers_override.h | 8 + .../headers/arm-64-syscalls-4.4.0_pointers.h | 1664 +++++++++ .../arm-64-syscalls-4.4.0_pointers_override.h | 9 + .../headers/compat_syscalls_integers.h | 11 + .../headers/compat_syscalls_pointers.h | 11 + .../mips-32-syscalls-3.13.0_integers.h | 1145 ++++++ ...ips-32-syscalls-3.13.0_integers_override.h | 3 + .../mips-32-syscalls-3.13.0_pointers.h | 1824 ++++++++++ ...ips-32-syscalls-3.13.0_pointers_override.h | 8 + .../mips-32-syscalls-3.18.0_integers.h | 1109 ++++++ ...ips-32-syscalls-3.18.0_integers_override.h | 3 + .../mips-32-syscalls-3.18.0_pointers.h | 1894 ++++++++++ ...ips-32-syscalls-3.18.0_pointers_override.h | 28 + .../headers/mips-64-syscalls-3.5.0_integers.h | 1165 ++++++ ...mips-64-syscalls-3.5.0_integers_override.h | 3 + .../headers/mips-64-syscalls-3.5.0_pointers.h | 1864 ++++++++++ ...mips-64-syscalls-3.5.0_pointers_override.h | 8 + .../powerpc-32-syscalls-3.0.34_integers.h | 1065 ++++++ ...rpc-32-syscalls-3.0.34_integers_override.h | 72 + .../powerpc-32-syscalls-3.0.34_pointers.h | 1934 ++++++++++ ...rpc-32-syscalls-3.0.34_pointers_override.h | 22 + .../syscalls/headers/syscalls_integers.h | 23 + .../headers/syscalls_integers_override.h | 21 + .../syscalls/headers/syscalls_pointers.h | 23 + .../headers/syscalls_pointers_override.h | 885 +++++ .../syscalls/headers/syscalls_unknown.h | 53 + .../x86-32-syscalls-3.1.0-rc6_integers.h | 1209 +++++++ ...-32-syscalls-3.1.0-rc6_integers_override.h | 85 + .../x86-32-syscalls-3.1.0-rc6_pointers.h | 1864 ++++++++++ ...-32-syscalls-3.1.0-rc6_pointers_override.h | 43 + .../x86-64-syscalls-3.10.0-rc7_integers.h | 1099 ++++++ ...64-syscalls-3.10.0-rc7_integers_override.h | 3 + .../x86-64-syscalls-3.10.0-rc7_pointers.h | 1924 ++++++++++ ...64-syscalls-3.10.0-rc7_pointers_override.h | 174 + .../syscalls/lttng-get-syscall-inout.sh | 86 + .../syscalls/lttng-syscalls-extractor/Kbuild | 5 + .../lttng-syscalls-extractor.c | 87 + .../lttng-syscalls-generate-headers.sh | 384 ++ .../syscalls/table-syscall-inout.txt | 289 ++ ltt/lttng-2.11.0/lib/Kbuild | 21 + ltt/lttng-2.11.0/lib/align.h | 60 + ltt/lttng-2.11.0/lib/bitfield.h | 539 +++ ltt/lttng-2.11.0/lib/bug.h | 36 + .../lib/prio_heap/lttng_prio_heap.c | 199 ++ .../lib/prio_heap/lttng_prio_heap.h | 108 + ltt/lttng-2.11.0/lib/ringbuffer/api.h | 24 + ltt/lttng-2.11.0/lib/ringbuffer/backend.h | 451 +++ .../lib/ringbuffer/backend_internal.h | 532 +++ .../lib/ringbuffer/backend_types.h | 104 + ltt/lttng-2.11.0/lib/ringbuffer/config.h | 306 ++ ltt/lttng-2.11.0/lib/ringbuffer/frontend.h | 234 ++ .../lib/ringbuffer/frontend_api.h | 358 ++ .../lib/ringbuffer/frontend_internal.h | 305 ++ .../lib/ringbuffer/frontend_types.h | 196 ++ ltt/lttng-2.11.0/lib/ringbuffer/iterator.h | 67 + ltt/lttng-2.11.0/lib/ringbuffer/nohz.h | 29 + .../lib/ringbuffer/ring_buffer_backend.c | 1124 ++++++ .../lib/ringbuffer/ring_buffer_frontend.c | 2377 +++++++++++++ .../lib/ringbuffer/ring_buffer_iterator.c | 841 +++++ .../lib/ringbuffer/ring_buffer_mmap.c | 139 + .../lib/ringbuffer/ring_buffer_splice.c | 241 ++ .../lib/ringbuffer/ring_buffer_vfs.c | 454 +++ ltt/lttng-2.11.0/lib/ringbuffer/vatomic.h | 84 + ltt/lttng-2.11.0/lib/ringbuffer/vfs.h | 174 + ltt/lttng-2.11.0/lttng-abi-old.h | 128 + ltt/lttng-2.11.0/lttng-abi.c | 1976 +++++++++++ ltt/lttng-2.11.0/lttng-abi.h | 331 ++ ltt/lttng-2.11.0/lttng-calibrate.c | 29 + ltt/lttng-2.11.0/lttng-clock.c | 97 + ltt/lttng-2.11.0/lttng-clock.h | 28 + .../lttng-context-callstack-legacy-impl.h | 215 ++ .../lttng-context-callstack-stackwalk-impl.h | 230 ++ ltt/lttng-2.11.0/lttng-context-callstack.c | 181 + ltt/lttng-2.11.0/lttng-context-cpu-id.c | 74 + ltt/lttng-2.11.0/lttng-context-hostname.c | 107 + .../lttng-context-interruptible.c | 81 + ltt/lttng-2.11.0/lttng-context-migratable.c | 74 + .../lttng-context-need-reschedule.c | 74 + ltt/lttng-2.11.0/lttng-context-nice.c | 74 + .../lttng-context-perf-counters.c | 364 ++ ltt/lttng-2.11.0/lttng-context-pid.c | 74 + ltt/lttng-2.11.0/lttng-context-ppid.c | 96 + ltt/lttng-2.11.0/lttng-context-preemptible.c | 92 + ltt/lttng-2.11.0/lttng-context-prio.c | 108 + ltt/lttng-2.11.0/lttng-context-procname.c | 78 + ltt/lttng-2.11.0/lttng-context-tid.c | 77 + ltt/lttng-2.11.0/lttng-context-vpid.c | 89 + ltt/lttng-2.11.0/lttng-context-vppid.c | 118 + ltt/lttng-2.11.0/lttng-context-vtid.c | 89 + ltt/lttng-2.11.0/lttng-context.c | 314 ++ ltt/lttng-2.11.0/lttng-cpuhotplug.h | 52 + ltt/lttng-2.11.0/lttng-endian.h | 30 + ltt/lttng-2.11.0/lttng-events.c | 3122 +++++++++++++++++ ltt/lttng-2.11.0/lttng-events.h | 894 +++++ ltt/lttng-2.11.0/lttng-filter-interpreter.c | 1574 +++++++++ ltt/lttng-2.11.0/lttng-filter-specialize.c | 1205 +++++++ ltt/lttng-2.11.0/lttng-filter-validator.c | 1743 +++++++++ ltt/lttng-2.11.0/lttng-filter.c | 557 +++ ltt/lttng-2.11.0/lttng-filter.h | 248 ++ ltt/lttng-2.11.0/lttng-kernel-version.h | 143 + ltt/lttng-2.11.0/lttng-probes.c | 324 ++ .../lttng-ring-buffer-client-discard.c | 16 + .../lttng-ring-buffer-client-mmap-discard.c | 16 + .../lttng-ring-buffer-client-mmap-overwrite.c | 16 + .../lttng-ring-buffer-client-overwrite.c | 16 + ltt/lttng-2.11.0/lttng-ring-buffer-client.h | 790 +++++ .../lttng-ring-buffer-metadata-client.c | 16 + .../lttng-ring-buffer-metadata-client.h | 452 +++ .../lttng-ring-buffer-metadata-mmap-client.c | 16 + ltt/lttng-2.11.0/lttng-statedump-impl.c | 591 ++++ ltt/lttng-2.11.0/lttng-string-utils.c | 356 ++ ltt/lttng-2.11.0/lttng-string-utils.h | 23 + ltt/lttng-2.11.0/lttng-syscalls.c | 1356 +++++++ ltt/lttng-2.11.0/lttng-tp-mempool.c | 152 + ltt/lttng-2.11.0/lttng-tp-mempool.h | 50 + ltt/lttng-2.11.0/lttng-tracepoint.c | 439 +++ ltt/lttng-2.11.0/lttng-tracepoint.h | 18 + ltt/lttng-2.11.0/lttng-tracer-core.h | 28 + ltt/lttng-2.11.0/lttng-tracer.h | 69 + ltt/lttng-2.11.0/lttng-tracker-pid.c | 145 + ltt/lttng-2.11.0/lttng-wrapper-impl.c | 37 + ltt/lttng-2.11.0/probes/Kbuild | 290 ++ ltt/lttng-2.11.0/probes/define_trace.h | 121 + .../probes/lttng-events-nowrite.h | 137 + ltt/lttng-2.11.0/probes/lttng-events-reset.h | 283 ++ ltt/lttng-2.11.0/probes/lttng-events-write.h | 339 ++ ltt/lttng-2.11.0/probes/lttng-kprobes.c | 174 + ltt/lttng-2.11.0/probes/lttng-kretprobes.c | 307 ++ ltt/lttng-2.11.0/probes/lttng-probe-9p.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-asoc.c | 39 + ltt/lttng-2.11.0/probes/lttng-probe-block.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-btrfs.c | 44 + .../probes/lttng-probe-compaction.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-ext3.c | 44 + ltt/lttng-2.11.0/probes/lttng-probe-ext4.c | 43 + ltt/lttng-2.11.0/probes/lttng-probe-gpio.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-i2c.c | 42 + ltt/lttng-2.11.0/probes/lttng-probe-irq.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-jbd.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-jbd2.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-kmem.c | 44 + .../probes/lttng-probe-kvm-x86-mmu.c | 57 + ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86.c | 48 + ltt/lttng-2.11.0/probes/lttng-probe-kvm.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-lock.c | 42 + ltt/lttng-2.11.0/probes/lttng-probe-module.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-napi.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-net.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-power.c | 38 + .../probes/lttng-probe-preemptirq.c | 36 + ltt/lttng-2.11.0/probes/lttng-probe-printk.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-random.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-rcu.c | 36 + ltt/lttng-2.11.0/probes/lttng-probe-regmap.c | 40 + .../probes/lttng-probe-regulator.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-rpm.c | 36 + ltt/lttng-2.11.0/probes/lttng-probe-sched.c | 36 + ltt/lttng-2.11.0/probes/lttng-probe-scsi.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-signal.c | 34 + ltt/lttng-2.11.0/probes/lttng-probe-skb.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-sock.c | 35 + .../probes/lttng-probe-statedump.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-sunrpc.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-timer.c | 38 + ltt/lttng-2.11.0/probes/lttng-probe-udp.c | 35 + ltt/lttng-2.11.0/probes/lttng-probe-user.c | 52 + ltt/lttng-2.11.0/probes/lttng-probe-user.h | 17 + ltt/lttng-2.11.0/probes/lttng-probe-v4l2.c | 37 + ltt/lttng-2.11.0/probes/lttng-probe-vmscan.c | 39 + .../probes/lttng-probe-workqueue.c | 41 + .../probes/lttng-probe-writeback.c | 46 + .../probes/lttng-probe-x86-exceptions.c | 39 + .../probes/lttng-probe-x86-irq-vectors.c | 39 + .../probes/lttng-tracepoint-event-impl.h | 1377 ++++++++ .../probes/lttng-tracepoint-event.h | 51 + ltt/lttng-2.11.0/probes/lttng-types.h | 71 + ltt/lttng-2.11.0/probes/lttng-uprobes.c | 250 ++ ltt/lttng-2.11.0/probes/lttng.c | 161 + ltt/lttng-2.11.0/probes/lttng.h | 14 + .../scripts/abi-debian-version.sh | 40 + .../scripts/abi-fedora-version.sh | 22 + ltt/lttng-2.11.0/scripts/abi-rhel-version.sh | 22 + ltt/lttng-2.11.0/scripts/abi-sle-version.sh | 43 + ltt/lttng-2.11.0/scripts/built-in.sh | 25 + ltt/lttng-2.11.0/scripts/extra-version-git.sh | 20 + .../scripts/extra-version-name.sh | 13 + .../scripts/extra-version-patches.sh | 21 + .../scripts/maintainer/do-release.sh | 110 + ltt/lttng-2.11.0/scripts/rt-patch-version.sh | 26 + ltt/lttng-2.11.0/tests/Kbuild | 15 + ltt/lttng-2.11.0/tests/Kconfig | 10 + .../clock-plugin/lttng-clock-plugin-test.c | 73 + ltt/lttng-2.11.0/tests/probes/lttng-test.c | 145 + ltt/lttng-2.11.0/wrapper/atomic.h | 42 + ltt/lttng-2.11.0/wrapper/compiler.h | 60 + ltt/lttng-2.11.0/wrapper/fdtable.c | 43 + ltt/lttng-2.11.0/wrapper/fdtable.h | 48 + ltt/lttng-2.11.0/wrapper/file.h | 38 + ltt/lttng-2.11.0/wrapper/fs.h | 43 + ltt/lttng-2.11.0/wrapper/genhd.h | 97 + ltt/lttng-2.11.0/wrapper/inline_memcpy.h | 10 + ltt/lttng-2.11.0/wrapper/irq.h | 25 + ltt/lttng-2.11.0/wrapper/irqdesc.c | 51 + ltt/lttng-2.11.0/wrapper/irqdesc.h | 33 + ltt/lttng-2.11.0/wrapper/irqflags.h | 40 + ltt/lttng-2.11.0/wrapper/kallsyms.c | 70 + ltt/lttng-2.11.0/wrapper/kallsyms.h | 64 + ltt/lttng-2.11.0/wrapper/kref.h | 39 + ltt/lttng-2.11.0/wrapper/kstrtox.h | 47 + ltt/lttng-2.11.0/wrapper/list.h | 55 + ltt/lttng-2.11.0/wrapper/mm.h | 70 + ltt/lttng-2.11.0/wrapper/objtool.h | 31 + ltt/lttng-2.11.0/wrapper/page_alloc.c | 123 + ltt/lttng-2.11.0/wrapper/page_alloc.h | 78 + ltt/lttng-2.11.0/wrapper/percpu-defs.h | 29 + ltt/lttng-2.11.0/wrapper/perf.h | 62 + ltt/lttng-2.11.0/wrapper/poll.h | 20 + ltt/lttng-2.11.0/wrapper/random.c | 58 + ltt/lttng-2.11.0/wrapper/random.h | 21 + ltt/lttng-2.11.0/wrapper/rcu.h | 77 + ltt/lttng-2.11.0/wrapper/ringbuffer/api.h | 2 + ltt/lttng-2.11.0/wrapper/ringbuffer/backend.h | 2 + .../wrapper/ringbuffer/backend_internal.h | 3 + .../wrapper/ringbuffer/backend_types.h | 2 + ltt/lttng-2.11.0/wrapper/ringbuffer/config.h | 2 + .../wrapper/ringbuffer/frontend.h | 2 + .../wrapper/ringbuffer/frontend_api.h | 2 + .../wrapper/ringbuffer/frontend_internal.h | 2 + .../wrapper/ringbuffer/frontend_types.h | 2 + .../wrapper/ringbuffer/iterator.h | 2 + ltt/lttng-2.11.0/wrapper/ringbuffer/nohz.h | 2 + ltt/lttng-2.11.0/wrapper/ringbuffer/vatomic.h | 2 + ltt/lttng-2.11.0/wrapper/ringbuffer/vfs.h | 2 + ltt/lttng-2.11.0/wrapper/spinlock.h | 34 + ltt/lttng-2.11.0/wrapper/splice.c | 65 + ltt/lttng-2.11.0/wrapper/splice.h | 24 + ltt/lttng-2.11.0/wrapper/syscall.h | 34 + ltt/lttng-2.11.0/wrapper/time.h | 22 + ltt/lttng-2.11.0/wrapper/timer.h | 89 + ltt/lttng-2.11.0/wrapper/trace-clock.c | 20 + ltt/lttng-2.11.0/wrapper/trace-clock.h | 219 ++ ltt/lttng-2.11.0/wrapper/tracepoint.h | 141 + ltt/lttng-2.11.0/wrapper/types.h | 13 + ltt/lttng-2.11.0/wrapper/uaccess.h | 29 + ltt/lttng-2.11.0/wrapper/uprobes.h | 102 + ltt/lttng-2.11.0/wrapper/uuid.h | 31 + ltt/lttng-2.11.0/wrapper/vmalloc.h | 454 +++ ltt/lttng-2.11.0/wrapper/vzalloc.h | 34 + ltt/lttng-2.11.0/wrapper/writeback.h | 101 + 325 files changed, 85602 insertions(+) create mode 100644 ltt/lttng-2.11.0/ChangeLog create mode 100644 ltt/lttng-2.11.0/CodingStyle create mode 100644 ltt/lttng-2.11.0/Kbuild.common create mode 100644 ltt/lttng-2.11.0/Kconfig create mode 100644 ltt/lttng-2.11.0/LICENSE create mode 100644 ltt/lttng-2.11.0/LICENSES/GPL-2.0 create mode 100644 ltt/lttng-2.11.0/LICENSES/LGPL-2.1 create mode 100644 ltt/lttng-2.11.0/LICENSES/MIT create mode 100644 ltt/lttng-2.11.0/Makefile create mode 100644 ltt/lttng-2.11.0/README.md create mode 100644 ltt/lttng-2.11.0/TODO create mode 100644 ltt/lttng-2.11.0/blacklist/kprobes.h create mode 100644 ltt/lttng-2.11.0/blacklist/timekeeping.h create mode 100644 ltt/lttng-2.11.0/extra_version/README create mode 100644 ltt/lttng-2.11.0/filter-bytecode.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/README create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/9p.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/exceptions.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/irq_vectors.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/trace.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/asoc.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/block.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/btrfs.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/compaction.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext3.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext4.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/gpio.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/i2c.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/irq.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd2.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/kmem.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/kvm.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/lock.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-statedump.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-test.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/mm_vmscan.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/module.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/napi.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/net.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/power.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/preemptirq.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/printk.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/random.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/rcu.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/regmap.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/regulator.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpc.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpm.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/sched.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/scsi.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/signal.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/skb.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/sock.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/timer.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/udp.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/v4l2.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/workqueue.h create mode 100644 ltt/lttng-2.11.0/instrumentation/events/lttng-module/writeback.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.0.34/powerpc-32-syscalls-3.0.34 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.1.0-rc6/x86-32-syscalls-3.1.0-rc6 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.10.0-rc7/x86-64-syscalls-3.10.0-rc7 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.13.0/mips-32-syscalls-3.13.0 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.18.0/mips-32-syscalls-3.18.0 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.4.25/arm-32-syscalls-3.4.25 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-32-syscalls-3.5.0 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-64-syscalls-3.5.0 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/4.4.0/arm-64-syscalls-4.4.0 create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/README create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_unknown.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers_override.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers.h create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h create mode 100755 ltt/lttng-2.11.0/instrumentation/syscalls/lttng-get-syscall-inout.sh create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/Kbuild create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c create mode 100755 ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-generate-headers.sh create mode 100644 ltt/lttng-2.11.0/instrumentation/syscalls/table-syscall-inout.txt create mode 100644 ltt/lttng-2.11.0/lib/Kbuild create mode 100644 ltt/lttng-2.11.0/lib/align.h create mode 100644 ltt/lttng-2.11.0/lib/bitfield.h create mode 100644 ltt/lttng-2.11.0/lib/bug.h create mode 100644 ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.c create mode 100644 ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/api.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/backend.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/backend_internal.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/backend_types.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/config.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/frontend.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/frontend_api.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/frontend_internal.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/frontend_types.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/iterator.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/nohz.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_backend.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_frontend.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_iterator.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_mmap.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_splice.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_vfs.c create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/vatomic.h create mode 100644 ltt/lttng-2.11.0/lib/ringbuffer/vfs.h create mode 100644 ltt/lttng-2.11.0/lttng-abi-old.h create mode 100644 ltt/lttng-2.11.0/lttng-abi.c create mode 100644 ltt/lttng-2.11.0/lttng-abi.h create mode 100644 ltt/lttng-2.11.0/lttng-calibrate.c create mode 100644 ltt/lttng-2.11.0/lttng-clock.c create mode 100644 ltt/lttng-2.11.0/lttng-clock.h create mode 100644 ltt/lttng-2.11.0/lttng-context-callstack-legacy-impl.h create mode 100644 ltt/lttng-2.11.0/lttng-context-callstack-stackwalk-impl.h create mode 100644 ltt/lttng-2.11.0/lttng-context-callstack.c create mode 100644 ltt/lttng-2.11.0/lttng-context-cpu-id.c create mode 100644 ltt/lttng-2.11.0/lttng-context-hostname.c create mode 100644 ltt/lttng-2.11.0/lttng-context-interruptible.c create mode 100644 ltt/lttng-2.11.0/lttng-context-migratable.c create mode 100644 ltt/lttng-2.11.0/lttng-context-need-reschedule.c create mode 100644 ltt/lttng-2.11.0/lttng-context-nice.c create mode 100644 ltt/lttng-2.11.0/lttng-context-perf-counters.c create mode 100644 ltt/lttng-2.11.0/lttng-context-pid.c create mode 100644 ltt/lttng-2.11.0/lttng-context-ppid.c create mode 100644 ltt/lttng-2.11.0/lttng-context-preemptible.c create mode 100644 ltt/lttng-2.11.0/lttng-context-prio.c create mode 100644 ltt/lttng-2.11.0/lttng-context-procname.c create mode 100644 ltt/lttng-2.11.0/lttng-context-tid.c create mode 100644 ltt/lttng-2.11.0/lttng-context-vpid.c create mode 100644 ltt/lttng-2.11.0/lttng-context-vppid.c create mode 100644 ltt/lttng-2.11.0/lttng-context-vtid.c create mode 100644 ltt/lttng-2.11.0/lttng-context.c create mode 100644 ltt/lttng-2.11.0/lttng-cpuhotplug.h create mode 100644 ltt/lttng-2.11.0/lttng-endian.h create mode 100644 ltt/lttng-2.11.0/lttng-events.c create mode 100644 ltt/lttng-2.11.0/lttng-events.h create mode 100644 ltt/lttng-2.11.0/lttng-filter-interpreter.c create mode 100644 ltt/lttng-2.11.0/lttng-filter-specialize.c create mode 100644 ltt/lttng-2.11.0/lttng-filter-validator.c create mode 100644 ltt/lttng-2.11.0/lttng-filter.c create mode 100644 ltt/lttng-2.11.0/lttng-filter.h create mode 100644 ltt/lttng-2.11.0/lttng-kernel-version.h create mode 100644 ltt/lttng-2.11.0/lttng-probes.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-client-discard.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-discard.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-overwrite.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-client-overwrite.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-client.h create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.c create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.h create mode 100644 ltt/lttng-2.11.0/lttng-ring-buffer-metadata-mmap-client.c create mode 100644 ltt/lttng-2.11.0/lttng-statedump-impl.c create mode 100644 ltt/lttng-2.11.0/lttng-string-utils.c create mode 100644 ltt/lttng-2.11.0/lttng-string-utils.h create mode 100644 ltt/lttng-2.11.0/lttng-syscalls.c create mode 100644 ltt/lttng-2.11.0/lttng-tp-mempool.c create mode 100644 ltt/lttng-2.11.0/lttng-tp-mempool.h create mode 100644 ltt/lttng-2.11.0/lttng-tracepoint.c create mode 100644 ltt/lttng-2.11.0/lttng-tracepoint.h create mode 100644 ltt/lttng-2.11.0/lttng-tracer-core.h create mode 100644 ltt/lttng-2.11.0/lttng-tracer.h create mode 100644 ltt/lttng-2.11.0/lttng-tracker-pid.c create mode 100644 ltt/lttng-2.11.0/lttng-wrapper-impl.c create mode 100644 ltt/lttng-2.11.0/probes/Kbuild create mode 100644 ltt/lttng-2.11.0/probes/define_trace.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-events-nowrite.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-events-reset.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-events-write.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-kprobes.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-kretprobes.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-9p.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-asoc.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-block.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-btrfs.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-compaction.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-ext3.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-ext4.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-gpio.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-i2c.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-irq.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-jbd.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-jbd2.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-kmem.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86-mmu.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-kvm.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-lock.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-module.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-napi.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-net.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-power.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-preemptirq.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-printk.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-random.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-rcu.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-regmap.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-regulator.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-rpm.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-sched.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-scsi.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-signal.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-skb.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-sock.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-statedump.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-sunrpc.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-timer.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-udp.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-user.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-user.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-v4l2.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-vmscan.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-workqueue.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-writeback.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-x86-exceptions.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-probe-x86-irq-vectors.c create mode 100644 ltt/lttng-2.11.0/probes/lttng-tracepoint-event-impl.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-tracepoint-event.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-types.h create mode 100644 ltt/lttng-2.11.0/probes/lttng-uprobes.c create mode 100644 ltt/lttng-2.11.0/probes/lttng.c create mode 100644 ltt/lttng-2.11.0/probes/lttng.h create mode 100755 ltt/lttng-2.11.0/scripts/abi-debian-version.sh create mode 100755 ltt/lttng-2.11.0/scripts/abi-fedora-version.sh create mode 100755 ltt/lttng-2.11.0/scripts/abi-rhel-version.sh create mode 100755 ltt/lttng-2.11.0/scripts/abi-sle-version.sh create mode 100755 ltt/lttng-2.11.0/scripts/built-in.sh create mode 100755 ltt/lttng-2.11.0/scripts/extra-version-git.sh create mode 100755 ltt/lttng-2.11.0/scripts/extra-version-name.sh create mode 100755 ltt/lttng-2.11.0/scripts/extra-version-patches.sh create mode 100755 ltt/lttng-2.11.0/scripts/maintainer/do-release.sh create mode 100755 ltt/lttng-2.11.0/scripts/rt-patch-version.sh create mode 100644 ltt/lttng-2.11.0/tests/Kbuild create mode 100644 ltt/lttng-2.11.0/tests/Kconfig create mode 100644 ltt/lttng-2.11.0/tests/clock-plugin/lttng-clock-plugin-test.c create mode 100644 ltt/lttng-2.11.0/tests/probes/lttng-test.c create mode 100644 ltt/lttng-2.11.0/wrapper/atomic.h create mode 100644 ltt/lttng-2.11.0/wrapper/compiler.h create mode 100644 ltt/lttng-2.11.0/wrapper/fdtable.c create mode 100644 ltt/lttng-2.11.0/wrapper/fdtable.h create mode 100644 ltt/lttng-2.11.0/wrapper/file.h create mode 100644 ltt/lttng-2.11.0/wrapper/fs.h create mode 100644 ltt/lttng-2.11.0/wrapper/genhd.h create mode 100644 ltt/lttng-2.11.0/wrapper/inline_memcpy.h create mode 100644 ltt/lttng-2.11.0/wrapper/irq.h create mode 100644 ltt/lttng-2.11.0/wrapper/irqdesc.c create mode 100644 ltt/lttng-2.11.0/wrapper/irqdesc.h create mode 100644 ltt/lttng-2.11.0/wrapper/irqflags.h create mode 100644 ltt/lttng-2.11.0/wrapper/kallsyms.c create mode 100644 ltt/lttng-2.11.0/wrapper/kallsyms.h create mode 100644 ltt/lttng-2.11.0/wrapper/kref.h create mode 100644 ltt/lttng-2.11.0/wrapper/kstrtox.h create mode 100644 ltt/lttng-2.11.0/wrapper/list.h create mode 100644 ltt/lttng-2.11.0/wrapper/mm.h create mode 100644 ltt/lttng-2.11.0/wrapper/objtool.h create mode 100644 ltt/lttng-2.11.0/wrapper/page_alloc.c create mode 100644 ltt/lttng-2.11.0/wrapper/page_alloc.h create mode 100644 ltt/lttng-2.11.0/wrapper/percpu-defs.h create mode 100644 ltt/lttng-2.11.0/wrapper/perf.h create mode 100644 ltt/lttng-2.11.0/wrapper/poll.h create mode 100644 ltt/lttng-2.11.0/wrapper/random.c create mode 100644 ltt/lttng-2.11.0/wrapper/random.h create mode 100644 ltt/lttng-2.11.0/wrapper/rcu.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/api.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/backend.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/backend_internal.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/backend_types.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/config.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/frontend.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_api.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_internal.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_types.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/iterator.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/nohz.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/vatomic.h create mode 100644 ltt/lttng-2.11.0/wrapper/ringbuffer/vfs.h create mode 100644 ltt/lttng-2.11.0/wrapper/spinlock.h create mode 100644 ltt/lttng-2.11.0/wrapper/splice.c create mode 100644 ltt/lttng-2.11.0/wrapper/splice.h create mode 100644 ltt/lttng-2.11.0/wrapper/syscall.h create mode 100644 ltt/lttng-2.11.0/wrapper/time.h create mode 100644 ltt/lttng-2.11.0/wrapper/timer.h create mode 100644 ltt/lttng-2.11.0/wrapper/trace-clock.c create mode 100644 ltt/lttng-2.11.0/wrapper/trace-clock.h create mode 100644 ltt/lttng-2.11.0/wrapper/tracepoint.h create mode 100644 ltt/lttng-2.11.0/wrapper/types.h create mode 100644 ltt/lttng-2.11.0/wrapper/uaccess.h create mode 100644 ltt/lttng-2.11.0/wrapper/uprobes.h create mode 100644 ltt/lttng-2.11.0/wrapper/uuid.h create mode 100644 ltt/lttng-2.11.0/wrapper/vmalloc.h create mode 100644 ltt/lttng-2.11.0/wrapper/vzalloc.h create mode 100644 ltt/lttng-2.11.0/wrapper/writeback.h diff --git a/ltt/lttng-2.11.0/ChangeLog b/ltt/lttng-2.11.0/ChangeLog new file mode 100644 index 000000000000..40e0dd7b680f --- /dev/null +++ b/ltt/lttng-2.11.0/ChangeLog @@ -0,0 +1,1123 @@ +2021-01-11 (National Clean Off Your Desk Day) LTTng modules 2.11.7 + * fix: adjust version range for trace_find_free_extent() + * fix: backport of fix: tracepoint: Optimize using static_call() (v5.10) + * Revert "fix: include order for older kernels" + * fix: backport of fix: ext4: fast commit recovery path (v5.10) + * Improve the release script + * Add release maintainer script + * fix: include order for older kernels + * fix: tracepoint: Optimize using static_call() (v5.10) + * fix: KVM: x86/mmu: Return unique RET_PF_* values if the fault was fixed (v5.10) + * fix: kvm: x86/mmu: Add TDP MMU PF handler (v5.10) + * fix: KVM: x86: Add intr/vectoring info and error code to kvm_exit tracepoint (v5.10) + * fix: ext4: fast commit recovery path (v5.10) + * fix: btrfs: make ordered extent tracepoint take btrfs_inode (v5.10) + * fix: btrfs: tracepoints: output proper root owner for trace_find_free_extent() (v5.10) + * fix: objtool: Rename frame.h -> objtool.h (v5.10) + * fix: strncpy equals destination size warning + +2020-10-05 (National Get Funky Day) LTTng modules 2.11.6 + * Cleanup: lttng-syscalls: silence warning about uninitialized bitmap variable + * fix: backport 'Add 'kernel_read' wrapper for kernels < v4.14' + * Add 'kernel_read' wrapper for kernels < v4.14 + * fix: Use 'kernel_read' to read from procfs + * fix: don't allow userspace copy to read kernel memory + * fix: Add a 1MB limit to lttng_strlen_user_inatomic + * fix: Adjust ranges for Ubuntu 4.15.0-119 kernel + * fix: Adjust ranges for Ubuntu HWE 5.0 kernels + * Fix: system call filter table + * fix: version ranges for ext4_discard_preallocations and writeback_queue_io + * fix: writeback: Fix sync livelock due to b_dirty_time processing (v5.9) + * fix: writeback: Drop I_DIRTY_TIME_EXPIRE (v5.9) + * fix: removal of [smp_]read_barrier_depends (v5.9) + * fix: ext4: indicate via a block bitmap read is prefetched… (v5.9) + * fix: ext4: limit the length of per-inode prealloc list (v5.9) + * fix: KVM: x86/mmu: Make kvm_mmu_page definition and accessor internal-only (v5.9) + * fix: Move mmutrace.h into the mmu/ sub-directory (v5.9) + * Kconfig: fix dependency issue when building in-tree without CONFIG_FTRACE + +2020-08-04 (National Chocolate Chip Cookie Day) LTTng modules 2.11.5 + * fix: no __lttng_vmalloc_node_range() prior to v2.6.38 + * Fix: Lock metadata cache on session destroy + * Fix: metadata stream leak, missing list removal and locking + * Fix: coherent state not changed atomically with metadata written + * fix: include module.h for EXPORT_SYMBOL_GPL + * fix: __lttng_vmalloc_node_range const caller introduced in v3.6 + * fix: version range for overflow_callback + * fix: global_dirty_limit was introduced in v3.1 + * fix: wrapper_uprobe_unregister is a void function + * fix: prior to v4.0, __vmalloc_node_range had no vm_flags param + * fix: vmalloc on v5.8 without KALLSYMS + * Detect missing symbols used with kallsyms_lookup at compile time + * Use exported symbol bdevname() instead of disk_name() + * Add git-review config + * fix: mm: remove vmalloc_sync_(un)mappings() (v5.8) + * fix: backport of block_bio_complete for <= v2.6.38 + * fix: mm/writeback: discard NR_UNSTABLE_NFS, use NR_WRITEBACK (v5.8) + * fix: block: remove the error argument to the block_bio_complete (v5.8) + * fix: pipe_buf_operations rework (v5.8) + +2020-06-02 (National Leave the Office Early Day (or Simply Stay Home ?) LTTng modules 2.11.4 + * Fix: Implement RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK + * fix: vmalloc_sync_mappings was backported to v5.5.12 + * Update: Additional kernel ranges for vmalloc_sync_mappings + * Update: Use vmalloc_sync_mappings for stable kernels + * Fix: Use vmalloc_sync_mappings on kernel 5.6 as well + * fix: add missing guid_t type to wrapper + * Fix: missing wrapper rename to wrapper_vmalloc_sync_mappings + * Update for kernel 5.7: use vmalloc_sync_mappings on kernels >= 5.7 + * Unbreak LTTng for kernel 5.7 + * Move lttng wrappers into own module + * Introduce lttng_guid_gen wrapper for kernels >= 5.7.0 + * Drop uuid.h wrapper + * instrumentation: update x86 kvm instrumentation for kernel >= 5.7.0 + * instrumentation: update mm_vmscan for kernel >= 5.7.0 + +2020-04-08 (The Day After National Beer Day) LTTng modules 2.11.3 + * fix: uaccess wrapper for CentOS >= 4.18.0-147 + * fix: ext4 instrumentation for CentOS >= 4.18.0-147 + * fix: signal instrumentation for CentOS >= 4.18.0-147 + * fix: kvm instrumentation for CentOS >= 4.18.0-147 + * fix: rcu instrumentation for CentOS >= 4.18.0-80 + * Fix: update kvm instrumentation for Ubuntu 5.3.0-45 + * Fix: update kvm instrumentation for Ubuntu 5.3.0-43 + * Fix: update kvm instrumentation for Ubuntu 4.15.0-92 + * Remove lttng-ftrace integration + * Remove dependency on kallsyms for splice_to_pipe (kernel 4.2+) + * Remove dependency on kallsyms for irq_to_desc (kernel 3.4+) + * Remove work-around for signed tracepoint module tainting (kernel 3.15+) + +2020-02-25 (National Chocolate Covered Nut Day) LTTng modules 2.11.2 + * Fix: rcu: Fix data-race due to atomic_t copy-by-value (5.5.6, 5.4.22) + * fix: workqueue: add worker function to workqueue_execute_end tracepoint (v5.6) + * fix: media: v4l2: abstract timeval handling in v4l2_buffer (v5.6) + * fix: rcu: Remove kfree_rcu() special casing and lazy-callback (v5.6) + * fix: rcu: Fix data-race due to atomic_t copy-by-value (v5.6) + * fix: btrfs: make btrfs_ordered_extent naming consistent (v5.6) + * fix: KVM: x86: Use gpa_t for cr2/gpa to fix TDP support on 32-bit (v5.6) + * fix: proc: decouple proc from VFS with "struct proc_ops" (v5.6) + * fix: y2038: hide timeval/timespec/itimerval/itimerspec types (v5.6) + * fix: use timespec64 on kernels that have it + * fix: move lttng_close_on_exec to proper wrapper + * fix: 'struct timex' removed upstream (v5.6) + * Fix: statedump: check task_active_pid_ns return value for NULL + * Fix: lttng-syscalls.c: marking wrong syscall probe as unregistered + +2020-01-29 (National Puzzle Day) LTTng modules 2.11.1 + * fix: function prototype in wrapper/mm.h + * sunrpc: introduce lttng_get_clid helper + * Fix: sunrpc: use signed integer for client id + * Fix: sunrpc: null rpc_clnt dereference in rpc_task_queued tracepoint + * Fix: SUNRPC: Fix oops when trace sunrpc_task events in nfs client + * fix: ext4: Reserve revoke credits for freed blocks (v5.5) + * fix: btrfs: tracepoints: constify all pointers (v5.5) + * fix: btrfs block group struct refactor (v5.5) + * fix: y2038: itimer: change implementation to timespec64 (v5.5) + * Update .gitignore from upstream + * Fix: LTTNG_KERNEL_ADD_CALLSITE: Handle unknown event type + +2019-10-17 (Wear Something Gaudy Day) LTTng modules 2.11.0 + * (no change) + +2019-10-11 (National Sausage Pizza Day) LTTng modules 2.11.0-rc7 + * Fix: btrfs: move basic block_group definitions to their own header (v5.4) + * Cleanup: Silence gcc fall-through warning + * Fix: update sched prev_state instrumentation for upstream kernel + +2019-09-07 (Walter White's Anniversary) LTTng modules 2.11.0-rc6 + * Fix: gcc-9.1 stack frame size warning + * Introduce LTTNG_KERNEL_SESSION_SET_CREATION_TIME + * Add metadata env fields + * Introduce LTTNG_KERNEL_SESSION_SET_NAME + * Fix: do not use diagnostic pragma when GCC version is lower than 4.6.0 + * Fix: missing define when not building with gcc + * Fix: lttng-tracepoint module notifier should return NOTIFY_OK + +2019-06-12 (National Peanut Butter Cookie Day) LTTng modules 2.11.0-rc5 + * Fix: Don't print ring-buffer's records count when it is not used + * Fix: do not set quiescent state on channel destroy + * Fix: ring_buffer_frontend.c: init read timer with uninitialized flags + * Introduce callstack stackwalk implementation header + * Prepare callstack common code for stackwalk + * Introduce callstack legacy implementation header + * fix: random: only read from /dev/random after its pool has received 128 bits (v5.2) + * fix: mm: move recent_rotated pages calculation to shrink_inactive_list() (v5.2) + * fix: mm/vmscan: simplify trace_reclaim_flags and trace_shrink_flags (v5.2) + * fix: mm/vmscan: drop may_writepage and classzone_idx from direct reclaim begin template (v5.2) + * fix: timer/trace: Improve timer tracing (v5.2) + * Cleanup: bitfields: streamline use of underscores + * Silence compiler "always false comparison" warning + * Fix: bitfield: shift undefined/implementation defined behaviors + * Fix: timestamp_end field should include all events within sub-buffer + * Fix: Remove start and number from syscall_get_arguments() args (v5.1) + * lttng abi documentation: clarify getter usage requirements + * Fix: don't access packet header for stream_id and stream_instance_id getters + * Fix: atomic_long_add_unless() returns a boolean + * Fix: Revert "KVM: MMU: show mmu_valid_gen..." (v5.1) + * Fix: pipe: stop using ->can_merge (v5.1) + * Fix: rcu: Remove wrapper definitions for obsolete RCU... (v5.1) + * Fix: mm: create the new vm_fault_t type (v5.1) + * Fix: extra-version-git.sh redirect stderr to /dev/null + +2019-03-12 (Homer Simpson Birthday) LTTng modules 2.11.0-rc4 + * Fix: timer instrumentation for RHEL 7.6 + +2019-03-12 (Homer Simpson Birthday) LTTng modules 2.11.0-rc3 + * Move timekeeping blacklisting to a header file + * Blacklist: kprobe for arm + * Cleanup: tp mempool: Remove logically dead code + * Fix: btrfs: Remove fsid/metadata_fsid fields from btrfs_info + * Fix: SUNRPC: Simplify defining common RPC trace events (v5.0) + * Fix: Replace pointer values with task->tk_pid and rpc_clnt->cl_clid + * Fix: Remove 'type' argument from access_ok() function (v5.0) + * Add missing SPDX license identifiers to uprobes + * Fix: ext4: adjust reserved cluster count when removing extents (v4.20) + * Fix: signal: Remove SEND_SIG_FORCED (v4.20) + * Fix: signal: Distinguish between kernel_siginfo and siginfo (v4.20) + +2018-11-01 (National Men Make Dinner Day) LTTng modules 2.11.0-rc2 + * Fix: update kvm instrumentation for SLES12 SP2 LTSS >= 4.4.121-92.92 + * Fix: Add missing const to lttng_tracepoint_ptr_deref prototype + * Fix: adapt to kernel relative references + * Fix: implicit declarations caused by buffer size checks. + * Prevent allocation of buffers if exceeding available memory + * Fix: btrfs instrumentation namespacing + * Fix: Convert rcu tracepointis to gp_seq (v4.19) + * Fix: tracing: Centralize preemptirq tracepoints (4.19) + * Fix: net: expose sk wmem in sock_exceed_buf_limit tracepoint (4.19) + * Fix: access migrate_disable field directly + * Fix: out of memory error handling + +2018-09-05 (Be Late for Something Day) LTTng modules 2.11.0-rc1 + * Fix: uprobes: missing break in lttng_event_ioctl() + * Fix: ACCESS_ONCE was removed in 4.15, use READ_ONCE instead + * Fix: instruction pointer has different names across arch + * Fix: build failures when CONFIG_UPROBES is absent + * uprobe: Support multiple call sites for the same uprobe event + * uprobe: Receive file descriptor from session instead of path to file + * uprobe: Mark uprobe event as registered + * Add uprobes support + * Fix: adjust SLE version ranges to build with SP2 and SP3 + * Fix: Allow alphanumeric characters in SLE version + * Fix: Adjust range for SuSE 4.4.103-92 kernels + * Cleanup: move to kernel style SPDX license identifiers + * Cleanup: move scripts to subdirectory + * Cleanup: modinfo keys + * Add extra version information framework + * Revert "Add btrfs file item tracepoints" + * Fix: btrfs: Remove unnecessary fs_info parameter + * Fix: btrfs: use fs_info for btrfs_handle_em_exist tracepoint + * Fix: asoc: Remove snd_soc_cache_sync() implementation + * Fix: asoc: fix printing jack name + * Fix: asoc: Consolidate path trace events + * Fix: ASoC level IO tracing removed upstream + * Enable userspace callstack contexts only on x86 + * Prevent re-entrancy in callstack-user context + * Callstack context: bump number of entries to 128 + * Fix: callstack context alignment calculation + * Cleanup callstack context + * Fix callstack context: write empty sequence if no stack trace + * Fix: callstack context: false-sharing, bad memory size allocation + * callstack context: use delimiter when stack is incomplete + * Cleanup callstack context + * Add kernel and user callstack contexts + * Assign CPU id before saving the context size + * Define max nesting count constant + * Compute variable sized context length + * Pass arguments for context size computation + * Add 9p probe + * Update delayed ref tracepoints for v3.12 + * Add btrfs file item tracepoints + * Add btrfs tracepoint for em's EEXIST case + * Fix: dyntick field added to trace_rcu_dyntick in v4.16 + * Fix: BUILD_BUG_ON with compile time constant on < v2.6.38 + * Fix: lttng filter validator ERANGE error handling + * Fix: filter interpreter: use LTTNG_SIZE_MAX + * Filter: add FILTER_OP_RETURN_S64 instruction + * Perform bitwise ops on unsigned types + * Filter: catch shift undefined behavior + * Filter: add lshift, rshift, bit not ops + * Filter: index array, sequences, implement bitwise binary operators + * Fix: pid tracker should track "pgid" for noargs probes + * lttng-tp-mempool: perform node-local allocation + * Fix: update RCU instrumentation for 4.17 + * Fix: sunrpc instrumentation for 4.17 + * Fix: use struct reclaim_stat in mm_vmscan_lru_shrink_inactive for 4.17 + * Fix: Add gfp_flags arg to mm_vmscan_kswapd_wake for 4.17 + * Update: kvm instrumentation for ubuntu 4.13.0-38 + * Fix: update kvm instrumentation for Ubuntu 3.13.0-144 + * Fix: btrfs instrumentation namespacing + * Cleanup: comment about CONFIG_HOTPLUG_CPU ifdef + * Fix: do not use CONFIG_HOTPLUG_CPU for the new hotplug API + * Fix: update kvm instrumentation for 4.1.50+ + * Use the memory pool instead of kmalloc + * Create a memory pool for temporary tracepoint probes storage + * Fix: use proper pid_ns in the process statedump + * Fix: add variable quoting to shell scripts + * Update: kvm instrumentation for fedora 4.14.13-300 + * Fix: Add Fedora version macros + * Add preemptirq instrumentation + * Clean-up: fix stale #endif comments + * Command to dump the metadata cache again + * Add a new /dev/lttng-logger interface + * Fix: update btrfs instrumentation for SuSE 4.4.114-92 + * Fix: update block instrumentation for SuSE 4.4.114-92 + * Fix: update rcu instrumentation for v4.16 + * Fix: update vmscan instrumentation for v4.16 + * Fix: update timer instrumentation on 4.16 and 4.14-rt + * Update kvm instrumentation for debian kernel 4.14.0-3 + * Fix: network instrumentation protocol enum + * Fix: update btrfs instrumentation for SuSE 4.4.103-6 + * Fix: update block instrumentation for SuSE 4.4.73-5 + * Fix: global_dirty_limit for kernel v4.2 and up + * Fix: network instrumentation handling of corrupted TCP headers + * Fix: add missing uaccess.h include from kstrtox.h wrapper + * Update: kvm instrumentation for 4.14.14+, 4.9.77+, 4.4.112+ + * Fix: btrfs_delayed_ref_head was unwired since v3.12 + * Update kvm instrumentation for debian kernel 4.9.65-3 + * Fix: debian kernel version parsing + * Fix: block instrumentation 4.14+ NULL pointer dereference + * Update: kvm instrumentation for 3.16.52 and 3.2.97 + * Fix: kvm instrumentation for 4.15 + * Update sock instrumentation for 4.15 + * Update kvm instrumentation for 4.15 + * Fix: ACCESS_ONCE() removed in kernel 4.15 + * Fix: sched instrumentation on stable RT kernels + * timer API transition for kernel 4.15 + * Fix: Don't nest get online cpus + * Fix: lttng_channel_syscall_mask() bool use in bitfield + * Fix: update kmem instrumentation for kernel 4.15 + * Fix: lttng_kvmalloc helper NULL pointer OOPS + * Update version to 2.11.0-pre + * Fix: lttng-logger get_user_pages_fast error handling + * Fix: update block instrumentation for 4.14 kernel + * Revert "Fix: update block instrumentation for kernel 4.14" + * Fix: version check error in btrfs instrumentation + * Fix: update btrfs instrumentation for kernel 4.14 + * Fix: update writeback instrumentation for kernel 4.14 + * Fix: update block instrumentation for kernel 4.14 + * Fix: vmalloc wrapper on kernel < 2.6.38 + * Fix: vmalloc wrapper on kernel >= 4.12 + * Add kmalloc failover to vmalloc + * Fix: mmap: caches aliased on virtual addresses + * Fix: update ext4 instrumentation for kernel 4.13 + * Fix: Sleeping function called from invalid context + * Fix: sched for v4.11.5-rt1 + * Make vim users life easier + * Rename Makefile.ABI.workarounds to Kbuild.common + * Fix: handle missing ftrace header on v4.12 + * Fix: pid tracker should track "pgid" + * Cleanup: typo in lttng pid tracker + * Fix: Build ftrace probe on kernels prior to 4.12 + * Fix: update ftrace probe for kernel 4.12 + * Fix: update block instrumentation for kernel 4.12 + * Calculate context length outside of retry loop + * Fix: Add support for 4.9.27-rt18 kernel + * Fix: update btrfs instrumentation for kernel 4.12 + * Fix: update ringbuffer for kernel 4.12 + * Fix: update sched instrumentation for kernel 4.12 + * Fix: ext3 was completely removed from the kernel in v4.3 + * Fix: NULL pointer dereference of THIS_MODULE with built-in modules + * Fix: add "flush empty" ioctl for stream intersection + * Revert "Fix: flush empty packets on snapshot channel" + * Revert "Fix: don't perform extra flush on metadata channel" + +2017-05-05 (International Tuba Day) LTTng modules 2.10.0-rc1 + * Fix: remove CONFIG_KALLSYMS_ALL warning on clean + * Add RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS command + * Fix: Always build vmscan probe + * Cleanup: formatting in strutils_star_glob_match explanation + * Fix: introduce LTTNG_SIZE_MAX for older kernels + * Use SIZE_MAX instead of -1ULL for size_t parameter + * filter: use SIZE_MAX for size_t + * Fix: out of bound array access in filter code + * Add support for star globbing patterns in event names + * Filtering: add support for star-only globbing patterns + * Add string utilities + * lttng-abi.c: cleanup whitespaces + * Fix: use of uninitialized ret value in lttng_abi_open_metadata_stream + * Fix: kref changes for kernel 4.11 + * Fix: atomic_add_unless() returns true/false rather than prior value + * Fix: timers cputime_t arguments replaced by ull in kernel 4.11 + * Fix: update scsi instrumentation for kernel 4.11 + * Fix: changes to the vm_op fault cb prototype in libringbuffer + * Fix: update btrfs instrumentation for kernel 4.11 + * Fix: update mm_vmscan instrumentation for kernel 4.11 + * Fix: section mismatch warning caused by __exit annotation + * socketpair: extend syscall socketpair tracing information + * Remove events/mainline unused headers + * update event README + * Fix: nmi-safe clock on 32-bit systems + * Fix: only include linux/cpuhotplug.h for kernels >= 4.10 + * Fix: 4.10 hotplug adaptation backward compat + * Fix: 4.10 btrfs instrumentation update backward compat + * Update btrfs instrumentation for 4.10 kernel + * Adapt lttng-modules to Linux 4.10 cpu hotplug state machine + * btrfs instrumentation: update to 4.10 kernel + * timer instrumentation: adapt to ktime_t without union + * Add load/unload messages to kernel log + * Update version to 2.10.0-pre + * Fix: asoc instrumentation for RHEL 7.3 + * Fix: SCSI instrumentation for SLES12 SP2 + * Add SUSE Linux Enterprise kernel version tests + * Filter code relicensing to MIT license + * Add task cpu in process statedump + * Performance: add missing unlikely in reserve + * Fix: preemptible and migratable context error handling + * Fix: bump stable kernel version ranges for clock work-around + +2016-10-07 (National Frappé Day) LTTng modules 2.9.0-rc1 + * Fix: i2c: support kernels < 3.15 + * Fix: show warning for broken clock work-around + * Bump minor ABI version + * Fix: work-around upstream Linux timekeeping bug + * Add support for i2c tracepoints + * Cleanup: makefile version checks with single "ge" + * Performance: special-case NULL in lttng_strlen_user_inatomic + * Fix: lttng_inline_memcpy does not take a __user argument + * Performance: implement lttng_inline_memcpy + * Performance: cache the backend pages pointer in context + * Cleanup: libringbuffer: remove duplicate pointer chasing in slow paths + * Performance: Only dereference commit index once + * Performance: Mark channel and buffer event disabled check unlikely + * Performance: Relax atomicity constraints for crash handling + * Performance: mark ring buffer do_copy callers always inline + * Performance: mark lib_ring_buffer_write always inline + * Kconfig: select TRACEPOINTS when built-in + * Performance: disable event counting by default + * Fix: handle large number of pages or subbuffers per buffer + * Fix: unregister cpu hotplug notifier on buffer alloc error + * Fix: sa_family is of type unsigned short + * Fix: check for sizeof sa_family to save sa_family in accept and connect + * Fix: use printk_once() for wrapper warning messages + * Fix: btrfs instrumentation for 4.8 kernel + * Fix: update mm_vmscan instrumentation for kernel 4.8 + * Fix: napi instrumentation for 4.8 kernels + * Fix: update block instrumentation to compile on 4.8 kernels + * Cleanup: reuse code in accept() and accept4() instrumentation + * Add x86-64 override for accept4 syscall + * Fix: timer wrapper: support kernels >= 4.8 + * Performance: split check deliver fast/slow paths + * Fix: x86-64 accept instrumentation + * Fix: Add support for 4.6.4-rt8 kernel + * Fix: update scsi instrumentation for 4.7+ kernels + * Fix: Use fs_initcall instead of rootfs_initcall + * Fix: Add kernel configuration for lttng clock plugin + * Fix: the clock plugin must be initiated before first use of the clock + * Fix: tests/Kbuild for older kernels + * Cleanup: __dynamic_len_idx set but not used warning + * Cleanup: coding style and comments of net.h + * net: Add TCP header data to net_* tracepoints + * net: Add IPv4/IPv6 header data to net_* tracepoints + * Fix: endianness for the container type of enum + * enumeration autoincrement: use if/else logic + * Cleanup trailing whitespaces + * lttng-test probe: test ctf_enum_auto() + * Add ctf_enum_auto() for autoincrementing enumeration values + * Implement session statedump command + * Fix: annotate bytecode interpreter for kernel stack validator + * Update version to 2.9.0-pre + * Fix: ring buffer: honor switch parameter type in remote switch + * Fix: only flush non-metadata channels + * Fix: don't perform extra flush on metadata channel + * select, poll and epoll_wait overrides on ARM 32-bit + * Fix: flush empty packets on snapshot channel + * Fix: do not generate packet at destroy after stop + * Fix: compat ioctl for flush/get metadata version + * Fix: ctf_string() should handle NULL pointers + * Fix: portability: no arith on void pointer + * Fix: add missing tests/Kbuild + * Test clock override plugin + * Fix: add modules target to base Makefile + * Fix: make clean does not include dot-config + * Fix: trigger build error if CONFIG_TRACEPOINTS is not set + * Documentation: document that CONFIG_MODULES not required when builtin + * Fix: add missing errno include in random wrapper + * Fix: mm_page_alloc_extfrag instrumentation for kernel 3.16.35 + * Fix: copy_from_user size when limited allocation + * Extract the payload of epoll_wait/epoll_pwait + * Extract the payload for epoll_ctl + * Extract the FDs and flags from poll and ppoll + * Extract the FD sets in select and pselect6 + * Add ctf_integer_bitfield_type + * Implement enumeration type + * Implement custom field support + * Implement variant type + * Implement shadow stack for dynamic len + * libringbuffer: implement event too big API + * Implement structure, compound array/sequence types + * Fix: integer endianness metadata generation + * Fix: endianness of integers received by filter + * Fix: writeback probe on RHEL >= 3.10.0-327.10.1 + * Fix: RHEL kernel 3.10.0-327.13.1 compat + * Fix: ctf_user_integer should not trigger page fault + * Fix: lib_ring_buffer_copy_from_user_inatomic error handling + * Add comment describing ioctl number duplication + * Fix: remove unused gfpflags.h from btrfs and compaction instrumentation + * Fix: Remove dead code from filter interpreter + * Fix: x86 kvm mmutrace instrumentation for kernel < 3.6 + * Fix: mm_vmscan instrumentation: remove unused gfpflags.h include + * Fix: use of uninitialized ret value in lttng_abi_create_event + * Fix: kmem instrumentation: remove unused gfpflags.h include + * Fix: 4.6 kernel: use in_compat_syscall + * Fix: use BUG_ON instead of accessing array subscript above array bounds + * Fix: Add granularity to RHEL kernel version checks + +2016-03-18 (Awkward Moments Day) LTTng modules 2.8.0-rc1 + * Bump minor tracer ABI version + * Fix: build against out-of-tree kernel build + * probes/Kbuild: remove upper level header path + * Move leftover relative include paths to system paths + * syscall instrumentation: use system headers + * tracepoint event instrumentation: use system headers + * Use system include path in wrappers + * libs: use system include paths + * Use system header paths in core implementation files + * Use system include paths in root directory headers + * Use system include paths in probes + * Update gitignore + * Use system include paths in lttng-types.h + * Use system include paths in lttng-tracepoint-event-impl.h + * Use system include path in probes/define_trace.h + * Use system include paths in probes/lttng-tracepoint-event-impl.h + * Rename probes/lttng-events.h to probes/lttng-tracepoint-event-impl.h + * Add makefile directory to include path + * Fix: event ctx get size should be after chan ctx + * Fix: filter interpreter with userspace strings + * Fix: rename kvm x86 TRACE_SYSTEM to avoid name clash + * Fix: format address fields as hexadecimal + * PowerPC-64 ABIv1: add build error if KALLSYMS_ALL is missing + * Fix: system call instrumentation overrides + * Fix: page_alloc wrapper incorrect parenthesis + * Fix: system call tracing for arm-64 compat !CONFIG_UID16 + * Fix: add struct user_msghdr forward declaration for older kernels + * Cleanup: Remove unused lttng-types module + * Fix: add missing versions and init call for page_alloc wrapper + * Fix: Define lttng-tracer metadata only once + * Fix: Add CONFIG_LTTNG to modules_install target + * Fix: Use kbuild env instead of a custom var KERNELDIR + * Update clock offset comment + * clock offset: print negative value in metadata + * Fix: handle negative clock offset + * Fix: sched instrumentation for 4.1-rt11 + * Add RT patch version macros + * Expect filter context identifiers starting with $ctx. + * ARM64: wire up compat system calls + * Add support for arm64 syscalls + * Fix: Ubuntu kernel range for block_rq_complete + * Fix: Ubuntu kernel range for mm_page_alloc_extfrag + * Fix: update vmscan instrumentation for kernel 4.5 + * Fix: check reference counts for overflow + * Fix: RHEL 7.2 scsi instrumentation + * Fix: RHEL 7.2 kvm instrumentation + * Kconfig: describe both module and in-kernel compilation options + * Add comments and indentation to Makefile + * Add support for built-in kernel build + * Rename sub makefiles to Kbuild + * Cleanup sub makefiles + * Make goals configurable with CONFIG_LTTNG + * Fix: Use generic raw_irqs_disabled_flags + * Fix: Use MAX_RT_PRIO offset in sched_wakeup_template + * Fix: update sched instrumentation for kernel 4.4.0 + * Bump version number for development branch + * Fix: interruptible context: reversed logic + * Contexts for RT debugging + * Fix: instrumentation: v4lv2 missing include + * Fix: header size larger than 256 bytes + * Instrument x86 page faults + * Fix: irq_vectors TRACE_SYSTEM name + * Instrument x86_irq_vectors + * Fix: tracepoint listing misses last loaded probe + * Fix: lttng trace-clock needs to disable preemption + * Tracepoint event: add "TP_code_post()" + * Implement array and sequence bitfields + * Fix: kmem: add mm.h include + * Add page frame number (pfn) to kmem page events + * Use pfn rather than struct page in ring buffer array + * Implement clock plugin support + * Command to regenerate the metadata of a session + * Fix: writeback instrumentation update for 4.3 Linux kernel + * Fix: update sched wakeup instrumentation for 4.3 kernel + * Fix: lttng-test build failure for kernels < 3.0 + * Use 3.18 syscall instrumentation for MIPS32 + * Update the MIPS32 syscall instrumentation to 3.18 + * Fix: Move pipe override to the arch specific pointers_override.h + * Implement lttng test module + * Cleanup: remove logically dead code + * Fix: filter validator use after free + * Fix: use after free in channel release + * Fix: non-enabler events should be disabled by default + * Fix: build failure on 2.6.36 + * Cleanup: split bdi_dirty_ratelimit with ifdef into separate macros + * Fix: writeback instrumentation for 4.2 kernels + * Fix: mm_page_alloc_extfrag instrumentation for kernel 3.18.10 + * Add stream instance id to the packet header + * Add a packet sequence number + * Fix: kmem probe with Ubuntu 3.13 kernels + * Fix: disable kvm probe if lapic.h isn't found + * Fix: timer instrumentation for 4.2 kernels + * Fix: ext4 instrumentation for 4.2 kernels + * Fix: kvm instrumentation for 4.2 kernels + * Fix: allow LTTng to be built within kernel tree + +2015-07-15 (Pet Fire Safety Day) LTTng modules 2.7.0-rc1 + * Fix: Building the event list fails on fragmented memory + * Fix: use after free on metadata cache reallocation + * Fix: version checks for kernel 4.0 + * Fix: Incorrect Ubuntu kernel patchlevel + * Fix: cpu-id context should use int type + * Implement cpu-id context + * Implement cpu_id context for filtering + * Fix: context printk mismatch on error + * Cleanup: misleading comment about deferrable timer + * Fix: arm-32 build + * Fix: Update kmem event for Ubuntu's 3.16 kernel + * Fix: RHEL 7.1 block instrumentation + * Fix: add RHEL version macros + * Fix: add missing parenthesis in ubuntu version check + * Fix: remove regmap instrumentation for kernels < 4.1 + * Fix: Update kmem event for recent Ubuntu kernel + * Fix: missing statedump end event when block device listing available + * Fix: don't generate incorrect macros for debian/ubuntu version check + * Revert "Fix: build against Ubuntu kernels" + * Fix: build against Ubuntu kernels + * Add namespace info in sched_fork and statedump + * Fix: ext4 instrumentation: flags parameter did not exist prior to 3.11 + * Fix: printk instrumentation: remove "condition" tracepoints + * Fix: regmap build against kernel 4.0 kernel headers + * Add mmu_valid_gen field to mmutrace events + * Fix: add missing x86 mmutrace kernel header include + * Fix: x86 mmutrace event extra field for kernels >= 3.11 + * Fix: remove execute flag from kvm.h file + * Fix: build x86 kvm probes on kernels >= 4.1-rc1 + * Fix: compilation on 4.1-rc1 kernel, remove unused WB_WORK_REASON + * Fix: 4.1-rc1 Linux build and regmap instrumentation + * Fix: don't clash with older Debian kernel versions + * Fix: update get_pfnblock_flags_mask wrapper for debian kernels + * Fix: discover Debian API + * Fix: Update README.md to match reality: kernels >= 2.6.36 are supported + * Fix: atomic.h wrapper for kernels < 2.6.37 + * Fix: disable x86 kvm instrumentation for kernels < 2.6.38 + * Fix: add missing types.h include for older kernels + * Fix: add hlist lttng wrappers + * Fix: add struct file_handle forward declaration + * Fix: string length calculation reversed user vs kernel args + * Fix: use lttng_rcu_dereference within lttng-syscalls.c + * Fix: add lttng rcu wrapper to allow tracing RCU + * Fix: double-unlock of session mutex + * Fix: check that class and instance prototype match + * Fix: lttng-events.h check function takes void + * Fix: regmap instrumentation for Linux 3.19.4 and 4.0 + * Fix: kernels >= 2.6.33 put utsrelease.h in generated/ + * Fix: Include utsrelease.h in lttng-kernel-version.h + * Fix: ext4 ext4_da_write_pages instrumentation for kernels < 3.11.0 + * Fix: old kernels need module.h included before vermagic.h + * Fix: net instrumentation for kernels 2.6.39 and below + * Fix: version condition in makefile + * Implement wrapper around get_pfnblock_flags_mask + * Be more restrictive in provider name check + * Fix: net instrumentation namespacing + * Fix: compaction instrumentation namespacing + * Fix: Support 4.x kernel versions in Makefile + * Fix: remove stale TP_STRUCT_entry from kvm instrumentation + * Fix: add missing module.h include to lttng-probe-user.c + * Fix: use lttng hlist wrapper in wildcard and filter + * Fix: namespace asoc and kmem instrumentation + * Fix: update instrumentation after wildcard rebase + * Fix: lttng_abi_syscall_list does not need to be exported + * Migrate ARM, powerpc, MIPS syscall instrumentation to TP_FIELDS + * Remove now unused syscalls.h from lttng-modules + * Filter: start with enabler "disabled" + * Fix coverity warning about sizeof(void **) != sizeof(void *) + * Fix length type and text sequence base + * Fix: TP_FIELDS: add missing headers + * Migrate syscall instrumentation to TP_FIELDS + * Migrate tracepoint instrumentation to TP_FIELDS + * Implement filtering infrastructure + * syscall wildcards: apply syscall filtering + * Implement syscall wildcard support + * Implement tracepoint wildcard support + * Namespace all tracepoints + * Implement list.h wrapper for hlist in older kernels + * Implement listing of pid tracker content + * Implement PID tracking + * Fix: mm_page_alloc_extfrag instrumentation for kernel 3.14.36 + * Fix: update writeback instrumentation for kernel 4.0+ + * Fix: compaction mm_compaction_isolate_template update for Linux 4.0+ + * Fix: kmem instrumentation update for mm_page_alloc_extfrag kernel 3.19.2+ + * Fix: kmem instrumentation: mm_page_alloc extfrag change_ownership field + * Fix: missing parenthesis in offset_align_floor + * Fix: implement time.h wrapper for FD_ISSET + * Fix: update sched instrumentation for 3.19+ kernels + * Fix: update rcu instrumentation for 3.19+ kernels + * Fix: update scsi instrumentation for 3.19+ kernels + * Fix: update module instrumentation for 3.19+ kernels + * Fix: Add f_dentry wrapper for 3.19+ kernels + * Fix: introduce lttng_get_unused_fd() wrapper for 3.19 kernels + * Fix: lttng_this_cpu_ptr wrapper for kernel 3.19+ + * Fix: Update btrfs instrumentation for 3.18 Linux kernel + * Fix compile error on kernel 3.0.101 with CONFIG_PERF_EVENTS + * Conditional compilation introduced by lttng-modules commit + * Fix: compaction instrumentation update for 3.14.x stable kernels + * Fix: context alignment not properly handled + * Fix compilation on Linux kernel >= 3.18.0 + * Fix: build for architectures without HAVE_SYSCALL_TRACEPOINTS + +2014-10-20 LTTng modules 2.6.0-rc1 + * Expose lttng-modules ABI version ioctl + * Fix: syscall list ioctl number conflict + * lttng-modules: fix build for non-x86 + * Fix: syscall listing of session + * Print build warning when writeback probe is disabled + * Add atomic.h wrapper for before/after atomic + * Fix compilation on Ubuntu 14.10 + * Fix: export name as text array in writeback + * Cleanup: remove unused trace_clock_read32() + * Use 3.17 ktime_get_mono_fast_ns() new API + * Check for stale version.h files + * Fix: compile lttng_statedump_process_ns on Ubuntu + * Reverse version check logic in lttng_statedump_process_ns + * Fix block_rq_complete TP on Ubuntu kernel + * Introduce macros to check Ubuntu kernel version + * Sync writeback tracepoints from mainline + * Fix: redefinition of DEFINE_WRITEBACK_EVENT + * Fix: hander negative get_syscall_nr return value + * Fix: statedump: close_on_exec flag backward compat + * Fix instrumentation of vmscan for older kernels + * Fix: older kernels (3.2.x) don't undefine TRACE_SYSTEM + * Fix: syscall listing: handle "enable all syscall" + * Fix: don't allow disabling syscalls when none are enabled + * Fix: syscall: fail disable all if all already disabled + * Fix: syscall filtering: NULL pointer deref + * Cleanup: list syscall without syscall_entry prefix + * Fix: syscall_list_show NULL pointer deref + * implement syscall mask getter + * Cleanup: lttng-abi.h coding style + * syscall listing: show syscall ID + * Allow events with same name to be enabled for each channel + * ABI: use enable a syscall ABI field name + * Implement syscall listing + * Fix: tracepoint list anonymous file name + * Fix: syscall filtering: disable all syscalls + * syscall tracing: input/output parameter handling for all arch + * lttng-get-syscall-inout.sh depends on bash + * Fix generate syscall header script: add missing escape char + * syscall instrumentation: handle copy_from_user return value + * Rename LTTng syscall instrumentation macros + * Rename LTTng instrumentation macros + * Extract input/output arguments from accept and connect syscalls + * syscall: extract pipe and pipe2 output args + * Remove sys_ prefix from syscall names + * System call inout/output arg processing + * Update syscall inout table + * Add syscall inout table + * Extract syscall exit ret value on x86 32/64 + * Extract system call exit return value + * Syscall filtering: apply to syscall exit + * System call filtering + * asoc.h: fix build with v3.17 kernel + * Fix: lttng-modules teardown NULL pointer OOPS + * Fix: handle concurrent flush vs get_next_subbuf on metadata cache + * Modernize README using Markdown + * Fix: OOT lttng_logger tracepoint not visible with signed kernels + * Add cscope to gitignore + * Update kvm instrumentation: compile on 3.17-rc1 + * Update statedump to 3.17 nsproxy locking + * Fix: noargs probes should calculate alignment and event length + * Update compaction instrumentation to 3.16 kernel + * Update vmscan instrumentation to 3.16 kernel + +2014-07-16 (Take Your Poet to Work Day) LTTng modules 2.5.0 + * (no change) + +2014-06-27 LTTng modules 2.5.0-rc2 + * Fix: statedump: check whether "files" is NULL, RCU semantic fix + * Fix: statedump handle oom case, handle errors + * Fix: correct typo in kernel version number + * Fix: blktrace instrumentation for backported branches + * Fix: statedump block devices OOPS + +2014-05-28 (International Hamburger Day) LTTng modules 2.5.0-rc1 + * Add TID field to some block_* events + * Fix: refuse overwrite mode buffers with less than two subbuffers + * Fix: lttng modules system call generation script + * Dump FD flags and mode on state dump + * Fix: incorrect rwbs field type in block_bio_queue + * Fix: blktrace instrumentation for v3.2.58+ stable branch + * Fix: pass proper args when writing commit counter + * Cleanup: lib ringbuffer: pagecpy has unsigned semantic + * Fix: allow racy tracepoint string input from kernel and userspace + * Statedump event for block devices + * Fix: update v4l2 instrumentation to 3.15 kernel + * Fix: ext4 update instrumentation to 3.15 kernel + * Fix: update block instrumentation to 3.15 kernel + * Fix: module instrumentation: update to 3.15 kernel + * Adapt to 3.15 tracepoint API + * Kernel 3.15 don't define map unmap for pipe + * Fix: add missing module version in v4l2 probe + * Add V4L2 instrumentation + * Fix: rcu instrumentation: add const qualifier to char pointers + * Fix: add missing module version information + * Use kernel 3.13 syscall tables for MIPS32 + * Add MIPS32 syscalls extracted from a 3.13 kernel + * Fix: block instrumentation: < 3.14 don't have bi_iter + * Fix: update btrfs instrumentation to kernel 3.14 + * Fix: update block layer instrumentation to kernel 3.14 + * Fix: remove __exit annotation + * Fix file permissions for lttng-statedump-impl.c + * LTTng logger ABI + +2014-02-28 (Public Sleeping Day) LTTng modules 2.4.0 + * Fix: load state dump even if work-around lookup fails + * Cleanup: fix comment + * Fix: correctly version kvm events to build against v3.0 kernel + * Add extraversion (e.g. -rc4) to lttng-tracer modinfo + +2014-02-14 LTTng modules 2.4.0-rc4 + * Fix: use after free in ring buffer clients + * Fix: Add statedump exit so module is not permanent + * Cleanup: move callback init to static initialization + * Fix: OOT lttng-statedump tracepoints not visible with signed kernels + +2014-01-29 LTTng modules 2.4.0-rc3 + * Fix: tracepoint event name mapping at unregister + * Fix: tracepoint name remapping + * Fix: enable event error path memory corruption + * Update kvm instrumentation to Linux 3.13 + * Update sched instrumentation to Linux 3.13 + * Fix: provide more precise error report for enable event + * Fix: quote event name in metadata + * Add version info to lttng-tracer.ko modinfo + +2013-12-10 LTTng modules 2.4.0-rc2 + * Fix: client_packet_header() uses wrong packet + * Cleanup: fix typo in ring buffer backend comment + * Fix: handle unknown event type parameter + * Fix: eliminate timestamp overlap between packets + * gcc blacklist: only apply when building with gcc + * Blacklist ARM gcc 4.8.0, 4.8.1, 4.8.2 + +2013-11-15 LTTng modules 2.4.0-rc1 + * Update ext4 instrumentation to Linux 3.12 + * Update RCU instrumentation to Linux 3.12 + * Update btrfs instrumentation to 3.12 kernel + * Update vmscan instrumentation to Linux 3.12 + * update: kmem instrumentation 3.12 kernel support + * lttng-statedump-impl: Use generic hard irqs for Linux >= 3.12 + * lttng-statedump-impl: Fix lttng_list_interrupts for empty implementation + * Import fix from LTSI: 3.4+ RT kernels use CONFIG_PREEMPT_RT_FULL + * Add new tracepoint in KVM + * Blacklist kernels 3.10.13 and 3.11.2 + * LTTng trace-clock: shrink kernel blacklist + * Metadata flush writes data from the cache + * Per-stream ioctl to get the current timestamp + * LTTng ringbuffer ABI calls for index generation + * Prepare LTTng override of ring buffer fops + * Blacklist Linux kernels 3.10+ + +2013-09-03 LTTng modules 2.3.0 + * Fix: metadata stream should not reference session + * Fix: btrfs: support 3.11 Linux kernel + * statedump: remove KERN_DEBUG messages + * Fix: ext4: add missing tracepoints for 3.11 kernel + * Fix: ext4: Linux 3.11 support + * Fix: ext3: 3.11 Linux support + * Fix: statedump nsproxy 3.11 Linux support + +2013-08-30 LTTng modules 2.3.0-rc2 + * Fix: metadata lttng channel refcount + * README: lttng-modules incompatible with lttng 0.x patchset + +2013-07-17 LTTng modules 2.3.0-rc1 + * Fix: kvm x86 probes side-effect + * Fix: allow get/put subbuf in loop for metadata stream + * Add support for kvm x86 specific tracepoints + * Add mainline headers for kvm x86 tracepoints + * Remove old 3.0.4 x86-64 extracted syscall info + * Point the x86-64 overrides to newly extracted 3.10-rc7 files + * Add syscalls extracted files from a 3.10-rc7 kernel + * Improve documentation of the syscall extractor script + * Fix: double length of __dynamic_len array + * Fix printk instrumentation + * Introduce __dynamic_array_enc_ext_2() and tp_memcpy_dyn_2() + * Fix: ring buffer: get_subbuf() checks should be performed on "consumed" parameter + * Fix: SWITCH_FLUSH new sub-buffer checks + * Fix: ring buffer: handle concurrent update in nested buffer wrap around check + * Cleanup: lib_ring_buffer_switch_new_end() only calls subbuffer_set_data_size() + * Revert "Cleanup: ring buffer: remove lib_ring_buffer_switch_new_end()" + * Fix: handle writes of length 0 + * Fix: ring buffer: RING_BUFFER_FLUSH ioctl buffer corruption + * Cleanup: ring buffer: remove lib_ring_buffer_switch_new_end() + * print warning and return -EBUSY on double get_subbuf() + * Add header to fix compilation of syscalls-extractor on 3.9 kernel + * Fix: don't do 0 byte event reservation + * Document that payload size need to be greater than 0 + * Fix build and load against linux-2.6.33.x + * Fix: add missing CONFIG_COMPAT around lib_ring_buffer_compat_ioctl + * Metadata cache and multiple metadata channels + * fix block instrumentation probe signature mismatch for 3.9.x kernels + * fix: block instrumentation: NULL pointer dereference + * Update rcu instrumentation to 3.9.[0-4] + * Fix CPU hotplug section mismatches + * Add system calls definitions for powerpc-32 + * Remove bashism in lttng-syscalls-generate-headers.sh + * Update ARM (32 bit) syscall tracepoints to 3.4 + +2013-05-09 LTTng modules 2.2.0-rc2 + * Remove useless lttng_metadata probe + * Fix: warning kvm_trace_exit_reason redefined for 3.9 kernel + * Fix: 3.9.0 block layer instrumentation build + * Revert "Stop build if CONFIG_TRACEPOINTS is not set" + * Stop build if CONFIG_TRACEPOINTS is not set + * Add comments to endifs. + * Fix: remove ARM set_tls system call override + * Cleanup: arm sys_mmap whitespace + * Clean up using global_dirty_limit wrapper for writeback probe + +2013-03-29 LTTng modules 2.2.0-rc1 + * Update README + * Fix: vmscan instrumentation build + * writeback instrumentation: remove duplicated structures + * block: update instrumentation to 3.9 rc kernel + * rcu: update to 3.9 rc kernel instrumentation + * workqueue instrumentation: remove duplicated structures + * Rename odd event names + * Introduce API to remap event names exposed by LTTng + * lttng-module: sched.h: Fix compilation on 3.9 kernel + * Fix Linux 3.8 btrfs probe warning + * Fix Linux 3.8 ext4 probe support + * Fix 3.8 kernel support: namespace lttng_is_signed_type() + * Fix: don't flush-final for offset 0 if reader is on sub-buffer + * instrumentation sched: add missing fork pid info + * Fix check in lttng_strlen_user_inatomic + * instrumentation: sync with Linux commit a1ce392 + * Fix: statedump: missing locking, use lttng_iterate_fd + * Implement lttng_iterate_fd wrapper + * Instrumentation cleanup: kmem events should print hex pointers + * Fix compilation of ext4 and btrfs tracepoints on 2.6.40 kernels + * Fix: statedump hang/too early completion due to logic error + * Fix: statedump hang due to incorrect wait/wakeup use + * put_ulong calls in lib_ring_buffer_compat_ioctl() should be compat + * wrapper/perf.h: Fix kernel version condition + * Add new kernel probes instrumentation + * Update kernel probes to more detailed match to kernel versions + * Fix possible kernel build errors with linux-patches + * Add missing MIT license text to 3 files under this license + * Update sites using kernel version checking macro to new range + * Make upper bound of kernel version checking macro exclusive + * sock instrumentation: fix fields to get referenced values + * ext3 instrumentation: fix of assignment code conversion + * sched instrumentation: rename "pid" fields in sched_process_exec + * Remove remaining semicolons in TP_fast_assign blocks + * Fix compilation for 3.0 kernels that are named 2.6.40 + * Fix compilation for 3.0 branch (>= 3.0.39) + * Add kernel version checking macro + * Remove semicolons in TP_fast_assign blocks + * Add ifdefs to net probe to support Linux 2.6.39 + * Add kernel probes for supplementary subsystems + * Check if interrupt action name is not null in statedump + * Fix exec instrumentation: only for kernels 3.4.0 and higher + * Add TRACE_EVENT(sched_process_exec) to sched.h + * lib/ringbuffer/frontend_api.h: Include linux/prefetch.h. + * Fix warning with 3.6.0 kernel + * ABI with support for compat 32/64 bits + * Perform calculation on bit size in 64-bit + * Use uint64_t for packet header content size and packet size + * Fix: compat layer only on supported architectures + * Fix ring buffer 32/64 bits compat + * Fix cleanup: move lttng-tracer-core.h include to lib ringbuffer config.h + * Fix ring_buffer_frontend.c: missing include lttng-tracer-core.h + * Fix: statedump missing check for NULL namespace + +2012-09-10 LTTng modules 2.1.0-rc1 + * fix timestamps on architectures without CONFIG_KTIME_SCALAR + * Support for linux kernels 2.6.32 through 2.6.37 + * Document limitation of vppid and ppid context wrt eventual RCU instrumentation + * Cleanup: no need to hold RCU read-side lock when reading current nsproxy + * Add env hostname information + * Fix: lttng_statedump_process_state for each PID NS has infinite loop + * lttng_statedump_process_state for each PID NS + * Support the hostname context + * Fix: statedump namespaced pid, tid and ppid + * Fix: statedump: disable vm maps enumeration + * Fix: ensure userspace accesses are done with _inatomic + * Fix: vppid context should test for current nsproxy + * Add MIPS system call support + * Change mode of lttng-syscalls-generate-headers.sh to 755 + * cleanup: fix typo in syscall instrumentation header + * Cleanup: remove trailing whitespace in README + * trace event: introduce TP_MODULE_NOAUTOLOAD and TP_MODULE_NOINIT + * LTTng: probe-statedump: add #include + * fix: signal_generate event should print utf8 for comm field + * Makes write operation a parameter for tp_memcpy macro + * Add coding style document + * Update instrumentation/events README file + * Add makefile target for preprocessor + * Fix: free_event_id check should compare unsigned int with -1U + * Use unsigned long type for events discarded counter + * Fix: update signal instrumentation for 3.4 kernel + * LTTng Modules ARM syscall instrumentation + * Fix: generate header missing echo -e for escape chars + * Fix: add missing uaccess.h include (for ARM) + * README: Document that CONFIG_MODULES is required + * Fix: README typo + * Fix: document required and optional kernel config options in README + +2012-03-29 LTTng modules 2.0.1 + * Fix: is_compat_task !CONFIG_COMPAT compile error on kernels >= 3.3 + +2012-03-20 LTTng modules 2.0.0 + * First STABLE version + * Add version name + +2012-03-20 LTTng modules 2.0.0-rc4 + * Update README and add version name place-holder + +2012-03-16 LTTng modules 2.0.0-rc3 + * Fix clock offset 32-bit multiplication overflow + * Fix : wrong assign of fd in state dump + * License cleanup, ifdef namespace cleanup + * Fix: ensure power of 2 check handles 64-bit size_t entirely + +2012-03-02 LTTng modules 2.0.0-rc2 + * Fix: dmesg printout should not print metadata warnings + * Fix: use transport name as channel name + * Fix: Return -EINVAL instead of print warning if non power of 2 size/num_subbuf + +2012-02-20 LTTng modules 2.0.0-rc1 + * Standardize version across toolchain + * statedump: Use old macro name for kernel 2.6.38 + +2012-02-16 LTTng modules 2.0-pre15 + * Add timer instrumentation + * fix: need to undef mainline define + * fix: Include signal.h instead of irq.h for prototype match check + * Add signal instrumentation + +2012-02-16 LTTng modules 2.0-pre14 + * syscall tracing: sys_getcpu + * Add sys_clone x86 instrumentation + * statedump: fix include circular dep + * Implement state dump + +2012-02-09 LTTng modules 2.0-pre13 + * Update README + * environment: write sysname, release, version, domain to metadata + * Allow open /proc/lttng for read & write + +2012-02-02 LTTng modules 2.0-pre12 + * Add x86 32/64 execve syscall instrumentation override + * Remove unused defines + * Add padding to ABI + * Use LTTNG_KERNEL_SYM_NAME_LEN + * Update version to 1.9.9 + * Add missing double-quotes to clock uuid + * clock: read bootid as clock monotonic ID + * Fix comment + * Cleanup comment + * clock: output clock description in metadata + * Properly fix the timekeeping overflow detection + * Fix init bug + * rename lib-ring-buffer to lttng-lib-ring-buffer + * Remove #warning + * Mass rename: ltt_*/ltt-* to LTTNG_*/LTTNG-* + * Update TODO + * Update TODO + * Remove debugfs file (keep only proc file) + * Rename lttng-debugfs-abi files to lttng-abi + +2011-12-13 LTTng modules 2.0-pre11 + * Fix OOPS caused by reference of config pointer + * Gather detailed info from x86 64 32-bit compat syscall instrumentation + * lttng lib: ring buffer move null pointer check to open + * lttng lib: ring buffer remove duplicate null pointer + * lttng lib: ring buffer: remove stale null-pointer + * lttng wrapper: add missing include to kallsyms wrapper + * lttng: cleanup one-bit signed bitfields + * Add TODO file + * Update symbol name length max size to 256 + * Fix last modifications to string_from_user operations + * Document that depmod needs to be executed by hand + * Fix strlen_user fault space reservation + * Fix tp_copy_string_from_user handling of faults + * Disable block layer tracing support for kernels < 2.6.38 + * lttng context: perf counter, fix 32-bit vs 64-bit field size bug + * Update trace clock warning to match the current development plan + * ringbuffer: make ring buffer printk less verbose + * Makefile: do not run depmod manually + +2011-09-30 LTTng modules 2.0-pre10 + * x86-32: override sys_mmap syscall instrumentation + * Fix cast warning + +2011-09-29 LTTng modules 2.0-pre9 + * x86 32 syscalls: fix !CONFIG_UID16 + * Use __string_from_user + * Add __string_from_user + * Rename "comm" context to "procname" + * Fetch "type" name field for mount syscall + * Create common override file for all architectures + * Shrink stack size usage + * Cleanup: remove unused lttng-compat-syscalls.c file + * Support detailed compat syscalls on x86_64 + * Fix syscall table + * Add disabled compat syscalls detail (work in progress) + * Add config compat support for detailed x86_32 syscalls + * Handle newer 3.1+ perf API + * Add dummy x86-32 override headers + * Bind x86-32 syscall headers + * Add x86-32 syscall headers + * Add check for KALLSYMS_ALL in syscall extraction script + * Automate string extraction for syscalls + * Automate syscall filename/pathname extraction + * Add exit to ring_buffer_frontend so module is unloadable + * Add sys_open filename (x86_64) + * Add missing memcpy callback + * copy_from_user and memset + * Add missing alignment after header write + * lib ring buffer: add frontend init as module_init + * lib ring buffer frontend: add missing lock initialization + * ARM: Set bit 0 for thumb mode in kallsyms_lookup_name returned address (missing file) + * ARM: Set bit 0 for thumb mode in kallsyms_lookup_name returned address + * Create override for sys_mmap + * Rename syscalls -> syscall in LTTng ABI + * Use different event name for compat syscalls + * Allow trace syscall table override + * Add dummy override files + * syscall detail: add override capability + * Add pointer pretty-print heuristics + * Add __field_hex + * Rename sys exit errno into ret + * Enable detailed syscalls only for native x86_64 + * Use "unknown" for compat syscalls + * Disable x86-64 specific detailed syscalls for now, until we deal with 32-bit compat + * Fix syscall exit + * Fix sys exit + * Only enable detailed syscalls for x86_64 for now + * Merge unknown syscall method with extended detail method + * Add underscore prefix before event names + * Add syscalls pointers detailed syscall tracing + * Use perl for regexp + * Support generation of syscall probes for those with pointers + * Support detailed syscalls with 0 arguments + * detailed syscall tracing (work in progress) + * Expose /proc/lttng file + * Implement detailed syscall event probe + * Disable perf build for < 2.6.33 kernels + * Syscall detail mode: generate syscall table + * block instrumentation: write cmd as hex sequence + * lttng-events TRACE_EVENT generator cleanup + * block layer instrumentation: fix cmd field + * Remove 0 args syscalls for now from type-aware syscall cb generator + * Generate trace syscall table macros + * Put syscall tracing without arg types back in place + * Detailed system call tracing (TRACE_EVENT() generation for integer support) + * lttng events probes: don't clash with "ctx" variable name + * lib ring buffer must take private pointer copy before decrementing refcount + +2011-08-16 LTTng modules 2.0-pre8 + * Fix metadata buffer wait/wakeup + +2011-08-12 LTTng modules 2.0-pre7 + * Add missing module refcount to lttng_tracepoint_list_fops + * Add license info about lib/ringbuffer/ring_buffer_mmap.c being GPLv2 diff --git a/ltt/lttng-2.11.0/CodingStyle b/ltt/lttng-2.11.0/CodingStyle new file mode 100644 index 000000000000..006d16c5bfc0 --- /dev/null +++ b/ltt/lttng-2.11.0/CodingStyle @@ -0,0 +1,10 @@ +LTTng Modules Kernel Tracer Coding Style + +The coding style used for this project follows the the Linux kernel +guide lines. Please refer to: + +- Linux kernel Documentation/CodingStyle document for details, +- Linux kernel scripts/checkpatch.pl for a script which verify the patch + coding style. + +Mathieu Desnoyers, May 30, 2012 diff --git a/ltt/lttng-2.11.0/Kbuild.common b/ltt/lttng-2.11.0/Kbuild.common new file mode 100644 index 000000000000..dde47a95a4b1 --- /dev/null +++ b/ltt/lttng-2.11.0/Kbuild.common @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# Work-around for distro-specific public modules ABI breakages. +# Some distributions break the public module instrumentation ABI +# compared to upstream stable kernels without providing other mean than +# the kernel EXTRAVERSION to figure it out. Translate this information +# into a define visible from the C preprocessor. + +DEB_API_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/abi-debian-version.sh $(CURDIR)) + +ifneq ($(DEB_API_VERSION), 0) + ccflags-y += -DDEBIAN_API_VERSION=$(DEB_API_VERSION) +endif + +RHEL_API_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/abi-rhel-version.sh $(CURDIR)) + +ifneq ($(RHEL_API_VERSION), 0) + ccflags-y += -DRHEL_API_VERSION=$(RHEL_API_VERSION) +endif + +SLE_API_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/abi-sle-version.sh $(CURDIR)) + +ifneq ($(SLE_API_VERSION), 0) + ccflags-y += -DSLE_API_VERSION=$(SLE_API_VERSION) +endif + +FEDORA_REVISION_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/abi-fedora-version.sh $(CURDIR)) + +ifneq ($(FEDORA_REVISION_VERSION), 0) + ccflags-y += -DFEDORA_REVISION_VERSION=$(FEDORA_REVISION_VERSION) +endif + +RT_PATCH_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/rt-patch-version.sh $(CURDIR)) + +ifneq ($(RT_PATCH_VERSION), 0) + ccflags-y += -DRT_PATCH_VERSION=$(RT_PATCH_VERSION) +endif + +EXTRA_VERSION_NAME:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/extra-version-name.sh $(TOP_LTTNG_MODULES_DIR)) + +ifneq ($(EXTRA_VERSION_NAME), 0) + ccflags-y += -DLTTNG_EXTRA_VERSION_NAME='"$(EXTRA_VERSION_NAME)"' +endif + +EXTRA_VERSION_GIT:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/extra-version-git.sh $(TOP_LTTNG_MODULES_DIR)) + +ifneq ($(EXTRA_VERSION_GIT), 0) + ccflags-y += -DLTTNG_EXTRA_VERSION_GIT='"$(EXTRA_VERSION_GIT)"' +endif + +EXTRA_VERSION_PATCHES:=$(shell $(TOP_LTTNG_MODULES_DIR)/scripts/extra-version-patches.sh $(TOP_LTTNG_MODULES_DIR)) + +# vim:syntax=make diff --git a/ltt/lttng-2.11.0/Kconfig b/ltt/lttng-2.11.0/Kconfig new file mode 100644 index 000000000000..10eccff60e80 --- /dev/null +++ b/ltt/lttng-2.11.0/Kconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +config LTTNG + tristate "LTTng support" + select TRACING + help + LTTng is an open source tracing framework for Linux. + + See https://lttng.org/ + + To compile as a set of modules, choose M here. To compile into + the Linux kernel image, choose Y. + + If unsure, say N. + +source "lttng/tests/Kconfig" diff --git a/ltt/lttng-2.11.0/LICENSE b/ltt/lttng-2.11.0/LICENSE new file mode 100644 index 000000000000..9b8e8b3100fe --- /dev/null +++ b/ltt/lttng-2.11.0/LICENSE @@ -0,0 +1,34 @@ +LTTng modules licensing +Mathieu Desnoyers +June 2, 2011 + +* LGPL-2.1 / GPL-2.0 dual-license + +The files contained within this package are licensed under +LGPL-2.1 / GPL-2.0 dual-license (see LICENSES/LGPL-2.1 and LICENSES/GPL-2.0 for +details), except for files identified by the following sections. + +* GPL-2.0 license + +These files are licensed exclusively under the GPL-2.0 license. See +LICENSES/GPL-2.0 for details. + +lib/ringbuffer/ring_buffer_splice.c +lib/ringbuffer/ring_buffer_mmap.c +instrumentation/events/lttng-module/*.h +wrapper/list.h + +* MIT-style license + +These files are licensed under an MIT-style license. See LICENSES/MIT +for details. + +lib/prio_heap/lttng_prio_heap.h +lib/prio_heap/lttng_prio_heap.c +lib/bitfield.h +filter-bytecode.h +lttng-filter-interpreter.c +lttng-filter-specialize.c +lttng-filter-validator.c +lttng-filter.c +lttng-filter.h diff --git a/ltt/lttng-2.11.0/LICENSES/GPL-2.0 b/ltt/lttng-2.11.0/LICENSES/GPL-2.0 new file mode 100644 index 000000000000..ff0812fd89cc --- /dev/null +++ b/ltt/lttng-2.11.0/LICENSES/GPL-2.0 @@ -0,0 +1,359 @@ +Valid-License-Identifier: GPL-2.0 +Valid-License-Identifier: GPL-2.0-only +Valid-License-Identifier: GPL-2.0+ +Valid-License-Identifier: GPL-2.0-or-later +SPDX-URL: https://spdx.org/licenses/GPL-2.0.html +Usage-Guide: + To use this license in source code, put one of the following SPDX + tag/value pairs into a comment according to the placement + guidelines in the licensing rules documentation. + For 'GNU General Public License (GPL) version 2 only' use: + SPDX-License-Identifier: GPL-2.0 + or + SPDX-License-Identifier: GPL-2.0-only + For 'GNU General Public License (GPL) version 2 or any later version' use: + SPDX-License-Identifier: GPL-2.0+ + or + SPDX-License-Identifier: GPL-2.0-or-later +License-Text: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ltt/lttng-2.11.0/LICENSES/LGPL-2.1 b/ltt/lttng-2.11.0/LICENSES/LGPL-2.1 new file mode 100644 index 000000000000..27bb4342a3e8 --- /dev/null +++ b/ltt/lttng-2.11.0/LICENSES/LGPL-2.1 @@ -0,0 +1,503 @@ +Valid-License-Identifier: LGPL-2.1 +Valid-License-Identifier: LGPL-2.1+ +SPDX-URL: https://spdx.org/licenses/LGPL-2.1.html +Usage-Guide: + To use this license in source code, put one of the following SPDX + tag/value pairs into a comment according to the placement + guidelines in the licensing rules documentation. + For 'GNU Lesser General Public License (LGPL) version 2.1 only' use: + SPDX-License-Identifier: LGPL-2.1 + For 'GNU Lesser General Public License (LGPL) version 2.1 or any later + version' use: + SPDX-License-Identifier: LGPL-2.1+ +License-Text: + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts as +the successor of the GNU Library Public License, version 2, hence the +version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software +Foundation and other authors who decide to use it. You can use it too, but +we suggest you first think carefully about whether this license or the +ordinary General Public License is the better strategy to use in any +particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not +price. Our General Public Licenses are designed to make sure that you have +the freedom to distribute copies of free software (and charge for this +service if you wish); that you receive source code or can get it if you +want it; that you can change the software and use pieces of it in new free +programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for you if +you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You +must make sure that they, too, receive or can get the source code. If you +link other code with the library, you must provide complete object files to +the recipients, so that they can relink them with the library after making +changes to the library and recompiling it. And you must show them these +terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone +else and passed on, the recipients should know that what they have is not +the original version, so that the original author's reputation will not be +affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any +free program. We wish to make sure that a company cannot effectively +restrict the users of a free program by obtaining a restrictive license +from a patent holder. Therefore, we insist that any patent license obtained +for a version of the library must be consistent with the full freedom of +use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public +License, applies to certain designated libraries, and is quite different +from the ordinary General Public License. We use this license for certain +libraries in order to permit linking those libraries into non-free +programs. + +When a program is linked with a library, whether statically or using a +shared library, the combination of the two is legally speaking a combined +work, a derivative of the original library. The ordinary General Public +License therefore permits such linking only if the entire combination fits +its criteria of freedom. The Lesser General Public License permits more lax +criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does +Less to protect the user's freedom than the ordinary General Public +License. It also provides other free software developers Less of an +advantage over competing non-free programs. These disadvantages are the +reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + +For example, on rare occasions, there may be a special need to encourage +the widest possible use of a certain library, so that it becomes a de-facto +standard. To achieve this, non-free programs must be allowed to use the +library. A more frequent case is that a free library does the same job as +widely used non-free libraries. In this case, there is little to gain by +limiting the free library to free software only, so we use the Lesser +General Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free +software. For example, permission to use the GNU C Library in non-free +programs enables many more people to use the whole GNU operating system, as +well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a +modified version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code +derived from the library, whereas the latter must be combined with the +library in order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program + which contains a notice placed by the copyright holder or other + authorized party saying it may be distributed under the terms of this + Lesser General Public License (also called "this License"). Each + licensee is addressed as "you". + + A "library" means a collection of software functions and/or data + prepared so as to be conveniently linked with application programs + (which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work which + has been distributed under these terms. A "work based on the Library" + means either the Library or any derivative work under copyright law: + that is to say, a work containing the Library or a portion of it, either + verbatim or with modifications and/or translated straightforwardly into + another language. (Hereinafter, translation is included without + limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for making + modifications to it. For a library, complete source code means all the + source code for all modules it contains, plus any associated interface + definition files, plus the scripts used to control compilation and + installation of the library. + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + a program using the Library is not restricted, and output from such a + program is covered only if its contents constitute a work based on the + Library (independent of the use of the Library in a tool for writing + it). Whether that is true depends on what the Library does and what the + program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the notices + that refer to this License and to the absence of any warranty; and + distribute a copy of this License along with the Library. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, + thus forming a work based on the Library, and copy and distribute such + modifications or work under the terms of Section 1 above, provided that + you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating + that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to + all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table + of data to be supplied by an application program that uses the + facility, other than as an argument passed when the facility is + invoked, then you must make a good faith effort to ensure that, in + the event an application does not supply such function or table, the + facility still operates, and performs whatever part of its purpose + remains meaningful. + + (For example, a function in a library to compute square roots has a + purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must be + optional: if the application does not supply it, the square root + function must still compute square roots.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Library, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Library, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Library. + + In addition, mere aggregation of another work not based on the Library + with the Library (or with a work based on the Library) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public + License instead of this License to a given copy of the Library. To do + this, you must alter all the notices that refer to this License, so that + they refer to the ordinary GNU General Public License, version 2, + instead of to this License. (If a newer version than version 2 of the + ordinary GNU General Public License has appeared, then you can specify + that version instead if you wish.) Do not make any other change in these + notices. + + Once this change is made in a given copy, it is irreversible for that + copy, so the ordinary GNU General Public License applies to all + subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of the + Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of + it, under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you accompany it with the + complete corresponding machine-readable source code, which must be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange. + + If distribution of object code is made by offering access to copy from a + designated place, then offering equivalent access to copy the source + code from the same place satisfies the requirement to distribute the + source code, even though third parties are not compelled to copy the + source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but + is designed to work with the Library by being compiled or linked with + it, is called a "work that uses the Library". Such a work, in isolation, + is not a derivative work of the Library, and therefore falls outside the + scope of this License. + + However, linking a "work that uses the Library" with the Library creates + an executable that is a derivative of the Library (because it contains + portions of the Library), rather than a "work that uses the + library". The executable is therefore covered by this License. Section 6 + states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file + that is part of the Library, the object code for the work may be a + derivative work of the Library even though the source code is + not. Whether this is true is especially significant if the work can be + linked without the Library, or if the work is itself a library. The + threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data structure + layouts and accessors, and small macros and small inline functions (ten + lines or less in length), then the use of the object file is + unrestricted, regardless of whether it is legally a derivative + work. (Executables containing this object code plus portions of the + Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may + distribute the object code for the work under the terms of Section + 6. Any executables containing that work also fall under Section 6, + whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a + "work that uses the Library" with the Library to produce a work + containing portions of the Library, and distribute that work under terms + of your choice, provided that the terms permit modification of the work + for the customer's own use and reverse engineering for debugging such + modifications. + + You must give prominent notice with each copy of the work that the + Library is used in it and that the Library and its use are covered by + this License. You must supply a copy of this License. If the work during + execution displays copyright notices, you must include the copyright + notice for the Library among them, as well as a reference directing the + user to the copy of this License. Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable + source code for the Library including whatever changes were used in + the work (which must be distributed under Sections 1 and 2 above); + and, if the work is an executable linked with the Library, with the + complete machine-readable "work that uses the Library", as object + code and/or source code, so that the user can modify the Library and + then relink to produce a modified executable containing the modified + Library. (It is understood that the user who changes the contents of + definitions files in the Library will not necessarily be able to + recompile the application to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a copy + of the library already present on the user's computer system, rather + than copying library functions into the executable, and (2) will + operate properly with a modified version of the library, if the user + installs one, as long as the modified version is interface-compatible + with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least three + years, to give the same user the materials specified in Subsection + 6a, above, for a charge no more than the cost of performing this + distribution. + + d) If distribution of the work is made by offering access to copy from a + designated place, offer equivalent access to copy the above specified + materials from the same place. + + e) Verify that the user has already received a copy of these materials + or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the Library" + must include any data and utility programs needed for reproducing the + executable from it. However, as a special exception, the materials to be + distributed need not include anything that is normally distributed (in + either source or binary form) with the major components (compiler, + kernel, and so on) of the operating system on which the executable runs, + unless that component itself accompanies the executable. + + It may happen that this requirement contradicts the license restrictions + of other proprietary libraries that do not normally accompany the + operating system. Such a contradiction means you cannot use both them + and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library + side-by-side in a single library together with other library facilities + not covered by this License, and distribute such a combined library, + provided that the separate distribution of the work based on the Library + and of the other library facilities is otherwise permitted, and provided + that you do these two things: + + a) Accompany the combined library with a copy of the same work based on + the Library, uncombined with any other library facilities. This must + be distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part + of it is a work based on the Library, and explaining where to find + the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the + Library except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, link with, or distribute the + Library is void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, from you + under this License will not have their licenses terminated so long as + such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed + it. However, nothing else grants you permission to modify or distribute + the Library or its derivative works. These actions are prohibited by law + if you do not accept this License. Therefore, by modifying or + distributing the Library (or any work based on the Library), you + indicate your acceptance of this License to do so, and all its terms and + conditions for copying, distributing or modifying the Library or works + based on it. + +10. Each time you redistribute the Library (or any work based on the + Library), the recipient automatically receives a license from the + original licensor to copy, distribute, link with or modify the Library + subject to these terms and conditions. You may not impose any further + restrictions on the recipients' exercise of the rights granted + herein. You are not responsible for enforcing compliance by third + parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot + distribute so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you + may not distribute the Library at all. For example, if a patent license + would not permit royalty-free redistribution of the Library by all + those who receive copies directly or indirectly through you, then the + only way you could satisfy both it and this License would be to refrain + entirely from distribution of the Library. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply, and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up + to the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that + choice. + + This section is intended to make thoroughly clear what is believed to + be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain + countries either by patents or by copyrighted interfaces, the original + copyright holder who places the Library under this License may add an + explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of + the Lesser General Public License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Library + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Library does not specify a license + version number, you may choose any version ever published by the Free + Software Foundation. + +14. If you wish to incorporate parts of the Library into other free + programs whose distribution conditions are incompatible with these, + write to the author to ask for permission. For software which is + copyrighted by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision will be + guided by the two goals of preserving the free status of all + derivatives of our free software and of promoting the sharing and reuse + of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN + OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES + PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER + EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH + YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR + REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + +To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + +one line to give the library's name and an idea of what it does. +Copyright (C) year name of author + +This library is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at +your option) any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License +for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add +information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in +the library `Frob' (a library for tweaking knobs) written +by James Random Hacker. + +signature of Ty Coon, 1 April 1990 +Ty Coon, President of Vice +That's all there is to it! diff --git a/ltt/lttng-2.11.0/LICENSES/MIT b/ltt/lttng-2.11.0/LICENSES/MIT new file mode 100644 index 000000000000..f33a68ceb3ea --- /dev/null +++ b/ltt/lttng-2.11.0/LICENSES/MIT @@ -0,0 +1,30 @@ +Valid-License-Identifier: MIT +SPDX-URL: https://spdx.org/licenses/MIT.html +Usage-Guide: + To use the MIT License put the following SPDX tag/value pair into a + comment according to the placement guidelines in the licensing rules + documentation: + SPDX-License-Identifier: MIT +License-Text: + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/ltt/lttng-2.11.0/Makefile b/ltt/lttng-2.11.0/Makefile new file mode 100644 index 000000000000..c30580376c42 --- /dev/null +++ b/ltt/lttng-2.11.0/Makefile @@ -0,0 +1,129 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +ifneq ($(KERNELRELEASE),) + + # This part of the Makefile is used when called by the kernel build system + # and defines the modules to be built. + + ifdef CONFIG_LOCALVERSION # Check if dot-config is included. + ifeq ($(CONFIG_TRACEPOINTS),) + $(error The option CONFIG_TRACEPOINTS needs to be enabled in your kernel configuration) + endif # CONFIG_TRACEPOINTS + endif # ifdef CONFIG_LOCALVERSION + + TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST))) + + lttng_check_linux_version = $(shell pwd)/include/linux/version.h + lttng_check_generated_linux_version = $(shell pwd)/include/generated/uapi/linux/version.h + + # + # Check for stale version.h, which can be a leftover from an old Linux + # kernel tree moved to a newer kernel version, only pruned by make + # distclean. + # + ifneq ($(wildcard $(lttng_check_linux_version)),) + ifneq ($(wildcard $(lttng_check_generated_linux_version)),) + $(error Duplicate version.h files found in $(lttng_check_linux_version) and $(lttng_check_generated_linux_version). Consider running make distclean on your kernel, or removing the stale $(lttng_check_linux_version) file) + endif + endif + + include $(TOP_LTTNG_MODULES_DIR)/Kbuild.common + + ccflags-y += -I$(TOP_LTTNG_MODULES_DIR) + + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-client-discard.o + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-client-overwrite.o + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-metadata-client.o + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-client-mmap-discard.o + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-client-mmap-overwrite.o + obj-$(CONFIG_LTTNG) += lttng-ring-buffer-metadata-mmap-client.o + obj-$(CONFIG_LTTNG) += lttng-clock.o + + obj-$(CONFIG_LTTNG) += lttng-tracer.o + + obj-$(CONFIG_LTTNG) += lttng-wrapper.o + + lttng-tracer-objs := lttng-events.o lttng-abi.o lttng-string-utils.o \ + lttng-probes.o lttng-context.o \ + lttng-context-pid.o lttng-context-procname.o \ + lttng-context-prio.o lttng-context-nice.o \ + lttng-context-vpid.o lttng-context-tid.o \ + lttng-context-vtid.o lttng-context-ppid.o \ + lttng-context-vppid.o lttng-context-cpu-id.o \ + lttng-context-interruptible.o \ + lttng-context-need-reschedule.o \ + lttng-context-callstack.o lttng-calibrate.o \ + lttng-context-hostname.o \ + probes/lttng.o \ + lttng-tracker-pid.o \ + lttng-filter.o lttng-filter-interpreter.o \ + lttng-filter-specialize.o \ + lttng-filter-validator.o \ + probes/lttng-probe-user.o \ + lttng-tp-mempool.o \ + + lttng-wrapper-objs := wrapper/page_alloc.o \ + wrapper/random.o \ + wrapper/trace-clock.o \ + wrapper/kallsyms.o \ + wrapper/irqdesc.o \ + wrapper/fdtable.o \ + lttng-wrapper-impl.o + + ifneq ($(CONFIG_HAVE_SYSCALL_TRACEPOINTS),) + lttng-tracer-objs += lttng-syscalls.o + endif # CONFIG_HAVE_SYSCALL_TRACEPOINTS + + ifneq ($(CONFIG_PERF_EVENTS),) + lttng-tracer-objs += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 33 \) ] ; then \ + echo "lttng-context-perf-counters.o" ; fi;) + endif # CONFIG_PERF_EVENTS + + ifneq ($(CONFIG_PREEMPT_RT_FULL),) + lttng-tracer-objs += lttng-context-migratable.o + lttng-tracer-objs += lttng-context-preemptible.o + endif # CONFIG_PREEMPT_RT_FULL + + ifneq ($(CONFIG_PREEMPT),) + lttng-tracer-objs += lttng-context-preemptible.o + endif + + lttng-tracer-objs += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 15 \) ] ; then \ + echo "lttng-tracepoint.o" ; fi;) + + obj-$(CONFIG_LTTNG) += lttng-statedump.o + lttng-statedump-objs := lttng-statedump-impl.o + + obj-$(CONFIG_LTTNG) += probes/ + obj-$(CONFIG_LTTNG) += lib/ + obj-$(CONFIG_LTTNG) += tests/ + +else # KERNELRELEASE + +# This part of the Makefile is used when the 'make' command is runned in the +# base directory of the lttng-modules sources. It sets some environment and +# calls the kernel build system to build the actual modules. + +KERNELDIR ?= /lib/modules/$(shell uname -r)/build +PWD := $(shell pwd) +CFLAGS = $(EXTCFLAGS) + +default: modules + +modules: + $(MAKE) -C $(KERNELDIR) M=$(PWD) CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m modules + +modules_install: + $(MAKE) -C $(KERNELDIR) M=$(PWD) CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m modules_install + +clean: + $(MAKE) -C $(KERNELDIR) M=$(PWD) clean + +%.i: %.c + $(MAKE) -C $(KERNELDIR) M=$(PWD) CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m $@ + +endif # KERNELRELEASE diff --git a/ltt/lttng-2.11.0/README.md b/ltt/lttng-2.11.0/README.md new file mode 100644 index 000000000000..be8aa5f89cb8 --- /dev/null +++ b/ltt/lttng-2.11.0/README.md @@ -0,0 +1,122 @@ +LTTng-modules +============= + +_by [Mathieu Desnoyers](mailto:mathieu.desnoyers@efficios.com)_ + + +LTTng kernel modules are Linux kernel modules which make +[LTTng](http://lttng.org/) kernel tracing possible. They include +essential control modules and many probes which instrument numerous +interesting parts of Linux. LTTng-modules builds against a vanilla or +distribution kernel, with no need for additional patches. + +Other notable features: + + - Produces [CTF](http://www.efficios.com/ctf) + (Common Trace Format) natively. + - Tracepoints, function tracer, CPU Performance Monitoring Unit (PMU) + counters, kprobes, and kretprobes support. + - Have the ability to attach _context_ information to events in the + trace (e.g., any PMU counter, PID, PPID, TID, command name, etc). + All the extra information fields to be collected with events are + optional, specified on a per-tracing-session basis (except for + timestamp and event ID, which are mandatory). + + +Building +-------- + +To build and install LTTng-modules, you will need to have your kernel +headers available (or access to your full kernel source tree), and do: + + make + sudo make modules_install + sudo depmod -a + +The above commands will build LTTng-modules against your +current kernel. If you need to build LTTng-modules against a custom +kernel, do: + + make KERNELDIR=/path/to/custom/kernel + sudo make KERNELDIR=/path/to/custom/kernel modules_install + sudo depmod -a kernel_version + + +### Kernel built-in support + +It is also possible to build these modules as part of a kernel image. Simply +run the [`scripts/built-in.sh`](scripts/built-in.sh) script with the path to +your kernel source directory as an argument. It will symlink the +lttng-modules directory in the kernel sources and add an include in the kernel +Makefile. + +Then configure your kernel as usual and enable the `CONFIG_LTTNG` option. + + +### Required kernel config options + +Make sure your target kernel has the following config options enabled: + + - `CONFIG_MODULES`: loadable module support (not strictly required + when built into the kernel) + - `CONFIG_KALLSYMS`: see files in [`wrapper`](wrapper); this is + necessary until the few required missing symbols are exported to GPL + modules from mainline + - `CONFIG_HIGH_RES_TIMERS`: needed for LTTng 2.x clock source + - `CONFIG_TRACEPOINTS`: kernel tracepoint instrumentation + (enabled as a side-effect of any of the perf/ftrace/blktrace + instrumentation features). + - `CONFIG_KPROBES` (5.7+): use kallsyms for kernel 5.7 and newer. + + +### Supported (optional) kernel config options + +The following kernel configuration options will affect the features +available from LTTng: + + - `CONFIG_HAVE_SYSCALL_TRACEPOINTS`: system call tracing: + + lttng enable-event -k --syscall + lttng enable-event -k -a + + - `CONFIG_PERF_EVENTS`: performance counters: + + lttng add-context -t perf:* + + - `CONFIG_EVENT_TRACING`: needed to allow block layer tracing + - `CONFIG_KPROBES`: dynamic probes: + + lttng enable-event -k --probe ... + + - `CONFIG_KRETPROBES`: dynamic function entry/return probes: + + lttng enable-event -k --function ... + + - `CONFIG_KALLSYMS_ALL`: state dump of mapping between block device + number and name + + +Usage +----- + +Use [LTTng-tools](https://lttng.org/download) to control the tracer. +The session daemon of LTTng-tools should automatically load the LTTng +kernel modules when needed. Use [Babeltrace](https://lttng.org/babeltrace) +to print traces as a human-readable text log. + + +Support +------- + +Linux kernels >= 2.6.36 are supported. + + +Notes +----- + +### About perf PMU counters support + +Each PMU counter has its zero value set when it is attached to a context with +add-context. Therefore, it is normal that the same counters attached to both the +stream context and event context show different values for a given event; what +matters is that they increment at the same rate. diff --git a/ltt/lttng-2.11.0/TODO b/ltt/lttng-2.11.0/TODO new file mode 100644 index 000000000000..090b923e3765 --- /dev/null +++ b/ltt/lttng-2.11.0/TODO @@ -0,0 +1,116 @@ +Please contact Mathieu Desnoyers for +questions about this TODO list. The "Cleanup/Testing" section would be +good to go through before integration into mainline. The "Features" +section is a wish list of features to complete before releasing the +"LTTng 2.0" final version, but are not required to have LTTng working. +These features are mostly performance enhancements and instrumentation +enhancements. + +TODO: + +A) Cleanup/Testing + + 1) Test lib ring buffer snapshot feature. + When working on the lttngtop project, Julien Desfossez + reported that he needed to push the consumer position + forward explicitely with lib_ring_buffer_put_next_subbuf. + This means that although the usual case of pairs of + lib_ring_buffer_get_next_subbuf/lib_ring_buffer_put_next_subbuf + work fine, there is probably a problem that needs to be + investigated in + lib_ring_buffer_get_subbuf/lib_ring_buffer_put_subbuf, which + depend on the producer to push the reader position. + Contact: Julien Desfossez + + +B) Features + + 1) Integration of the LTTng 0.x trace clocks into + LTTng 2.0. + Currently using mainline kernel monotonic clock. NMIs can + therefore not be traced, and this causes a significant + performance degradation compared to the LTTng 0.x trace + clocks. Imply the creation of drivers/staging/lttng/arch to + contain the arch-specific clock support files. + * Dependency: addition of clock descriptions to CTF. + See: http://git.lttng.org/?p=linux-2.6-lttng.git;a=summary + for the LTTng 0.x git tree. + + 2) Port OMAP3 LTTng trace clocks to x86 to support systems + without constant TSC. + * Dependency: (B.1) + See: http://git.lttng.org/?p=linux-2.6-lttng.git;a=summary + for the LTTng 0.x git tree. + + 3) Implement mmap operation on an anonymous file created by a + LTTNG_KERNEL_CLOCK ioctl to export data to export + synchronized kernel and user-level LTTng trace clocks: + with: + - shared per-cpu data, + - read seqlock. + The content exported by this shared memory area will be + arch-specific. + * Dependency: (B.1) && (B.2) + See: http://git.lttng.org/?p=linux-2.6-lttng.git;a=summary + for the LTTng 0.x git tree, which has vDSO support for + LTTng trace clock on the x86 architecture. + + 3) Integrate the "statedump" module from LTTng 0.x into LTTng + 2.0. + See: http://git.lttng.org/?p=lttng-modules.git;a=shortlog;h=refs/heads/v0.19-stable + ltt-statedump.c + + 4) Generate system call TRACE_EVENT headers for all + architectures (currently done: x86 32/64). + + 5) Define "unknown" system calls into instrumentation/syscalls + override files / or do SYSCALL_DEFINE improvements to + mainline kernel to allow automatic generation of these + missing system call descriptions. + + 6) Create missing tracepoint event headers files into + instrumentation/events from headers located in + include/trace/events/. Choice: either do as currently done, + and copy those headers locally into the lttng driver and + perform the modifications locally, or push TRACE_EVENT API + modification into mainline headers, which would require + collaboration from Ftrace/Perf maintainers. + + 7) Poll: implement a poll and/or epoll exclusive wakeup scheme, + which contradicts POSIX, but protect multiple consumer + threads from thundering herd effect. + + 8) Re-integrate sample modules from libringbuffer into + lttng driver. Those modules can be used as example of how to + use libringbuffer in other contexts than LTTng, and are + useful to perform benchmarks of the ringbuffer library. + See: http://www.efficios.com/ringbuffer + + 9) NOHZ support for lib ring buffer. NOHZ infrastructure in the + Linux kernel does not support notifiers chains, which does + not let LTTng play nicely with low power consumption setups + for flight recorder (overwrite mode) live traces. One way to + allow integration between NOHZ and LTTng would be to add + support for such notifiers into NOHZ kernel infrastructure. + + 10) Turn lttng-probes.c probe_list into a + hash table. Turns O(n^2) trace systems registration (cost + for n systems) into O(n). (O(1) per system) + + 11) drivers/staging/lttng/probes/lttng-ftrace.c: + LTTng currently uses kretprobes for per-function tracing, + not the function tracer. So lttng-ftrace.c should be used + for "all" function tracing. + + 12) drivers/staging/lttng/probes/lttng-types.c: + This is a currently unused placeholder to export entire C + type declarations into the trace metadata, e.g. for support + of describing the layout of structures/enumeration mapping + along with syscall entry events. The design of this support + will likely change though, and become integrated with the + TRACE_EVENT support within lttng, by adding new macros, and + support for generation of metadata from these macros, to + allow description of those compound types/enumerations. + +Please send patches +To: Mathieu Desnoyers diff --git a/ltt/lttng-2.11.0/blacklist/kprobes.h b/ltt/lttng-2.11.0/blacklist/kprobes.h new file mode 100644 index 000000000000..6c1d7a53e5ac --- /dev/null +++ b/ltt/lttng-2.11.0/blacklist/kprobes.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * blacklist/kprobes.h + * + * Blacklist of kernel for buggy kprobes implementation. + * + * Copyright (C) 2019 Jonathan Rajotte-Julien + */ + +#ifndef _LTTNG_BLACKLIST_KPROBES_H +#define _LTTNG_BLACKLIST_KPROBES_H + +#include + +#if LTTNG_KERNEL_RANGE(4,20,0, 4,20,13) \ + || LTTNG_KERNEL_RANGE(4,19,9, 4,19,26) \ + || LTTNG_KERNEL_RANGE(4,14,87, 4,14,104) +# if defined(CONFIG_ARM) && defined(CONFIG_OPTPROBES) +# error "Your kernel is known to have buggy optimized kprobes implementation. Fixed by commit 0ac569bf6a7983c0c5747d6df8db9dc05bc92b6c \"ARM: 8834/1: Fix: kprobes: optimized kprobes illegal instruction\" in Linux. Disable CONFIG_OPTPROBES or upgrade your kernel." +# endif /* #if defined(CONFIG_ARM) && defined(CONFIG_OPTPROBES) */ +#endif + +#endif /* _LTTNG_BLACKLIST_KPROBES_H */ diff --git a/ltt/lttng-2.11.0/blacklist/timekeeping.h b/ltt/lttng-2.11.0/blacklist/timekeeping.h new file mode 100644 index 000000000000..f9405ea9fb9d --- /dev/null +++ b/ltt/lttng-2.11.0/blacklist/timekeeping.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * blacklist/timekeeping.h + * + * Blacklist of kernel for buggy timekeeping implementation. + * + * Copyright (C) 2019 Jonathan Rajotte-Julien + */ + +#ifndef _LTTNG_BLACKLIST_TIMEKEEPING_H +#define _LTTNG_BLACKLIST_TIMEKEEPING_H + +#include + +#if ((LTTNG_KERNEL_RANGE(3,10,0, 3,10,14) && !LTTNG_RHEL_KERNEL_RANGE(3,10,0,123,0,0, 3,10,14,0,0,0)) \ + || LTTNG_KERNEL_RANGE(3,11,0, 3,11,3)) +# error "Linux kernels 3.10 and 3.11 introduce a deadlock in the timekeeping subsystem. Fixed by commit 7bd36014460f793c19e7d6c94dab67b0afcfcb7f \"timekeeping: Fix HRTICK related deadlock from ntp lock changes\" in Linux." +#endif + +#endif /* _LTTNG_BLACKLIST_TIMEKEEPING_H */ diff --git a/ltt/lttng-2.11.0/extra_version/README b/ltt/lttng-2.11.0/extra_version/README new file mode 100644 index 000000000000..5eef496de3ce --- /dev/null +++ b/ltt/lttng-2.11.0/extra_version/README @@ -0,0 +1,2 @@ +The first line of the "name" file is used to populate the "extra_version_name" +modinfo key of each built module. diff --git a/ltt/lttng-2.11.0/filter-bytecode.h b/ltt/lttng-2.11.0/filter-bytecode.h new file mode 100644 index 000000000000..65d34f02edb4 --- /dev/null +++ b/ltt/lttng-2.11.0/filter-bytecode.h @@ -0,0 +1,225 @@ +/* SPDX-License-Identifier: MIT + * + * filter-bytecode.h + * + * LTTng filter bytecode + * + * Copyright 2012-2016 - Mathieu Desnoyers + */ + +#ifndef _FILTER_BYTECODE_H +#define _FILTER_BYTECODE_H + +/* + * offsets are absolute from start of bytecode. + */ + +struct field_ref { + /* Initially, symbol offset. After link, field offset. */ + uint16_t offset; +} __attribute__((packed)); + +struct get_symbol { + /* Symbol offset. */ + uint16_t offset; +} __attribute__((packed)); + +struct get_index_u16 { + uint16_t index; +} __attribute__((packed)); + +struct get_index_u64 { + uint64_t index; +} __attribute__((packed)); + +struct literal_numeric { + int64_t v; +} __attribute__((packed)); + +struct literal_double { + double v; +} __attribute__((packed)); + +struct literal_string { + char string[0]; +} __attribute__((packed)); + +enum filter_op { + FILTER_OP_UNKNOWN = 0, + + FILTER_OP_RETURN = 1, + + /* binary */ + FILTER_OP_MUL = 2, + FILTER_OP_DIV = 3, + FILTER_OP_MOD = 4, + FILTER_OP_PLUS = 5, + FILTER_OP_MINUS = 6, + FILTER_OP_BIT_RSHIFT = 7, + FILTER_OP_BIT_LSHIFT = 8, + FILTER_OP_BIT_AND = 9, + FILTER_OP_BIT_OR = 10, + FILTER_OP_BIT_XOR = 11, + + /* binary comparators */ + FILTER_OP_EQ = 12, + FILTER_OP_NE = 13, + FILTER_OP_GT = 14, + FILTER_OP_LT = 15, + FILTER_OP_GE = 16, + FILTER_OP_LE = 17, + + /* string binary comparator: apply to */ + FILTER_OP_EQ_STRING = 18, + FILTER_OP_NE_STRING = 19, + FILTER_OP_GT_STRING = 20, + FILTER_OP_LT_STRING = 21, + FILTER_OP_GE_STRING = 22, + FILTER_OP_LE_STRING = 23, + + /* s64 binary comparator */ + FILTER_OP_EQ_S64 = 24, + FILTER_OP_NE_S64 = 25, + FILTER_OP_GT_S64 = 26, + FILTER_OP_LT_S64 = 27, + FILTER_OP_GE_S64 = 28, + FILTER_OP_LE_S64 = 29, + + /* double binary comparator */ + FILTER_OP_EQ_DOUBLE = 30, + FILTER_OP_NE_DOUBLE = 31, + FILTER_OP_GT_DOUBLE = 32, + FILTER_OP_LT_DOUBLE = 33, + FILTER_OP_GE_DOUBLE = 34, + FILTER_OP_LE_DOUBLE = 35, + + /* Mixed S64-double binary comparators */ + FILTER_OP_EQ_DOUBLE_S64 = 36, + FILTER_OP_NE_DOUBLE_S64 = 37, + FILTER_OP_GT_DOUBLE_S64 = 38, + FILTER_OP_LT_DOUBLE_S64 = 39, + FILTER_OP_GE_DOUBLE_S64 = 40, + FILTER_OP_LE_DOUBLE_S64 = 41, + + FILTER_OP_EQ_S64_DOUBLE = 42, + FILTER_OP_NE_S64_DOUBLE = 43, + FILTER_OP_GT_S64_DOUBLE = 44, + FILTER_OP_LT_S64_DOUBLE = 45, + FILTER_OP_GE_S64_DOUBLE = 46, + FILTER_OP_LE_S64_DOUBLE = 47, + + /* unary */ + FILTER_OP_UNARY_PLUS = 48, + FILTER_OP_UNARY_MINUS = 49, + FILTER_OP_UNARY_NOT = 50, + FILTER_OP_UNARY_PLUS_S64 = 51, + FILTER_OP_UNARY_MINUS_S64 = 52, + FILTER_OP_UNARY_NOT_S64 = 53, + FILTER_OP_UNARY_PLUS_DOUBLE = 54, + FILTER_OP_UNARY_MINUS_DOUBLE = 55, + FILTER_OP_UNARY_NOT_DOUBLE = 56, + + /* logical */ + FILTER_OP_AND = 57, + FILTER_OP_OR = 58, + + /* load field ref */ + FILTER_OP_LOAD_FIELD_REF = 59, + FILTER_OP_LOAD_FIELD_REF_STRING = 60, + FILTER_OP_LOAD_FIELD_REF_SEQUENCE = 61, + FILTER_OP_LOAD_FIELD_REF_S64 = 62, + FILTER_OP_LOAD_FIELD_REF_DOUBLE = 63, + + /* load immediate from operand */ + FILTER_OP_LOAD_STRING = 64, + FILTER_OP_LOAD_S64 = 65, + FILTER_OP_LOAD_DOUBLE = 66, + + /* cast */ + FILTER_OP_CAST_TO_S64 = 67, + FILTER_OP_CAST_DOUBLE_TO_S64 = 68, + FILTER_OP_CAST_NOP = 69, + + /* get context ref */ + FILTER_OP_GET_CONTEXT_REF = 70, + FILTER_OP_GET_CONTEXT_REF_STRING = 71, + FILTER_OP_GET_CONTEXT_REF_S64 = 72, + FILTER_OP_GET_CONTEXT_REF_DOUBLE = 73, + + /* load userspace field ref */ + FILTER_OP_LOAD_FIELD_REF_USER_STRING = 74, + FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE = 75, + + /* + * load immediate star globbing pattern (literal string) + * from immediate + */ + FILTER_OP_LOAD_STAR_GLOB_STRING = 76, + + /* globbing pattern binary operator: apply to */ + FILTER_OP_EQ_STAR_GLOB_STRING = 77, + FILTER_OP_NE_STAR_GLOB_STRING = 78, + + /* + * Instructions for recursive traversal through composed types. + */ + FILTER_OP_GET_CONTEXT_ROOT = 79, + FILTER_OP_GET_APP_CONTEXT_ROOT = 80, + FILTER_OP_GET_PAYLOAD_ROOT = 81, + + FILTER_OP_GET_SYMBOL = 82, + FILTER_OP_GET_SYMBOL_FIELD = 83, + FILTER_OP_GET_INDEX_U16 = 84, + FILTER_OP_GET_INDEX_U64 = 85, + + FILTER_OP_LOAD_FIELD = 86, + FILTER_OP_LOAD_FIELD_S8 = 87, + FILTER_OP_LOAD_FIELD_S16 = 88, + FILTER_OP_LOAD_FIELD_S32 = 89, + FILTER_OP_LOAD_FIELD_S64 = 90, + FILTER_OP_LOAD_FIELD_U8 = 91, + FILTER_OP_LOAD_FIELD_U16 = 92, + FILTER_OP_LOAD_FIELD_U32 = 93, + FILTER_OP_LOAD_FIELD_U64 = 94, + FILTER_OP_LOAD_FIELD_STRING = 95, + FILTER_OP_LOAD_FIELD_SEQUENCE = 96, + FILTER_OP_LOAD_FIELD_DOUBLE = 97, + + FILTER_OP_UNARY_BIT_NOT = 98, + + FILTER_OP_RETURN_S64 = 99, + + NR_FILTER_OPS, +}; + +typedef uint8_t filter_opcode_t; + +struct load_op { + filter_opcode_t op; + char data[0]; + /* data to load. Size known by enum filter_opcode and null-term char. */ +} __attribute__((packed)); + +struct binary_op { + filter_opcode_t op; +} __attribute__((packed)); + +struct unary_op { + filter_opcode_t op; +} __attribute__((packed)); + +/* skip_offset is absolute from start of bytecode */ +struct logical_op { + filter_opcode_t op; + uint16_t skip_offset; /* bytecode insn, if skip second test */ +} __attribute__((packed)); + +struct cast_op { + filter_opcode_t op; +} __attribute__((packed)); + +struct return_op { + filter_opcode_t op; +} __attribute__((packed)); + +#endif /* _FILTER_BYTECODE_H */ diff --git a/ltt/lttng-2.11.0/instrumentation/events/README b/ltt/lttng-2.11.0/instrumentation/events/README new file mode 100644 index 000000000000..fc3cd6e256f3 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/README @@ -0,0 +1,24 @@ +* Workflow for updating patches from newer kernel: + +Pull the new headers from mainline kernel to lttng-modules/. +Update those headers to fix the lttng-modules instrumentation style. + + +* Workflow to add new Tracepoint instrumentation to newer kernel, + and add support for it into LTTng: + +a) instrument the kernel with new trace events headers. If you want that + instrumentation distributed, you will have to push those changes into + the upstream Linux kernel first, +b) copy those headers into lttng-modules/ directory, +c) look at a diff from other headers between mainline kernel version and + lttng-modules/, and use that as a recipe to alter the new + lttng-modules/ headers. +d) create a new file in probes/ for the new trace event header you added, +e) add it to probes/Makefile, +f) build, make modules_install, +g) don't forget to load that new module too. + +Currently, LTTng policy is to only accept headers derived from trace +event headers accepted into the Linux kernel upstream for tracepoints +related to upstream kernel instrumentation. diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/9p.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/9p.h new file mode 100644 index 000000000000..bc6e01ad98c0 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/9p.h @@ -0,0 +1,57 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM 9p + +#if !defined(LTTNG_TRACE_9P_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_9P_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) +LTTNG_TRACEPOINT_EVENT(9p_client_req, + + TP_PROTO(struct p9_client *clnt, int8_t type, int tag), + + TP_ARGS(clnt, type, tag), + + TP_FIELDS( + ctf_integer_hex(void *, clnt, clnt) + ctf_integer(u8, type, type) + ctf_integer(u32, tag, tag) + ) +) + +LTTNG_TRACEPOINT_EVENT(9p_client_res, + + TP_PROTO(struct p9_client *clnt, int8_t type, int tag, int err), + + TP_ARGS(clnt, type, tag, err), + + TP_FIELDS( + ctf_integer_hex(void *, clnt, clnt) + ctf_integer(u8, type, type) + ctf_integer(u32, tag, tag) + ctf_integer(u32, err, err) + ) +) + +LTTNG_TRACEPOINT_EVENT(9p_protocol_dump, + + TP_PROTO(struct p9_client *clnt, struct p9_fcall *pdu), + + TP_ARGS(clnt, pdu), + + TP_FIELDS( + ctf_integer_hex(void *, clnt, clnt) + ctf_integer(u8, type, pdu->id) + ctf_integer(u16, tag, pdu->tag) + ctf_array(unsigned char, line, pdu->sdata, P9_PROTO_DUMP_SZ) + ) +) +#endif + +#endif /* LTTNG_TRACE_9P_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/exceptions.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/exceptions.h new file mode 100644 index 000000000000..ac86a58af39d --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/exceptions.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(LTTNG_TRACE_EXCEPTIONS_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_EXCEPTIONS_H + +#include +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM x86_exceptions + +LTTNG_TRACEPOINT_EVENT_CLASS(x86_exceptions_class, + + TP_PROTO(unsigned long address, struct pt_regs *regs, + unsigned long error_code), + + TP_ARGS(address, regs, error_code), + + TP_FIELDS( + ctf_integer_hex(unsigned long, address, address) + ctf_integer_hex(unsigned long, ip, regs->ip) + /* + * Note: we cast error_code from unsigned long + * to unsigned char to save space in the trace. + * Currently, only 5 low bits are used. Should be made + * larger if error codes are added to the kernel. + */ + ctf_integer_hex(unsigned char, error_code, error_code) + ) +) + +#define LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(name, map) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(x86_exceptions_class, \ + name, \ + map, \ + TP_PROTO(unsigned long address, struct pt_regs *regs, \ + unsigned long error_code), \ + TP_ARGS(address, regs, error_code) \ +) + +LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(page_fault_user, + x86_exceptions_page_fault_user) +LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(page_fault_kernel, + x86_exceptions_page_fault_kernel) + +#endif /* LTTNG_TRACE_EXCEPTIONS_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86 +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE exceptions + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/irq_vectors.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/irq_vectors.h new file mode 100644 index 000000000000..d9f92ec2879a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/irq_vectors.h @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(LTTNG_TRACE_IRQ_VECTORS_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_IRQ_VECTORS_H + +#include +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM x86_irq_vectors + +LTTNG_TRACEPOINT_EVENT_CLASS(x86_irq_vectors_vector_class, + TP_PROTO(int vector), + TP_ARGS(vector), + + TP_FIELDS( + ctf_integer(int, vector, vector) + ) +) + +#define LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(name, map) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(x86_irq_vectors_vector_class, \ + name##_entry, \ + map##_entry, \ + TP_PROTO(int vector), \ + TP_ARGS(vector) \ +) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(x86_irq_vectors_vector_class, \ + name##_exit, \ + map##_exit, \ + TP_PROTO(int vector), \ + TP_ARGS(vector) \ +) + +/* + * local_timer - called when entering/exiting a local timer interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(local_timer, + x86_irq_vectors_local_timer) + +/* + * reschedule - called when entering/exiting a reschedule vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(reschedule, + x86_irq_vectors_reschedule) + +/* + * spurious_apic - called when entering/exiting a spurious apic vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(spurious_apic, + x86_irq_vectors_spurious_apic) + +/* + * error_apic - called when entering/exiting an error apic vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(error_apic, + x86_irq_vectors_error_apic) + +/* + * x86_platform_ipi - called when entering/exiting a x86 platform ipi interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(x86_platform_ipi, + x86_irq_vectors_ipi) + +/* + * irq_work - called when entering/exiting a irq work interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(irq_work, + x86_irq_vectors_irq_work) + +/* + * call_function - called when entering/exiting a call function interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(call_function, + x86_irq_vectors_call_function) + +/* + * call_function_single - called when entering/exiting a call function + * single interrupt vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(call_function_single, + x86_irq_vectors_call_function_single) + +/* + * threshold_apic - called when entering/exiting a threshold apic interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(threshold_apic, + x86_irq_vectors_threshold_apic) + +/* + * deferred_error_apic - called when entering/exiting a deferred apic interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(deferred_error_apic, + x86_irq_vectors_deferred_error_apic) + +/* + * thermal_apic - called when entering/exiting a thermal apic interrupt + * vector handler + */ +LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(thermal_apic, + x86_irq_vectors_thermal_apic) + +#endif /* LTTNG_TRACE_IRQ_VECTORS_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86 +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE irq_vectors + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h new file mode 100644 index 000000000000..cdf0609f7c33 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h @@ -0,0 +1,313 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(LTTNG_TRACE_KVM_MMU_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_KVM_MMU_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) +#include +#else /* if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ +#include +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kvm_mmu + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) + +#define LTTNG_KVM_MMU_PAGE_FIELDS \ + ctf_integer(__u64, gfn, (sp)->gfn) \ + ctf_integer(__u32, role, (sp)->role.word) \ + ctf_integer(__u32, root_count, (sp)->root_count) \ + ctf_integer(bool, unsync, (sp)->unsync) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +#define LTTNG_KVM_MMU_PAGE_FIELDS \ + ctf_integer(unsigned long, mmu_valid_gen, (sp)->mmu_valid_gen) \ + ctf_integer(__u64, gfn, (sp)->gfn) \ + ctf_integer(__u32, role, (sp)->role.word) \ + ctf_integer(__u32, root_count, (sp)->root_count) \ + ctf_integer(bool, unsync, (sp)->unsync) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +#define LTTNG_KVM_MMU_PAGE_FIELDS \ + ctf_integer(__u64, gfn, (sp)->gfn) \ + ctf_integer(__u32, role, (sp)->role.word) \ + ctf_integer(__u32, root_count, (sp)->root_count) \ + ctf_integer(bool, unsync, (sp)->unsync) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +/* + * A pagetable walk has started + */ +LTTNG_TRACEPOINT_EVENT( + kvm_mmu_pagetable_walk, + TP_PROTO(u64 addr, u32 pferr), + TP_ARGS(addr, pferr), + + TP_FIELDS( + ctf_integer(__u64, addr, addr) + ctf_integer(__u32, pferr, pferr) + ) +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */ +/* + * A pagetable walk has started + */ +LTTNG_TRACEPOINT_EVENT( + kvm_mmu_pagetable_walk, + TP_PROTO(u64 addr, int write_fault, int user_fault, int fetch_fault), + TP_ARGS(addr, write_fault, user_fault, fetch_fault), + + TP_FIELDS( + ctf_integer(__u64, addr, addr) + ctf_integer(__u32, pferr, + (!!write_fault << 1) | (!!user_fault << 2) + | (!!fetch_fault << 4)) + ) +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */ + +/* We just walked a paging element */ +LTTNG_TRACEPOINT_EVENT( + kvm_mmu_paging_element, + TP_PROTO(u64 pte, int level), + TP_ARGS(pte, level), + + TP_FIELDS( + ctf_integer(__u64, pte, pte) + ctf_integer(__u32, level, level) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_mmu_set_bit_class, + + TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), + + TP_ARGS(table_gfn, index, size), + + TP_FIELDS( + ctf_integer(__u64, gpa, + ((u64)table_gfn << PAGE_SHIFT) + index * size) + ) +) + +/* We set a pte accessed bit */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_set_bit_class, kvm_mmu_set_accessed_bit, + + TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), + + TP_ARGS(table_gfn, index, size) +) + +/* We set a pte dirty bit */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_set_bit_class, kvm_mmu_set_dirty_bit, + + TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), + + TP_ARGS(table_gfn, index, size) +) + +LTTNG_TRACEPOINT_EVENT( + kvm_mmu_walker_error, + TP_PROTO(u32 pferr), + TP_ARGS(pferr), + + TP_FIELDS( + ctf_integer(__u32, pferr, pferr) + ) +) + +LTTNG_TRACEPOINT_EVENT( + kvm_mmu_get_page, + TP_PROTO(struct kvm_mmu_page *sp, bool created), + TP_ARGS(sp, created), + + TP_FIELDS( + LTTNG_KVM_MMU_PAGE_FIELDS + ctf_integer(bool, created, created) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_mmu_page_class, + + TP_PROTO(struct kvm_mmu_page *sp), + TP_ARGS(sp), + + TP_FIELDS( + LTTNG_KVM_MMU_PAGE_FIELDS + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_sync_page, + TP_PROTO(struct kvm_mmu_page *sp), + + TP_ARGS(sp) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_unsync_page, + TP_PROTO(struct kvm_mmu_page *sp), + + TP_ARGS(sp) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_prepare_zap_page, + TP_PROTO(struct kvm_mmu_page *sp), + + TP_ARGS(sp) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) + +LTTNG_TRACEPOINT_EVENT_MAP( + mark_mmio_spte, + + kvm_mmu_mark_mmio_spte, + + TP_PROTO(u64 *sptep, gfn_t gfn, u64 spte), + TP_ARGS(sptep, gfn, spte), + + TP_FIELDS( + ctf_integer_hex(void *, sptep, sptep) + ctf_integer(gfn_t, gfn, gfn) + ctf_integer(unsigned, access, spte & ACC_ALL) + ctf_integer(unsigned int, gen, get_mmio_spte_generation(spte)) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT_MAP( + mark_mmio_spte, + + kvm_mmu_mark_mmio_spte, + + TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access, unsigned int gen), + TP_ARGS(sptep, gfn, access, gen), + + TP_FIELDS( + ctf_integer_hex(void *, sptep, sptep) + ctf_integer(gfn_t, gfn, gfn) + ctf_integer(unsigned, access, access) + ctf_integer(unsigned int, gen, gen) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP( + mark_mmio_spte, + + kvm_mmu_mark_mmio_spte, + + TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access), + TP_ARGS(sptep, gfn, access), + + TP_FIELDS( + ctf_integer_hex(void *, sptep, sptep) + ctf_integer(gfn_t, gfn, gfn) + ctf_integer(unsigned, access, access) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP( + handle_mmio_page_fault, + + kvm_mmu_handle_mmio_page_fault, + + TP_PROTO(u64 addr, gfn_t gfn, unsigned access), + TP_ARGS(addr, gfn, access), + + TP_FIELDS( + ctf_integer(u64, addr, addr) + ctf_integer(gfn_t, gfn, gfn) + ctf_integer(unsigned, access, access) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT_MAP( + fast_page_fault, + + kvm_mmu_fast_page_fault, + + TP_PROTO(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u32 error_code, + u64 *sptep, u64 old_spte, int ret), + TP_ARGS(vcpu, cr2_or_gpa, error_code, sptep, old_spte, ret), + + TP_FIELDS( + ctf_integer(int, vcpu_id, vcpu->vcpu_id) + ctf_integer(gpa_t, cr2_or_gpa, cr2_or_gpa) + ctf_integer(u32, error_code, error_code) + ctf_integer_hex(u64 *, sptep, sptep) + ctf_integer(u64, old_spte, old_spte) + ctf_integer(u64, new_spte, *sptep) + ctf_integer(int, ret, ret) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) || \ + LTTNG_KERNEL_RANGE(4,19,103, 4,20,0) || \ + LTTNG_KERNEL_RANGE(5,4,19, 5,5,0) || \ + LTTNG_KERNEL_RANGE(5,5,3, 5,6,0) || \ + LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,92, 4,16,0,0) || \ + LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,44, 5,1,0,0) || \ + LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,43, 5,3,18,45) || \ + LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,46, 5,4,0,0)) +LTTNG_TRACEPOINT_EVENT_MAP( + fast_page_fault, + + kvm_mmu_fast_page_fault, + + TP_PROTO(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u32 error_code, + u64 *sptep, u64 old_spte, bool retry), + TP_ARGS(vcpu, cr2_or_gpa, error_code, sptep, old_spte, retry), + + TP_FIELDS( + ctf_integer(int, vcpu_id, vcpu->vcpu_id) + ctf_integer(gpa_t, cr2_or_gpa, cr2_or_gpa) + ctf_integer(u32, error_code, error_code) + ctf_integer_hex(u64 *, sptep, sptep) + ctf_integer(u64, old_spte, old_spte) + ctf_integer(u64, new_spte, *sptep) + ctf_integer(bool, retry, retry) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_MAP( + fast_page_fault, + + kvm_mmu_fast_page_fault, + + TP_PROTO(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code, + u64 *sptep, u64 old_spte, bool retry), + TP_ARGS(vcpu, gva, error_code, sptep, old_spte, retry), + + TP_FIELDS( + ctf_integer(int, vcpu_id, vcpu->vcpu_id) + ctf_integer(gva_t, gva, gva) + ctf_integer(u32, error_code, error_code) + ctf_integer_hex(u64 *, sptep, sptep) + ctf_integer(u64, old_spte, old_spte) + ctf_integer(u64, new_spte, *sptep) + ctf_integer(bool, retry, retry) + ) +) +#endif + +#endif /* LTTNG_TRACE_KVM_MMU_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86/kvm +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE mmutrace + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/trace.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/trace.h new file mode 100644 index 000000000000..0917b51f5122 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/arch/x86/kvm/trace.h @@ -0,0 +1,591 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(LTTNG_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_KVM_H + +#include +#include +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) +#include +#endif +#include +#include <../arch/x86/kvm/lapic.h> +#include <../arch/x86/kvm/kvm_cache_regs.h> + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kvm_x86 + +/* + * Tracepoint for guest mode entry. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_entry, kvm_x86_entry, + TP_PROTO(unsigned int vcpu_id), + TP_ARGS(vcpu_id), + + TP_FIELDS( + ctf_integer(unsigned int, vcpu_id, vcpu_id) + ) +) + +/* + * Tracepoint for hypercall. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_hypercall, kvm_x86_hypercall, + TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1, + unsigned long a2, unsigned long a3), + TP_ARGS(nr, a0, a1, a2, a3), + + TP_FIELDS( + ctf_integer(unsigned long, nr, nr) + ctf_integer(unsigned long, a0, a0) + ctf_integer(unsigned long, a1, a1) + ctf_integer(unsigned long, a2, a2) + ctf_integer(unsigned long, a3, a3) + ) +) + +/* + * Tracepoint for hypercall. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_hv_hypercall, kvm_x86_hv_hypercall, + TP_PROTO(__u16 code, bool fast, __u16 rep_cnt, __u16 rep_idx, + __u64 ingpa, __u64 outgpa), + TP_ARGS(code, fast, rep_cnt, rep_idx, ingpa, outgpa), + + TP_FIELDS( + ctf_integer(__u16, rep_cnt, rep_cnt) + ctf_integer(__u16, rep_idx, rep_idx) + ctf_integer(__u64, ingpa, ingpa) + ctf_integer(__u64, outgpa, outgpa) + ctf_integer(__u16, code, code) + ctf_integer(bool, fast, fast) + ) +) + +/* + * Tracepoint for PIO. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_pio, kvm_x86_pio, + TP_PROTO(unsigned int rw, unsigned int port, unsigned int size, + unsigned int count), + TP_ARGS(rw, port, size, count), + + TP_FIELDS( + ctf_integer(unsigned int, rw, rw) + ctf_integer(unsigned int, port, port) + ctf_integer(unsigned int, size, size) + ctf_integer(unsigned int, count, count) + ) +) + +/* + * Tracepoint for cpuid. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_cpuid, kvm_x86_cpuid, + TP_PROTO(unsigned int function, unsigned long rax, unsigned long rbx, + unsigned long rcx, unsigned long rdx), + TP_ARGS(function, rax, rbx, rcx, rdx), + + TP_FIELDS( + ctf_integer(unsigned int, function, function) + ctf_integer(unsigned long, rax, rax) + ctf_integer(unsigned long, rbx, rbx) + ctf_integer(unsigned long, rcx, rcx) + ctf_integer(unsigned long, rdx, rdx) + ) +) + +/* + * Tracepoint for apic access. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_apic, kvm_x86_apic, + TP_PROTO(unsigned int rw, unsigned int reg, unsigned int val), + TP_ARGS(rw, reg, val), + + TP_FIELDS( + ctf_integer(unsigned int, rw, rw) + ctf_integer(unsigned int, reg, reg) + ctf_integer(unsigned int, val, val) + ) +) + +#define trace_kvm_apic_read(reg, val) trace_kvm_apic(0, reg, val) +#define trace_kvm_apic_write(reg, val) trace_kvm_apic(1, reg, val) + +/* + * Tracepoint for kvm guest exit: + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT_CODE_MAP(kvm_exit, kvm_x86_exit, + TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), + TP_ARGS(exit_reason, vcpu, isa), + + TP_locvar( + u64 info1, info2; + u32 intr_info, error_code; + ), + + TP_code_pre( + kvm_x86_ops.get_exit_info(vcpu, &tp_locvar->info1, + &tp_locvar->info2, + &tp_locvar->intr_info, + &tp_locvar->error_code); + ), + + TP_FIELDS( + ctf_integer(unsigned int, exit_reason, exit_reason) + ctf_integer(unsigned long, guest_rip, kvm_rip_read(vcpu)) + ctf_integer(u32, isa, isa) + ctf_integer(u64, info1, tp_locvar->info1) + ctf_integer(u64, info2, tp_locvar->info2) + ctf_integer(u32, intr_info, tp_locvar->intr_info) + ctf_integer(u32, error_code, tp_locvar->error_code) + ctf_integer(unsigned int, vcpu_id, vcpu->vcpu_id) + ), + + TP_code_post() +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) +LTTNG_TRACEPOINT_EVENT_CODE_MAP(kvm_exit, kvm_x86_exit, + TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), + TP_ARGS(exit_reason, vcpu, isa), + + TP_locvar( + u64 info1, info2; + ), + + TP_code_pre( + kvm_x86_ops.get_exit_info(vcpu, &tp_locvar->info1, + &tp_locvar->info2); + ), + + TP_FIELDS( + ctf_integer(unsigned int, exit_reason, exit_reason) + ctf_integer(unsigned long, guest_rip, kvm_rip_read(vcpu)) + ctf_integer(u32, isa, isa) + ctf_integer(u64, info1, tp_locvar->info1) + ctf_integer(u64, info2, tp_locvar->info2) + ), + + TP_code_post() +) +#else +LTTNG_TRACEPOINT_EVENT_CODE_MAP(kvm_exit, kvm_x86_exit, + TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), + TP_ARGS(exit_reason, vcpu, isa), + + TP_locvar( + u64 info1, info2; + ), + + TP_code_pre( + kvm_x86_ops->get_exit_info(vcpu, &tp_locvar->info1, + &tp_locvar->info2); + ), + + TP_FIELDS( + ctf_integer(unsigned int, exit_reason, exit_reason) + ctf_integer(unsigned long, guest_rip, kvm_rip_read(vcpu)) + ctf_integer(u32, isa, isa) + ctf_integer(u64, info1, tp_locvar->info1) + ctf_integer(u64, info2, tp_locvar->info2) + ), + + TP_code_post() +) +#endif + +/* + * Tracepoint for kvm interrupt injection: + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_inj_virq, kvm_x86_inj_virq, + TP_PROTO(unsigned int irq), + TP_ARGS(irq), + + TP_FIELDS( + ctf_integer(unsigned int, irq, irq) + ) +) + +/* + * Tracepoint for kvm interrupt injection: + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_inj_exception, kvm_x86_inj_exception, + TP_PROTO(unsigned exception, bool has_error, unsigned error_code), + TP_ARGS(exception, has_error, error_code), + + TP_FIELDS( + ctf_integer(u8, exception, exception) + ctf_integer(u8, has_error, has_error) + ctf_integer(u32, error_code, error_code) + ) +) + +/* + * Tracepoint for page fault. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_page_fault, kvm_x86_page_fault, + TP_PROTO(unsigned long fault_address, unsigned int error_code), + TP_ARGS(fault_address, error_code), + + TP_FIELDS( + ctf_integer(unsigned long, fault_address, fault_address) + ctf_integer(unsigned int, error_code, error_code) + ) +) + +/* + * Tracepoint for guest MSR access. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_msr, kvm_x86_msr, + TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception), + TP_ARGS(write, ecx, data, exception), + + TP_FIELDS( + ctf_integer(unsigned, write, write) + ctf_integer(u32, ecx, ecx) + ctf_integer(u64, data, data) + ctf_integer(u8, exception, exception) + ) +) + +#define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false) +#define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false) +#define trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true) +#define trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true) + +/* + * Tracepoint for guest CR access. + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_cr, kvm_x86_cr, + TP_PROTO(unsigned int rw, unsigned int cr, unsigned long val), + TP_ARGS(rw, cr, val), + + TP_FIELDS( + ctf_integer(unsigned int, rw, rw) + ctf_integer(unsigned int, cr, cr) + ctf_integer(unsigned long, val, val) + ) +) + +#define trace_kvm_cr_read(cr, val) trace_kvm_cr(0, cr, val) +#define trace_kvm_cr_write(cr, val) trace_kvm_cr(1, cr, val) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_pic_set_irq, kvm_x86_pic_set_irq, + TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr, bool coalesced), + TP_ARGS(chip, pin, elcr, imr, coalesced), + + TP_FIELDS( + ctf_integer(__u8, chip, chip) + ctf_integer(__u8, pin, pin) + ctf_integer(__u8, elcr, elcr) + ctf_integer(__u8, imr, imr) + ctf_integer(bool, coalesced, coalesced) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_apic_ipi, kvm_x86_apic_ipi, + TP_PROTO(__u32 icr_low, __u32 dest_id), + TP_ARGS(icr_low, dest_id), + + TP_FIELDS( + ctf_integer(__u32, icr_low, icr_low) + ctf_integer(__u32, dest_id, dest_id) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_apic_accept_irq, kvm_x86_apic_accept_irq, + TP_PROTO(__u32 apicid, __u16 dm, __u8 tm, __u8 vec, bool coalesced), + TP_ARGS(apicid, dm, tm, vec, coalesced), + + TP_FIELDS( + ctf_integer(__u32, apicid, apicid) + ctf_integer(__u16, dm, dm) + ctf_integer(__u8, tm, tm) + ctf_integer(__u8, vec, vec) + ctf_integer(bool, coalesced, coalesced) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_eoi, kvm_x86_eoi, + TP_PROTO(struct kvm_lapic *apic, int vector), + TP_ARGS(apic, vector), + + TP_FIELDS( + ctf_integer(__u32, apicid, apic->vcpu->vcpu_id) + ctf_integer(int, vector, vector) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_pv_eoi, kvm_x86_pv_eoi, + TP_PROTO(struct kvm_lapic *apic, int vector), + TP_ARGS(apic, vector), + + TP_FIELDS( + ctf_integer(__u32, apicid, apic->vcpu->vcpu_id) + ctf_integer(int, vector, vector) + ) +) + +/* + * Tracepoint for nested VMRUN + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_nested_vmrun, kvm_x86_nested_vmrun, + TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, + __u32 event_inj, bool npt), + TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, npt), + + TP_FIELDS( + ctf_integer(__u64, rip, rip) + ctf_integer(__u64, vmcb, vmcb) + ctf_integer(__u64, nested_rip, nested_rip) + ctf_integer(__u32, int_ctl, int_ctl) + ctf_integer(__u32, event_inj, event_inj) + ctf_integer(bool, npt, npt) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_nested_intercepts, kvm_x86_nested_intercepts, + TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, __u64 intercept), + TP_ARGS(cr_read, cr_write, exceptions, intercept), + + TP_FIELDS( + ctf_integer(__u16, cr_read, cr_read) + ctf_integer(__u16, cr_write, cr_write) + ctf_integer(__u32, exceptions, exceptions) + ctf_integer(__u64, intercept, intercept) + ) +) +/* + * Tracepoint for #VMEXIT while nested + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_nested_vmexit, kvm_x86_nested_vmexit, + TP_PROTO(__u64 rip, __u32 exit_code, + __u64 exit_info1, __u64 exit_info2, + __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), + TP_ARGS(rip, exit_code, exit_info1, exit_info2, + exit_int_info, exit_int_info_err, isa), + + TP_FIELDS( + ctf_integer(__u64, rip, rip) + ctf_integer(__u32, exit_code, exit_code) + ctf_integer(__u64, exit_info1, exit_info1) + ctf_integer(__u64, exit_info2, exit_info2) + ctf_integer(__u32, exit_int_info, exit_int_info) + ctf_integer(__u32, exit_int_info_err, exit_int_info_err) + ctf_integer(__u32, isa, isa) + ) +) + +/* + * Tracepoint for #VMEXIT reinjected to the guest + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_nested_vmexit_inject, kvm_x86_nested_vmexit_inject, + TP_PROTO(__u32 exit_code, + __u64 exit_info1, __u64 exit_info2, + __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), + TP_ARGS(exit_code, exit_info1, exit_info2, + exit_int_info, exit_int_info_err, isa), + + TP_FIELDS( + ctf_integer(__u32, exit_code, exit_code) + ctf_integer(__u64, exit_info1, exit_info1) + ctf_integer(__u64, exit_info2, exit_info2) + ctf_integer(__u32, exit_int_info, exit_int_info) + ctf_integer(__u32, exit_int_info_err, exit_int_info_err) + ctf_integer(__u32, isa, isa) + ) +) + +/* + * Tracepoint for nested #vmexit because of interrupt pending + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_nested_intr_vmexit, kvm_x86_nested_intr_vmexit, + TP_PROTO(__u64 rip), + TP_ARGS(rip), + + TP_FIELDS( + ctf_integer(__u64, rip, rip) + ) +) + +/* + * Tracepoint for nested #vmexit because of interrupt pending + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_invlpga, kvm_x86_invlpga, + TP_PROTO(__u64 rip, int asid, u64 address), + TP_ARGS(rip, asid, address), + + TP_FIELDS( + ctf_integer(__u64, rip, rip) + ctf_integer(int, asid, asid) + ctf_integer(__u64, address, address) + ) +) + +/* + * Tracepoint for nested #vmexit because of interrupt pending + */ +LTTNG_TRACEPOINT_EVENT_MAP(kvm_skinit, kvm_x86_skinit, + TP_PROTO(__u64 rip, __u32 slb), + TP_ARGS(rip, slb), + + TP_FIELDS( + ctf_integer(__u64, rip, rip) + ctf_integer(__u32, slb, slb) + ) +) + +#define KVM_EMUL_INSN_F_CR0_PE (1 << 0) +#define KVM_EMUL_INSN_F_EFL_VM (1 << 1) +#define KVM_EMUL_INSN_F_CS_D (1 << 2) +#define KVM_EMUL_INSN_F_CS_L (1 << 3) + +#define kvm_trace_symbol_emul_flags \ + { 0, "real" }, \ + { KVM_EMUL_INSN_F_CR0_PE \ + | KVM_EMUL_INSN_F_EFL_VM, "vm16" }, \ + { KVM_EMUL_INSN_F_CR0_PE, "prot16" }, \ + { KVM_EMUL_INSN_F_CR0_PE \ + | KVM_EMUL_INSN_F_CS_D, "prot32" }, \ + { KVM_EMUL_INSN_F_CR0_PE \ + | KVM_EMUL_INSN_F_CS_L, "prot64" } + +#define kei_decode_mode(mode) ({ \ + u8 flags = 0xff; \ + switch (mode) { \ + case X86EMUL_MODE_REAL: \ + flags = 0; \ + break; \ + case X86EMUL_MODE_VM86: \ + flags = KVM_EMUL_INSN_F_EFL_VM; \ + break; \ + case X86EMUL_MODE_PROT16: \ + flags = KVM_EMUL_INSN_F_CR0_PE; \ + break; \ + case X86EMUL_MODE_PROT32: \ + flags = KVM_EMUL_INSN_F_CR0_PE \ + | KVM_EMUL_INSN_F_CS_D; \ + break; \ + case X86EMUL_MODE_PROT64: \ + flags = KVM_EMUL_INSN_F_CR0_PE \ + | KVM_EMUL_INSN_F_CS_L; \ + break; \ + } \ + flags; \ + }) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_emulate_insn, kvm_x86_emulate_insn, + TP_PROTO(struct kvm_vcpu *vcpu, __u8 failed), + TP_ARGS(vcpu, failed), + + TP_FIELDS( +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt.decode.fetch.start) + ctf_integer(__u32, csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS)) + ctf_integer(__u8, len, vcpu->arch.emulate_ctxt.decode.eip + - vcpu->arch.emulate_ctxt.decode.fetch.start) + ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.decode.fetch.data, 15) + ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode)) +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)) + ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt.fetch.start) + ctf_integer(__u32, csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS)) + ctf_integer(__u8, len, vcpu->arch.emulate_ctxt._eip + - vcpu->arch.emulate_ctxt.fetch.start) + ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.fetch.data, 15) + ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode)) +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(5,7,0)) + ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt._eip - + (vcpu->arch.emulate_ctxt.fetch.ptr - + vcpu->arch.emulate_ctxt.fetch.data)) + ctf_integer(__u32, csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS)) + ctf_integer(__u8, len, vcpu->arch.emulate_ctxt.fetch.ptr - + vcpu->arch.emulate_ctxt.fetch.data) + ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.fetch.data, 15) + ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode)) +#else + ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt->_eip - + (vcpu->arch.emulate_ctxt->fetch.ptr - + vcpu->arch.emulate_ctxt->fetch.data)) + ctf_integer(__u32, csbase, kvm_x86_ops.get_segment_base(vcpu, VCPU_SREG_CS)) + ctf_integer(__u8, len, vcpu->arch.emulate_ctxt->fetch.ptr - + vcpu->arch.emulate_ctxt->fetch.data) + ctf_array(__u8, insn, vcpu->arch.emulate_ctxt->fetch.data, 15) + ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt->mode)) +#endif + ctf_integer(__u8, failed, failed) + ) +) + +#define trace_kvm_emulate_insn_start(vcpu) trace_kvm_emulate_insn(vcpu, 0) +#define trace_kvm_emulate_insn_failed(vcpu) trace_kvm_emulate_insn(vcpu, 1) + +LTTNG_TRACEPOINT_EVENT_MAP( + vcpu_match_mmio, kvm_x86_vcpu_match_mmio, + TP_PROTO(gva_t gva, gpa_t gpa, bool write, bool gpa_match), + TP_ARGS(gva, gpa, write, gpa_match), + + TP_FIELDS( + ctf_integer(gva_t, gva, gva) + ctf_integer(gpa_t, gpa, gpa) + ctf_integer(bool, write, write) + ctf_integer(bool, gpa_match, gpa_match) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) +LTTNG_TRACEPOINT_EVENT_MAP(kvm_write_tsc_offset, kvm_x86_write_tsc_offset, + TP_PROTO(unsigned int vcpu_id, __u64 previous_tsc_offset, + __u64 next_tsc_offset), + TP_ARGS(vcpu_id, previous_tsc_offset, next_tsc_offset), + + TP_FIELDS( + ctf_integer(unsigned int, vcpu_id, vcpu_id) + ctf_integer(__u64, previous_tsc_offset, previous_tsc_offset) + ctf_integer(__u64, next_tsc_offset, next_tsc_offset) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) +#ifdef CONFIG_X86_64 + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_update_master_clock, kvm_x86_update_master_clock, + TP_PROTO(bool use_master_clock, unsigned int host_clock, bool offset_matched), + TP_ARGS(use_master_clock, host_clock, offset_matched), + + TP_FIELDS( + ctf_integer(bool, use_master_clock, use_master_clock) + ctf_integer(unsigned int, host_clock, host_clock) + ctf_integer(bool, offset_matched, offset_matched) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(kvm_track_tsc, kvm_x86_track_tsc, + TP_PROTO(unsigned int vcpu_id, unsigned int nr_matched, + unsigned int online_vcpus, bool use_master_clock, + unsigned int host_clock), + TP_ARGS(vcpu_id, nr_matched, online_vcpus, use_master_clock, + host_clock), + + TP_FIELDS( + ctf_integer(unsigned int, vcpu_id, vcpu_id) + ctf_integer(unsigned int, nr_vcpus_matched_tsc, nr_matched) + ctf_integer(unsigned int, online_vcpus, online_vcpus) + ctf_integer(bool, use_master_clock, use_master_clock) + ctf_integer(unsigned int, host_clock, host_clock) + ) +) + +#endif /* CONFIG_X86_64 */ +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */ + +#endif /* LTTNG_TRACE_KVM_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86/kvm +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE trace + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/asoc.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/asoc.h new file mode 100644 index 000000000000..0069e2ce8170 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/asoc.h @@ -0,0 +1,414 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM asoc + +#if !defined(LTTNG_TRACE_ASOC_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_ASOC_H + +#include +#include +#include + +#define DAPM_DIRECT "(direct)" + +#ifndef _TRACE_ASOC_DEF +#define _TRACE_ASOC_DEF +struct snd_soc_jack; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)) +struct snd_soc_codec; +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) && \ + LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) +struct snd_soc_platform; +#endif +struct snd_soc_card; +struct snd_soc_dapm_widget; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +struct snd_soc_dapm_path; +#endif +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,514,0,0, 3,11,0,0,0,0)) +#define CODEC_NAME_FIELD component.name +#define CODEC_ID_FIELD component.id +#else +#define CODEC_NAME_FIELD name +#define CODEC_ID_FIELD id +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) +/* + * Log register events + */ +LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_reg, + + TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, + unsigned int val), + + TP_ARGS(codec, reg, val), + + TP_FIELDS( + ctf_string(name, codec->CODEC_NAME_FIELD) + ctf_integer(int, id, codec->CODEC_ID_FIELD) + ctf_integer(unsigned int, reg, reg) + ctf_integer(unsigned int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_reg, snd_soc_reg_write, + + asoc_snd_soc_reg_write, + + TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, + unsigned int val), + + TP_ARGS(codec, reg, val) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_reg, snd_soc_reg_read, + + asoc_snd_soc_reg_read, + + TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, + unsigned int val), + + TP_ARGS(codec, reg, val) + +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) && \ + LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_preg, + + TP_PROTO(struct snd_soc_platform *platform, unsigned int reg, + unsigned int val), + + TP_ARGS(platform, reg, val), + + TP_FIELDS( + ctf_string(name, platform->CODEC_NAME_FIELD) + ctf_integer(int, id, platform->CODEC_ID_FIELD) + ctf_integer(unsigned int, reg, reg) + ctf_integer(unsigned int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_preg, snd_soc_preg_write, + + asoc_snd_soc_preg_write, + + TP_PROTO(struct snd_soc_platform *platform, unsigned int reg, + unsigned int val), + + TP_ARGS(platform, reg, val) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_preg, snd_soc_preg_read, + + asoc_snd_soc_preg_read, + + TP_PROTO(struct snd_soc_platform *platform, unsigned int reg, + unsigned int val), + + TP_ARGS(platform, reg, val) + +) +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_card, + + TP_PROTO(struct snd_soc_card *card, int val), + + TP_ARGS(card, val), + + TP_FIELDS( + ctf_string(name, card->name) + ctf_integer(int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_card, snd_soc_bias_level_start, + + asoc_snd_soc_bias_level_start, + + TP_PROTO(struct snd_soc_card *card, int val), + + TP_ARGS(card, val) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_card, snd_soc_bias_level_done, + + asoc_snd_soc_bias_level_done, + + TP_PROTO(struct snd_soc_card *card, int val), + + TP_ARGS(card, val) + +) + +LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_basic, + + TP_PROTO(struct snd_soc_card *card), + + TP_ARGS(card), + + TP_FIELDS( + ctf_string(name, card->name) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_basic, snd_soc_dapm_start, + + asoc_snd_soc_dapm_start, + + TP_PROTO(struct snd_soc_card *card), + + TP_ARGS(card) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_basic, snd_soc_dapm_done, + + asoc_snd_soc_dapm_done, + + TP_PROTO(struct snd_soc_card *card), + + TP_ARGS(card) + +) + +LTTNG_TRACEPOINT_EVENT_CLASS(asoc_snd_soc_dapm_widget, + + TP_PROTO(struct snd_soc_dapm_widget *w, int val), + + TP_ARGS(w, val), + + TP_FIELDS( + ctf_string(name, w->name) + ctf_integer(int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_widget, snd_soc_dapm_widget_power, + + asoc_snd_soc_dapm_widget_power, + + TP_PROTO(struct snd_soc_dapm_widget *w, int val), + + TP_ARGS(w, val) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_widget, snd_soc_dapm_widget_event_start, + + asoc_snd_soc_dapm_widget_event_start, + + TP_PROTO(struct snd_soc_dapm_widget *w, int val), + + TP_ARGS(w, val) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(asoc_snd_soc_dapm_widget, snd_soc_dapm_widget_event_done, + + asoc_snd_soc_dapm_widget_event_done, + + TP_PROTO(struct snd_soc_dapm_widget *w, int val), + + TP_ARGS(w, val) + +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_dapm_walk_done, + + asoc_snd_soc_dapm_walk_done, + + TP_PROTO(struct snd_soc_card *card), + + TP_ARGS(card), + + TP_FIELDS( + ctf_string(name, card->name) + ctf_integer(int, power_checks, card->dapm_stats.power_checks) + ctf_integer(int, path_checks, card->dapm_stats.path_checks) + ctf_integer(int, neighbour_checks, card->dapm_stats.neighbour_checks) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_dapm_path, + + asoc_snd_soc_dapm_path, + + TP_PROTO(struct snd_soc_dapm_widget *widget, + enum snd_soc_dapm_direction dir, + struct snd_soc_dapm_path *path), + + TP_ARGS(widget, dir, path), + + TP_FIELDS( + ctf_string(wname, widget->name) + ctf_string(pname, path->name ? path->name : DAPM_DIRECT) + ctf_string(pnname, path->node[dir]->name) + ctf_integer(int, path_node, (long) path->node[dir]) + ctf_integer(int, path_connect, path->connect) + ctf_integer(int, path_dir, dir) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_dapm_output_path, + + asoc_snd_soc_dapm_output_path, + + TP_PROTO(struct snd_soc_dapm_widget *widget, + struct snd_soc_dapm_path *path), + + TP_ARGS(widget, path), + + TP_FIELDS( + ctf_string(wname, widget->name) + ctf_string(pname, path->name ? path->name : DAPM_DIRECT) + ctf_string(psname, path->sink->name) + ctf_integer(int, path_sink, (long) path->sink) + ctf_integer(int, path_connect, path->connect) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_dapm_input_path, + + asoc_snd_soc_dapm_input_path, + + TP_PROTO(struct snd_soc_dapm_widget *widget, + struct snd_soc_dapm_path *path), + + TP_ARGS(widget, path), + + TP_FIELDS( + ctf_string(wname, widget->name) + ctf_string(pname,path->name ? path->name : DAPM_DIRECT) + ctf_string(psname, path->source->name) + ctf_integer(int, path_source, (long) path->source) + ctf_integer(int, path_connect, path->connect) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_dapm_connected, + + asoc_snd_soc_dapm_connected, + + TP_PROTO(int paths, int stream), + + TP_ARGS(paths, stream), + + TP_FIELDS( + ctf_integer(int, paths, paths) + ctf_integer(int, stream, stream) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_jack_irq, + + asoc_snd_soc_jack_irq, + + TP_PROTO(const char *name), + + TP_ARGS(name), + + TP_FIELDS( + ctf_string(name, name) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_jack_report, + + asoc_snd_soc_jack_report, + + TP_PROTO(struct snd_soc_jack *jack, int mask, int val), + + TP_ARGS(jack, mask, val), + + TP_FIELDS( + ctf_string(name, jack->jack->id) + ctf_integer(int, mask, mask) + ctf_integer(int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_jack_notify, + + asoc_snd_soc_jack_notify, + + TP_PROTO(struct snd_soc_jack *jack, int val), + + TP_ARGS(jack, val), + + TP_FIELDS( + ctf_string(name, jack->jack->id) + ctf_integer(int, val, val) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_jack_report, + + asoc_snd_soc_jack_report, + + TP_PROTO(struct snd_soc_jack *jack, int mask, int val), + + TP_ARGS(jack, mask, val), + + TP_FIELDS( + ctf_string(name, jack->jack->name) + ctf_integer(int, mask, mask) + ctf_integer(int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_jack_notify, + + asoc_snd_soc_jack_notify, + + TP_PROTO(struct snd_soc_jack *jack, int val), + + TP_ARGS(jack, val), + + TP_FIELDS( + ctf_string(name, jack->jack->name) + ctf_integer(int, val, val) + ) +) +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)) +LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_cache_sync, + + asoc_snd_soc_cache_sync, + + TP_PROTO(struct snd_soc_codec *codec, const char *type, + const char *status), + + TP_ARGS(codec, type, status), + + TP_FIELDS( + ctf_string(name, codec->CODEC_NAME_FIELD) + ctf_string(status, status) + ctf_string(type, type) + ctf_integer(int, id, codec->CODEC_ID_FIELD) + ) +) +#endif + +#endif /* LTTNG_TRACE_ASOC_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/block.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/block.h new file mode 100644 index 000000000000..410c9b7d18f9 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/block.h @@ -0,0 +1,1208 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM block + +#if !defined(LTTNG_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_BLOCK_H + +#include +#include +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +#include +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +#ifndef _TRACE_BLOCK_DEF_ +#define _TRACE_BLOCK_DEF_ + +enum { + RWBS_FLAG_WRITE = (1 << 0), + RWBS_FLAG_DISCARD = (1 << 1), + RWBS_FLAG_READ = (1 << 2), + RWBS_FLAG_RAHEAD = (1 << 3), + RWBS_FLAG_BARRIER = (1 << 4), + RWBS_FLAG_SYNC = (1 << 5), + RWBS_FLAG_META = (1 << 6), + RWBS_FLAG_SECURE = (1 << 7), + RWBS_FLAG_FLUSH = (1 << 8), + RWBS_FLAG_FUA = (1 << 9), + RWBS_FLAG_PREFLUSH = (1 << 10), +}; + +#endif /* _TRACE_BLOCK_DEF_ */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,4,103,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,114,94,0,0, 4,4,114,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,120,94,0,0, 4,4,120,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,126,94,0,0, 4,5,0,0,0,0)) + +#define lttng_req_op(rq) req_op(rq) +#define lttng_req_rw(rq) ((rq)->cmd_flags) +#define lttng_bio_op(bio) bio_op(bio) +#define lttng_bio_rw(bio) ((bio)->bi_opf) + +#define blk_rwbs_ctf_integer(type, rwbs, op, rw, bytes) \ + ctf_integer(type, rwbs, \ + (((op) == REQ_OP_WRITE || (op) == REQ_OP_WRITE_SAME) ? RWBS_FLAG_WRITE : \ + ( (op) == REQ_OP_DISCARD ? RWBS_FLAG_DISCARD : \ + ( (op) == REQ_OP_SECURE_ERASE ? (RWBS_FLAG_DISCARD | RWBS_FLAG_SECURE) : \ + ( (op) == REQ_OP_FLUSH ? RWBS_FLAG_FLUSH : \ + ( (op) == REQ_OP_READ ? RWBS_FLAG_READ : \ + ( 0 )))))) \ + | ((rw) & REQ_RAHEAD ? RWBS_FLAG_RAHEAD : 0) \ + | ((rw) & REQ_SYNC ? RWBS_FLAG_SYNC : 0) \ + | ((rw) & REQ_META ? RWBS_FLAG_META : 0) \ + | ((rw) & REQ_PREFLUSH ? RWBS_FLAG_PREFLUSH : 0) \ + | ((rw) & REQ_FUA ? RWBS_FLAG_FUA : 0)) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) + +#define lttng_req_op(rq) +#define lttng_req_rw(rq) ((rq)->cmd_flags) +#define lttng_bio_op(bio) +#define lttng_bio_rw(bio) ((bio)->bi_rw) + +#define blk_rwbs_ctf_integer(type, rwbs, op, rw, bytes) \ + ctf_integer(type, rwbs, ((rw) & WRITE ? RWBS_FLAG_WRITE : \ + ( (rw) & REQ_DISCARD ? RWBS_FLAG_DISCARD : \ + ( (bytes) ? RWBS_FLAG_READ : \ + ( 0 )))) \ + | ((rw) & REQ_RAHEAD ? RWBS_FLAG_RAHEAD : 0) \ + | ((rw) & REQ_SYNC ? RWBS_FLAG_SYNC : 0) \ + | ((rw) & REQ_META ? RWBS_FLAG_META : 0) \ + | ((rw) & REQ_SECURE ? RWBS_FLAG_SECURE : 0) \ + | ((rw) & REQ_FLUSH ? RWBS_FLAG_FLUSH : 0) \ + | ((rw) & REQ_FUA ? RWBS_FLAG_FUA : 0)) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + +#define lttng_req_op(rq) +#define lttng_req_rw(rq) ((rq)->cmd_flags) +#define lttng_bio_op(bio) +#define lttng_bio_rw(bio) ((bio)->bi_rw) + +#define blk_rwbs_ctf_integer(type, rwbs, op, rw, bytes) \ + ctf_integer(type, rwbs, ((rw) & WRITE ? RWBS_FLAG_WRITE : \ + ( (rw) & REQ_DISCARD ? RWBS_FLAG_DISCARD : \ + ( (bytes) ? RWBS_FLAG_READ : \ + ( 0 )))) \ + | ((rw) & REQ_RAHEAD ? RWBS_FLAG_RAHEAD : 0) \ + | ((rw) & REQ_SYNC ? RWBS_FLAG_SYNC : 0) \ + | ((rw) & REQ_META ? RWBS_FLAG_META : 0) \ + | ((rw) & REQ_SECURE ? RWBS_FLAG_SECURE : 0)) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + +#define lttng_req_op(rq) +#define lttng_req_rw(rq) ((rq)->cmd_flags) +#define lttng_bio_op(bio) +#define lttng_bio_rw(bio) ((bio)->bi_rw) + +#define blk_rwbs_ctf_integer(type, rwbs, op, rw, bytes) \ + ctf_integer(type, rwbs, ((rw) & WRITE ? RWBS_FLAG_WRITE : \ + ( (rw) & REQ_DISCARD ? RWBS_FLAG_DISCARD : \ + ( (bytes) ? RWBS_FLAG_READ : \ + ( 0 )))) \ + | ((rw) & REQ_RAHEAD ? RWBS_FLAG_RAHEAD : 0) \ + | ((rw) & REQ_HARDBARRIER ? RWBS_FLAG_BARRIER : 0) \ + | ((rw) & REQ_SYNC ? RWBS_FLAG_SYNC : 0) \ + | ((rw) & REQ_META ? RWBS_FLAG_META : 0) \ + | ((rw) & REQ_SECURE ? RWBS_FLAG_SECURE : 0)) + +#else + +#define lttng_req_op(rq) +#define lttng_req_rw(rq) ((rq)->cmd_flags) +#define lttng_bio_op(bio) +#define lttng_bio_rw(bio) ((bio)->bi_rw) + +#define blk_rwbs_ctf_integer(type, rwbs, op, rw, bytes) \ + ctf_integer(type, rwbs, ((rw) & WRITE ? RWBS_FLAG_WRITE : \ + ( (rw) & (1 << BIO_RW_DISCARD) ? RWBS_FLAG_DISCARD : \ + ( (bytes) ? RWBS_FLAG_READ : \ + ( 0 )))) \ + | ((rw) & (1 << BIO_RW_AHEAD) ? RWBS_FLAG_RAHEAD : 0) \ + | ((rw) & (1 << BIO_RW_SYNCIO) ? RWBS_FLAG_SYNC : 0) \ + | ((rw) & (1 << BIO_RW_META) ? RWBS_FLAG_META : 0) \ + | ((rw) & (1 << BIO_RW_BARRIER) ? RWBS_FLAG_BARRIER : 0)) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(block_buffer, + + TP_PROTO(struct buffer_head *bh), + + TP_ARGS(bh), + + TP_FIELDS ( + ctf_integer(dev_t, dev, bh->b_bdev->bd_dev) + ctf_integer(sector_t, sector, bh->b_blocknr) + ctf_integer(size_t, size, bh->b_size) + ) +) + +/** + * block_touch_buffer - mark a buffer accessed + * @bh: buffer_head being touched + * + * Called from touch_buffer(). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_buffer, block_touch_buffer, + + TP_PROTO(struct buffer_head *bh), + + TP_ARGS(bh) +) + +/** + * block_dirty_buffer - mark a buffer dirty + * @bh: buffer_head being dirtied + * + * Called from mark_buffer_dirty(). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_buffer, block_dirty_buffer, + + TP_PROTO(struct buffer_head *bh), + + TP_ARGS(bh) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +/* block_rq_with_error event class removed in kernel 4.12 */ +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT_CLASS_CODE(block_rq_with_error, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_locvar( + sector_t sector; + unsigned int nr_sector; + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + if (blk_rq_is_scsi(rq)) { + struct scsi_request *scsi_rq = scsi_req(rq); + tp_locvar->sector = 0; + tp_locvar->nr_sector = 0; + tp_locvar->cmd = scsi_rq->cmd; + tp_locvar->cmd_len = scsi_rq->cmd_len; + } else { + tp_locvar->sector = blk_rq_pos(rq); + tp_locvar->nr_sector = blk_rq_sectors(rq); + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, tp_locvar->sector) + ctf_integer(unsigned int, nr_sector, tp_locvar->nr_sector) + ctf_integer(int, errors, rq->errors) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ), + + TP_code_post() +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +LTTNG_TRACEPOINT_EVENT_CLASS_CODE(block_rq_with_error, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_locvar( + sector_t sector; + unsigned int nr_sector; + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + + if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { + tp_locvar->sector = 0; + tp_locvar->nr_sector = 0; + tp_locvar->cmd = rq->cmd; + tp_locvar->cmd_len = rq->cmd_len; + } else { + tp_locvar->sector = blk_rq_pos(rq); + tp_locvar->nr_sector = blk_rq_sectors(rq); + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, tp_locvar->sector) + ctf_integer(unsigned int, nr_sector, tp_locvar->nr_sector) + ctf_integer(int, errors, rq->errors) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ), + + TP_code_post() +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)) +/** + * block_rq_abort - abort block operation request + * @q: queue containing the block operation request + * @rq: block IO operation request + * + * Called immediately after pending block IO operation request @rq in + * queue @q is aborted. The fields in the operation request @rq + * can be examined to determine which device and sectors the pending + * operation would access. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_rq_with_error, block_rq_abort, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq) +) +#endif + +/** + * block_rq_requeue - place block IO request back on a queue + * @q: queue holding operation + * @rq: block IO operation request + * + * The block operation request @rq is being placed back into queue + * @q. For some reason the request was not completed and needs to be + * put back in the queue. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +LTTNG_TRACEPOINT_EVENT(block_rq_requeue, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, blk_rq_trace_sector(rq)) + ctf_integer(unsigned int, nr_sector, blk_rq_trace_nr_sectors(rq)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_rq_with_error, block_rq_requeue, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq) +) +#endif + +/** + * block_rq_complete - block IO operation completed by device driver + * @q: queue containing the block operation request + * @rq: block operations request + * @nr_bytes: number of completed bytes + * + * The block_rq_complete tracepoint event indicates that some portion + * of operation request has been completed by the device driver. If + * the @rq->bio is %NULL, then there is absolutely no additional work to + * do for the request. If @rq->bio is non-NULL then there is + * additional work required to complete the request. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +LTTNG_TRACEPOINT_EVENT(block_rq_complete, + + TP_PROTO(struct request *rq, int error, unsigned int nr_bytes), + + TP_ARGS(rq, error, nr_bytes), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, blk_rq_pos(rq)) + ctf_integer(unsigned int, nr_sector, nr_bytes >> 9) + ctf_integer(int, error, error) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), nr_bytes) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT_CODE(block_rq_complete, + + TP_PROTO(struct request_queue *q, struct request *rq, + unsigned int nr_bytes), + + TP_ARGS(q, rq, nr_bytes), + + TP_locvar( + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + if (blk_rq_is_scsi(rq)) { + struct scsi_request *scsi_rq = scsi_req(rq); + tp_locvar->cmd = scsi_rq->cmd; + tp_locvar->cmd_len = scsi_rq->cmd_len; + } else { + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, blk_rq_pos(rq)) + ctf_integer(unsigned int, nr_sector, nr_bytes >> 9) + ctf_integer(int, errors, rq->errors) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), nr_bytes) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ), + + TP_code_post() +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,5) \ + || LTTNG_KERNEL_RANGE(3,12,21, 3,13,0) \ + || LTTNG_KERNEL_RANGE(3,10,41, 3,11,0) \ + || LTTNG_KERNEL_RANGE(3,4,91, 3,5,0) \ + || LTTNG_KERNEL_RANGE(3,2,58, 3,3,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,28, 3,14,0,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,229,0,0, 3,11,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_CODE(block_rq_complete, + + TP_PROTO(struct request_queue *q, struct request *rq, + unsigned int nr_bytes), + + TP_ARGS(q, rq, nr_bytes), + + TP_locvar( + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { + tp_locvar->cmd = rq->cmd; + tp_locvar->cmd_len = rq->cmd_len; + } else { + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, blk_rq_pos(rq)) + ctf_integer(unsigned int, nr_sector, nr_bytes >> 9) + ctf_integer(int, errors, rq->errors) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), nr_bytes) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ), + + TP_code_post() +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +/** + * block_rq_complete - block IO operation completed by device driver + * @q: queue containing the block operation request + * @rq: block operations request + * + * The block_rq_complete tracepoint event indicates that some portion + * of operation request has been completed by the device driver. If + * the @rq->bio is %NULL, then there is absolutely no additional work to + * do for the request. If @rq->bio is non-NULL then there is + * additional work required to complete the request. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_rq_with_error, block_rq_complete, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(block_rq, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, blk_rq_trace_sector(rq)) + ctf_integer(unsigned int, nr_sector, blk_rq_trace_nr_sectors(rq)) + ctf_integer(unsigned int, bytes, blk_rq_bytes(rq)) + ctf_integer(pid_t, tid, current->pid) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT_CLASS_CODE(block_rq, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_locvar( + sector_t sector; + unsigned int nr_sector; + unsigned int bytes; + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + if (blk_rq_is_scsi(rq)) { + struct scsi_request *scsi_rq = scsi_req(rq); + tp_locvar->sector = 0; + tp_locvar->nr_sector = 0; + tp_locvar->bytes = scsi_rq->resid_len; + tp_locvar->cmd = scsi_rq->cmd; + tp_locvar->cmd_len = scsi_rq->cmd_len; + } else { + tp_locvar->sector = blk_rq_pos(rq); + tp_locvar->nr_sector = blk_rq_sectors(rq); + tp_locvar->bytes = 0; + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, tp_locvar->sector) + ctf_integer(unsigned int, nr_sector, tp_locvar->nr_sector) + ctf_integer(unsigned int, bytes, tp_locvar->bytes) + ctf_integer(pid_t, tid, current->pid) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ), + + TP_code_post() +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +LTTNG_TRACEPOINT_EVENT_CLASS_CODE(block_rq, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq), + + TP_locvar( + sector_t sector; + unsigned int nr_sector; + unsigned int bytes; + unsigned char *cmd; + size_t cmd_len; + ), + + TP_code_pre( + if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { + tp_locvar->sector = 0; + tp_locvar->nr_sector = 0; + tp_locvar->bytes = blk_rq_bytes(rq); + tp_locvar->cmd = rq->cmd; + tp_locvar->cmd_len = rq->cmd_len; + } else { + tp_locvar->sector = blk_rq_pos(rq); + tp_locvar->nr_sector = blk_rq_sectors(rq); + tp_locvar->bytes = 0; + tp_locvar->cmd = NULL; + tp_locvar->cmd_len = 0; + } + ), + + TP_FIELDS( + ctf_integer(dev_t, dev, + rq->rq_disk ? disk_devt(rq->rq_disk) : 0) + ctf_integer(sector_t, sector, tp_locvar->sector) + ctf_integer(unsigned int, nr_sector, tp_locvar->nr_sector) + ctf_integer(unsigned int, bytes, tp_locvar->bytes) + ctf_integer(pid_t, tid, current->pid) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ctf_sequence_hex(unsigned char, cmd, + tp_locvar->cmd, size_t, tp_locvar->cmd_len) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ), + + TP_code_post() +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +/** + * block_rq_insert - insert block operation request into queue + * @q: target queue + * @rq: block IO operation request + * + * Called immediately before block operation request @rq is inserted + * into queue @q. The fields in the operation request @rq struct can + * be examined to determine which device and sectors the pending + * operation would access. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_rq, block_rq_insert, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq) +) + +/** + * block_rq_issue - issue pending block IO request operation to device driver + * @q: queue holding operation + * @rq: block IO operation operation request + * + * Called when block operation request @rq from queue @q is sent to a + * device driver for processing. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_rq, block_rq_issue, + + TP_PROTO(struct request_queue *q, struct request *rq), + + TP_ARGS(q, rq) +) + +/** + * block_bio_bounce - used bounce buffer when processing block operation + * @q: queue holding the block operation + * @bio: block operation + * + * A bounce buffer was used to handle the block operation @bio in @q. + * This occurs when hardware limitations prevent a direct transfer of + * data between the @bio data memory area and the IO device. Use of a + * bounce buffer requires extra copying of data and decreases + * performance. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_bounce, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio_dev(bio)) +#else + ctf_integer(dev_t, dev, bio->bi_bdev ? bio->bi_bdev->bd_dev : 0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_size) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) +/** + * block_bio_complete - completed all work on the block operation + * @q: queue holding the block operation + * @bio: block operation completed + * @error: io error value + * + * This tracepoint indicates there is no further work to do on this + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_complete, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio_dev(bio)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + ctf_integer(int, error, blk_status_to_errno(bio->bi_status)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) +/** + * block_bio_complete - completed all work on the block operation + * @q: queue holding the block operation + * @bio: block operation completed + * @error: io error value + * + * This tracepoint indicates there is no further work to do on this + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_complete, + + TP_PROTO(struct request_queue *q, struct bio *bio, int error), + + TP_ARGS(q, bio, error), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio_dev(bio)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + ctf_integer(int, error, error) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) +/** + * block_bio_complete - completed all work on the block operation + * @q: queue holding the block operation + * @bio: block operation completed + * @error: io error value + * + * This tracepoint indicates there is no further work to do on this + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_complete, + + TP_PROTO(struct request_queue *q, struct bio *bio, int error), + + TP_ARGS(q, bio, error), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + ctf_integer(int, error, error) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) +/** + * block_bio_complete - completed all work on the block operation + * @q: queue holding the block operation + * @bio: block operation completed + * @error: io error value + * + * This tracepoint indicates there is no further work to do on this + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_complete, + + TP_PROTO(struct request_queue *q, struct bio *bio, int error), + + TP_ARGS(q, bio, error), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + ctf_integer(int, error, error) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) + ) +) +#else +/** + * block_bio_complete - completed all work on the block operation + * @q: queue holding the block operation + * @bio: block operation completed + * @error: io error value + * + * This tracepoint indicates there is no further work to do on this + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_complete, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + ctf_integer(int, error, 0) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(block_bio_merge, + + TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), + + TP_ARGS(q, rq, bio), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio_dev(bio)) +#else + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +/** + * block_bio_backmerge - merging block operation to the end of an existing operation + * @q: queue holding operation + * @bio: new block operation to merge + * + * Merging block request @bio to the end of an existing block request + * in queue @q. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_bio_merge, block_bio_backmerge, + + TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), + + TP_ARGS(q, rq, bio) +) + +/** + * block_bio_frontmerge - merging block operation to the beginning of an existing operation + * @q: queue holding operation + * @bio: new block operation to merge + * + * Merging block IO operation @bio to the beginning of an existing block + * operation in queue @q. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_bio_merge, block_bio_frontmerge, + + TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), + + TP_ARGS(q, rq, bio) +) + +/** + * block_bio_queue - putting new block IO operation in queue + * @q: queue holding operation + * @bio: new block operation + * + * About to place the block IO operation @bio into queue @q. + */ +LTTNG_TRACEPOINT_EVENT(block_bio_queue, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio_dev(bio)) +#else + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) +#else /* if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) */ +LTTNG_TRACEPOINT_EVENT_CLASS(block_bio, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio), + + TP_FIELDS( + ctf_integer(dev_t, dev, bio->bi_bdev ? bio->bi_bdev->bd_dev : 0) + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +/** + * block_bio_backmerge - merging block operation to the end of an existing operation + * @q: queue holding operation + * @bio: new block operation to merge + * + * Merging block request @bio to the end of an existing block request + * in queue @q. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_bio, block_bio_backmerge, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio) +) + +/** + * block_bio_frontmerge - merging block operation to the beginning of an existing operation + * @q: queue holding operation + * @bio: new block operation to merge + * + * Merging block IO operation @bio to the beginning of an existing block + * operation in queue @q. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_bio, block_bio_frontmerge, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio) +) + +/** + * block_bio_queue - putting new block IO operation in queue + * @q: queue holding operation + * @bio: new block operation + * + * About to place the block IO operation @bio into queue @q. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_bio, block_bio_queue, + + TP_PROTO(struct request_queue *q, struct bio *bio), + + TP_ARGS(q, bio) +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(block_get_rq, + + TP_PROTO(struct request_queue *q, struct bio *bio, int rw), + + TP_ARGS(q, bio, rw), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio ? bio_dev(bio) : 0) +#else + ctf_integer(dev_t, dev, bio ? bio->bi_bdev->bd_dev : 0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio ? bio->bi_iter.bi_sector : 0) + ctf_integer(unsigned int, nr_sector, + bio ? bio_sectors(bio) : 0) + blk_rwbs_ctf_integer(unsigned int, rwbs, + bio ? lttng_bio_op(bio) : 0, + bio ? lttng_bio_rw(bio) : 0, + bio ? bio->bi_iter.bi_size : 0) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio ? bio->bi_sector : 0) + ctf_integer(unsigned int, nr_sector, + bio ? bio->bi_size >> 9 : 0) + blk_rwbs_ctf_integer(unsigned int, rwbs, + bio ? lttng_bio_op(bio) : 0, + bio ? lttng_bio_rw(bio) : 0, + bio ? bio->bi_size : 0) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +/** + * block_getrq - get a free request entry in queue for block IO operations + * @q: queue for operations + * @bio: pending block IO operation (can be %NULL) + * @rw: low bit indicates a read (%0) or a write (%1) + * + * A request struct for queue @q has been allocated to handle the + * block IO operation @bio. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_get_rq, block_getrq, + + TP_PROTO(struct request_queue *q, struct bio *bio, int rw), + + TP_ARGS(q, bio, rw) +) + +/** + * block_sleeprq - waiting to get a free request entry in queue for block IO operation + * @q: queue for operation + * @bio: pending block IO operation (can be %NULL) + * @rw: low bit indicates a read (%0) or a write (%1) + * + * In the case where a request struct cannot be provided for queue @q + * the process needs to wait for an request struct to become + * available. This tracepoint event is generated each time the + * process goes to sleep waiting for request struct become available. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_get_rq, block_sleeprq, + + TP_PROTO(struct request_queue *q, struct bio *bio, int rw), + + TP_ARGS(q, bio, rw) +) + +/** + * block_plug - keep operations requests in request queue + * @q: request queue to plug + * + * Plug the request queue @q. Do not allow block operation requests + * to be sent to the device driver. Instead, accumulate requests in + * the queue to improve throughput performance of the block device. + */ +LTTNG_TRACEPOINT_EVENT(block_plug, + + TP_PROTO(struct request_queue *q), + + TP_ARGS(q), + + TP_FIELDS( + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(block_unplug, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + TP_PROTO(struct request_queue *q, unsigned int depth, bool explicit), + + TP_ARGS(q, depth, explicit), +#else + TP_PROTO(struct request_queue *q), + + TP_ARGS(q), +#endif + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(int, nr_rq, depth) +#else + ctf_integer(int, nr_rq, q->rq.count[READ] + q->rq.count[WRITE]) +#endif + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) +/** + * block_unplug_timer - timed release of operations requests in queue to device driver + * @q: request queue to unplug + * + * Unplug the request queue @q because a timer expired and allow block + * operation requests to be sent to the device driver. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_unplug, block_unplug_timer, + + TP_PROTO(struct request_queue *q), + + TP_ARGS(q) +) +#endif + +/** + * block_unplug - release of operations requests in request queue + * @q: request queue to unplug + * @depth: number of requests just added to the queue + * @explicit: whether this was an explicit unplug, or one from schedule() + * + * Unplug request queue @q because device driver is scheduled to work + * on elements in the request queue. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_unplug, block_unplug, +#else +LTTNG_TRACEPOINT_EVENT_INSTANCE(block_unplug, block_unplug_io, +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + TP_PROTO(struct request_queue *q, unsigned int depth, bool explicit), + + TP_ARGS(q, depth, explicit) +#else + TP_PROTO(struct request_queue *q), + + TP_ARGS(q) +#endif +) + +/** + * block_split - split a single bio struct into two bio structs + * @q: queue containing the bio + * @bio: block operation being split + * @new_sector: The starting sector for the new bio + * + * The bio request @bio in request queue @q needs to be split into two + * bio requests. The newly created @bio request starts at + * @new_sector. This split may be required due to hardware limitation + * such as operation crossing device boundaries in a RAID system. + */ +LTTNG_TRACEPOINT_EVENT(block_split, + + TP_PROTO(struct request_queue *q, struct bio *bio, + unsigned int new_sector), + + TP_ARGS(q, bio, new_sector), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio_dev(bio)) +#else + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio->bi_sector) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, new_sector, new_sector) + ctf_integer(pid_t, tid, current->pid) + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ) +) + +/** + * block_bio_remap - map request for a logical device to the raw device + * @q: queue holding the operation + * @bio: revised operation + * @dev: device for the operation + * @from: original sector for the operation + * + * An operation for a logical device has been mapped to the + * raw block device. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) +LTTNG_TRACEPOINT_EVENT(block_bio_remap, +#else +LTTNG_TRACEPOINT_EVENT(block_remap, +#endif + + TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev, + sector_t from), + + TP_ARGS(q, bio, dev, from), + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + ctf_integer(dev_t, dev, bio_dev(bio)) +#else + ctf_integer(dev_t, dev, bio->bi_bdev->bd_dev) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) + ctf_integer(sector_t, sector, bio->bi_iter.bi_sector) + ctf_integer(unsigned int, nr_sector, bio_sectors(bio)) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), + bio->bi_iter.bi_size) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(sector_t, sector, bio->bi_sector) + ctf_integer(unsigned int, nr_sector, bio->bi_size >> 9) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_bio_op(bio), lttng_bio_rw(bio), bio->bi_size) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) */ + ctf_integer(dev_t, old_dev, dev) + ctf_integer(sector_t, old_sector, from) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +/** + * block_rq_remap - map request for a block operation request + * @q: queue holding the operation + * @rq: block IO operation request + * @dev: device for the operation + * @from: original sector for the operation + * + * The block operation request @rq in @q has been remapped. The block + * operation request @rq holds the current information and @from hold + * the original sector. + */ +LTTNG_TRACEPOINT_EVENT(block_rq_remap, + + TP_PROTO(struct request_queue *q, struct request *rq, dev_t dev, + sector_t from), + + TP_ARGS(q, rq, dev, from), + + TP_FIELDS( + ctf_integer(dev_t, dev, disk_devt(rq->rq_disk)) + ctf_integer(sector_t, sector, blk_rq_pos(rq)) + ctf_integer(unsigned int, nr_sector, blk_rq_sectors(rq)) + ctf_integer(dev_t, old_dev, dev) + ctf_integer(sector_t, old_sector, from) + blk_rwbs_ctf_integer(unsigned int, rwbs, + lttng_req_op(rq), lttng_req_rw(rq), blk_rq_bytes(rq)) + ) +) +#endif + +#undef __print_rwbs_flags +#undef blk_fill_rwbs + +#endif /* LTTNG_TRACE_BLOCK_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/btrfs.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/btrfs.h new file mode 100644 index 000000000000..efe7af963b53 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/btrfs.h @@ -0,0 +1,2483 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM btrfs + +#if !defined(LTTNG_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_BTRFS_H + +#include +#include +#include + +#ifndef _TRACE_BTRFS_DEF_ +#define _TRACE_BTRFS_DEF_ +struct btrfs_root; +struct btrfs_fs_info; +struct btrfs_inode; +struct extent_map; +struct btrfs_ordered_extent; +struct btrfs_delayed_ref_node; +struct btrfs_delayed_tree_ref; +struct btrfs_delayed_data_ref; +struct btrfs_delayed_ref_head; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +struct btrfs_block_group; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +struct btrfs_block_group_cache; +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +struct btrfs_free_cluster; +#endif +struct map_lookup; +struct extent_buffer; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +struct extent_state; +#endif +#endif + +#define BTRFS_UUID_SIZE 16 + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0)) +#define lttng_fs_info_fsid fs_info->fs_devices->fsid +#else +#define lttng_fs_info_fsid fs_info->fsid +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_transaction_commit, + + TP_PROTO(const struct btrfs_root *root), + + TP_ARGS(root), + + TP_FIELDS( + ctf_integer(u64, generation, root->fs_info->generation) + ctf_integer(u64, root_objectid, root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__inode, + + TP_PROTO(const struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(blkcnt_t, blocks, inode->i_blocks) + ctf_integer(u64, disk_i_size, BTRFS_I(inode)->disk_i_size) + ctf_integer(u64, generation, BTRFS_I(inode)->generation) + ctf_integer(u64, last_trans, BTRFS_I(inode)->last_trans) + ctf_integer(u64, logged_trans, BTRFS_I(inode)->logged_trans) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_new, + + TP_PROTO(const struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_request, + + TP_PROTO(const struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_evict, + + TP_PROTO(const struct inode *inode), + + TP_ARGS(inode) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_transaction_commit, + + TP_PROTO(struct btrfs_root *root), + + TP_ARGS(root), + + TP_FIELDS( + ctf_integer(u64, generation, root->fs_info->generation) + ctf_integer(u64, root_objectid, root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__inode, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(blkcnt_t, blocks, inode->i_blocks) + ctf_integer(u64, disk_i_size, BTRFS_I(inode)->disk_i_size) + ctf_integer(u64, generation, BTRFS_I(inode)->generation) + ctf_integer(u64, last_trans, BTRFS_I(inode)->last_trans) + ctf_integer(u64, logged_trans, BTRFS_I(inode)->logged_trans) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_new, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_request, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__inode, btrfs_inode_evict, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(const struct btrfs_root *root, const struct btrfs_inode *inode, + const struct extent_map *map), + + TP_ARGS(root, inode, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, ino, btrfs_ino(inode)) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, refcount_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(struct btrfs_root *root, struct btrfs_inode *inode, + struct extent_map *map), + + TP_ARGS(root, inode, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, ino, btrfs_ino(inode)) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, refcount_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(struct btrfs_root *root, struct btrfs_inode *inode, + struct extent_map *map), + + TP_ARGS(root, inode, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, ino, btrfs_ino(inode)) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, atomic_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(struct btrfs_root *root, struct inode *inode, + struct extent_map *map), + + TP_ARGS(root, inode, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, ino, btrfs_ino(inode)) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, atomic_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(const struct btrfs_root *root, const struct extent_map *map), + + TP_ARGS(root, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, atomic_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +LTTNG_TRACEPOINT_EVENT(btrfs_get_extent, + + TP_PROTO(struct btrfs_root *root, struct extent_map *map), + + TP_ARGS(root, map), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, start, map->start) + ctf_integer(u64, len, map->len) + ctf_integer(u64, orig_start, map->orig_start) + ctf_integer(u64, block_start, map->block_start) + ctf_integer(u64, block_len, map->block_len) + ctf_integer(unsigned long, flags, map->flags) + ctf_integer(int, refs, atomic_read(&map->refs)) + ctf_integer(unsigned int, compress_type, map->compress_type) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_handle_em_exist, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct extent_map *existing, const struct extent_map *map, + u64 start, u64 len), + + TP_ARGS(fs_info, existing, map, start, len), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, e_start, existing->start) + ctf_integer(u64, e_len, existing->len) + ctf_integer(u64, map_start, map->start) + ctf_integer(u64, map_len, map->len) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_handle_em_exist, + + TP_PROTO(struct btrfs_fs_info *fs_info, + const struct extent_map *existing, const struct extent_map *map, + u64 start, u64 len), + + TP_ARGS(fs_info, existing, map, start, len), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, e_start, existing->start) + ctf_integer(u64, e_len, existing->len) + ctf_integer(u64, map_start, map->start) + ctf_integer(u64, map_len, map->len) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_handle_em_exist, + + TP_PROTO(const struct extent_map *existing, const struct extent_map *map, u64 start, u64 len), + + TP_ARGS(existing, map, start, len), + + TP_FIELDS( + ctf_integer(u64, e_start, existing->start) + ctf_integer(u64, e_len, existing->len) + ctf_integer(u64, map_start, map->start) + ctf_integer(u64, map_len, map->len) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(const struct btrfs_inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_array(u8, fsid, inode->root->lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(ino_t, ino, btrfs_ino(inode)) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->disk_bytenr) + ctf_integer(u64, len, ordered->num_bytes) + ctf_integer(u64, disk_len, ordered->disk_num_bytes) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, refcount_read(&ordered->refs)) + ctf_integer(u64, root_objectid, inode->root->root_key.objectid) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->disk_bytenr) + ctf_integer(u64, len, ordered->num_bytes) + ctf_integer(u64, disk_len, ordered->disk_num_bytes) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, refcount_read(&ordered->refs)) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->start) + ctf_integer(u64, len, ordered->len) + ctf_integer(u64, disk_len, ordered->disk_len) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, refcount_read(&ordered->refs)) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->start) + ctf_integer(u64, len, ordered->len) + ctf_integer(u64, disk_len, ordered->disk_len) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, refcount_read(&ordered->refs)) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(const struct inode *inode, const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->start) + ctf_integer(u64, len, ordered->len) + ctf_integer(u64, disk_len, ordered->disk_len) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, atomic_read(&ordered->refs)) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(u64, file_offset, ordered->file_offset) + ctf_integer(u64, start, ordered->start) + ctf_integer(u64, len, ordered->len) + ctf_integer(u64, disk_len, ordered->disk_len) + ctf_integer(u64, bytes_left, ordered->bytes_left) + ctf_integer(unsigned long, flags, ordered->flags) + ctf_integer(int, compress_type, ordered->compress_type) + ctf_integer(int, refs, atomic_read(&ordered->refs)) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add, + + TP_PROTO(const struct btrfs_inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove, + + TP_PROTO(const struct btrfs_inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start, + + TP_PROTO(const struct btrfs_inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put, + + TP_PROTO(const struct btrfs_inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put, + + TP_PROTO(const struct inode *inode, + const struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) +#else +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put, + + TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), + + TP_ARGS(inode, ordered) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__writepage, + + TP_PROTO(const struct page *page, const struct inode *inode, + const struct writeback_control *wbc), + + TP_ARGS(page, inode, wbc), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(long, nr_to_write, wbc->nr_to_write) + ctf_integer(long, pages_skipped, wbc->pages_skipped) + ctf_integer(loff_t, range_start, wbc->range_start) + ctf_integer(loff_t, range_end, wbc->range_end) + ctf_integer(char, for_kupdate, wbc->for_kupdate) + ctf_integer(char, for_reclaim, wbc->for_reclaim) + ctf_integer(char, range_cyclic, wbc->range_cyclic) + ctf_integer(pgoff_t, writeback_index, + inode->i_mapping->writeback_index) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs__writepage, + + __extent_writepage, + + btrfs__extent_writepage, + + TP_PROTO(const struct page *page, const struct inode *inode, + const struct writeback_control *wbc), + + TP_ARGS(page, inode, wbc) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_writepage_end_io_hook, + + TP_PROTO(const struct page *page, u64 start, u64 end, int uptodate), + + TP_ARGS(page, start, end, uptodate), + + TP_FIELDS( + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(u64, start, start) + ctf_integer(u64, end, end) + ctf_integer(int, uptodate, uptodate) + ctf_integer(u64, root_objectid, + BTRFS_I(page->mapping->host)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_sync_file, + + TP_PROTO(const struct file *file, int datasync), + + TP_ARGS(file, datasync), + + TP_FIELDS( + ctf_integer(ino_t, ino, file->f_path.dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, file->f_path.dentry->d_parent->d_inode->i_ino) + ctf_integer(int, datasync, datasync) + ctf_integer(u64, root_objectid, + BTRFS_I(file->f_path.dentry->d_inode)->root->root_key.objectid) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__writepage, + + TP_PROTO(struct page *page, struct inode *inode, + struct writeback_control *wbc), + + TP_ARGS(page, inode, wbc), + + TP_FIELDS( + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(long, nr_to_write, wbc->nr_to_write) + ctf_integer(long, pages_skipped, wbc->pages_skipped) + ctf_integer(loff_t, range_start, wbc->range_start) + ctf_integer(loff_t, range_end, wbc->range_end) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + ctf_integer(char, nonblocking, wbc->nonblocking) +#endif + ctf_integer(char, for_kupdate, wbc->for_kupdate) + ctf_integer(char, for_reclaim, wbc->for_reclaim) + ctf_integer(char, range_cyclic, wbc->range_cyclic) + ctf_integer(pgoff_t, writeback_index, + inode->i_mapping->writeback_index) + ctf_integer(u64, root_objectid, + BTRFS_I(inode)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs__writepage, + + __extent_writepage, + + btrfs__extent_writepage, + + TP_PROTO(struct page *page, struct inode *inode, + struct writeback_control *wbc), + + TP_ARGS(page, inode, wbc) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_writepage_end_io_hook, + + TP_PROTO(struct page *page, u64 start, u64 end, int uptodate), + + TP_ARGS(page, start, end, uptodate), + + TP_FIELDS( + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(u64, start, start) + ctf_integer(u64, end, end) + ctf_integer(int, uptodate, uptodate) + ctf_integer(u64, root_objectid, + BTRFS_I(page->mapping->host)->root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_sync_file, + + TP_PROTO(struct file *file, int datasync), + + TP_ARGS(file, datasync), + + TP_FIELDS( + ctf_integer(ino_t, ino, file->f_path.dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, file->f_path.dentry->d_parent->d_inode->i_ino) + ctf_integer(int, datasync, datasync) + ctf_integer(u64, root_objectid, + BTRFS_I(file->f_path.dentry->d_inode)->root->root_key.objectid) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,4,103,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,114,94,0,0, 4,4,114,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,120,94,0,0, 4,4,120,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,126,94,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_sync_fs, + + TP_PROTO(const struct btrfs_fs_info *fs_info, int wait), + + TP_ARGS(fs_info, wait), + + TP_FIELDS( + ctf_integer(int, wait, wait) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_sync_fs, + + TP_PROTO(struct btrfs_fs_info *fs_info, int wait), + + TP_ARGS(fs_info, wait), + + TP_FIELDS( + ctf_integer(int, wait, wait) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_sync_fs, + + TP_PROTO(int wait), + + TP_ARGS(wait), + + TP_FIELDS( + ctf_integer(int, wait, wait) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_add_block_group, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_block_group *block_group, int create), + + TP_ARGS(fs_info, block_group, create), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, offset, block_group->start) + ctf_integer(u64, size, block_group->length) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, bytes_used, block_group->used) + ctf_integer(u64, bytes_super, block_group->bytes_super) + ctf_integer(int, create, create) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_add_block_group, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_block_group_cache *block_group, int create), + + TP_ARGS(fs_info, block_group, create), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, offset, block_group->key.objectid) + ctf_integer(u64, size, block_group->key.offset) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, bytes_used, btrfs_block_group_used(&block_group->item)) + ctf_integer(u64, bytes_super, block_group->bytes_super) + ctf_integer(int, create, create) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_add_block_group, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_block_group_cache *block_group, int create), + + TP_ARGS(fs_info, block_group, create), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, offset, block_group->key.objectid) + ctf_integer(u64, size, block_group->key.offset) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, bytes_used, btrfs_block_group_used(&block_group->item)) + ctf_integer(u64, bytes_super, block_group->bytes_super) + ctf_integer(int, create, create) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,4,103,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,114,94,0,0, 4,4,114,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,120,94,0,0, 4,4,120,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,126,94,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_tree_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + add_delayed_tree_ref, + + btrfs_add_delayed_tree_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + run_delayed_tree_ref, + + btrfs_run_delayed_tree_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_tree_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + add_delayed_tree_ref, + + btrfs_add_delayed_tree_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + run_delayed_tree_ref, + + btrfs_run_delayed_tree_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,103,92,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_tree_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + add_delayed_tree_ref, + + btrfs_add_delayed_tree_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + run_delayed_tree_ref, + + btrfs_run_delayed_tree_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_tree_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + add_delayed_tree_ref, + + btrfs_add_delayed_tree_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref, + + run_delayed_tree_ref, + + btrfs_run_delayed_tree_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_delayed_tree_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_delayed_tree_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_tree_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(int, level, full_ref->level) + ctf_integer(int, type, ref->type) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,4,103,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,114,94,0,0, 4,4,114,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,120,94,0,0, 4,4,120,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,126,94,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_data_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + add_delayed_data_ref, + + btrfs_add_delayed_data_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + run_delayed_data_ref, + + btrfs_run_delayed_data_ref, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_data_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + add_delayed_data_ref, + + btrfs_add_delayed_data_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + run_delayed_data_ref, + + btrfs_run_delayed_data_ref, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,103,92,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_data_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + add_delayed_data_ref, + + btrfs_add_delayed_data_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + run_delayed_data_ref, + + btrfs_run_delayed_data_ref, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_data_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + add_delayed_data_ref, + + btrfs_add_delayed_data_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref, + + run_delayed_data_ref, + + btrfs_run_delayed_data_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(fs_info, ref, full_ref, action) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_delayed_data_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ctf_integer(u64, seq, ref->seq) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_delayed_data_ref, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_data_ref *full_ref, + int action), + + TP_ARGS(ref, full_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(u64, parent, full_ref->parent) + ctf_integer(u64, ref_root, full_ref->root) + ctf_integer(u64, owner, full_ref->objectid) + ctf_integer(u64, offset, full_ref->offset) + ctf_integer(int, type, ref->type) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, head_ref->bytenr) + ctf_integer(u64, num_bytes, head_ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + add_delayed_ref_head, + + btrfs_add_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, head_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + run_delayed_ref_head, + + btrfs_run_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, head_ref, action) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,4,103,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,114,94,0,0, 4,4,114,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,120,94,0,0, 4,4,120,95,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,126,94,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + add_delayed_ref_head, + + btrfs_add_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + run_delayed_ref_head, + + btrfs_run_delayed_ref_head, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_ref_head, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + add_delayed_ref_head, + + btrfs_add_delayed_ref_head, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + run_delayed_ref_head, + + btrfs_run_delayed_ref_head, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(fs_info, ref, head_ref, action) +) + +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,103,92,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_ref_head, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + add_delayed_ref_head, + + btrfs_add_delayed_ref_head, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + run_delayed_ref_head, + + btrfs_run_delayed_ref_head, + + TP_PROTO(const struct btrfs_delayed_ref_node *ref, + const struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_ref_head, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + add_delayed_ref_head, + + btrfs_add_delayed_ref_head, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_ref_head, + + run_delayed_ref_head, + + btrfs_run_delayed_ref_head, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action) +) + +#else +LTTNG_TRACEPOINT_EVENT(btrfs_delayed_ref_head, + + TP_PROTO(struct btrfs_delayed_ref_node *ref, + struct btrfs_delayed_ref_head *head_ref, + int action), + + TP_ARGS(ref, head_ref, action), + + TP_FIELDS( + ctf_integer(u64, bytenr, ref->bytenr) + ctf_integer(u64, num_bytes, ref->num_bytes) + ctf_integer(int, action, action) + ctf_integer(int, is_data, head_ref->is_data) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__chunk, + + TP_PROTO(const struct btrfs_fs_info *fs_info, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size), + + TP_FIELDS( + ctf_integer(int, num_stripes, map->num_stripes) + ctf_integer(u64, type, map->type) + ctf_integer(int, sub_stripes, map->sub_stripes) + ctf_integer(u64, offset, offset) + ctf_integer(u64, size, size) + ctf_integer(u64, root_objectid, fs_info->chunk_root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_alloc, + + TP_PROTO(const struct btrfs_fs_info *fs_info, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_free, + + TP_PROTO(const struct btrfs_fs_info *fs_info, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__chunk, + + TP_PROTO(struct btrfs_fs_info *fs_info, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size), + + TP_FIELDS( + ctf_integer(int, num_stripes, map->num_stripes) + ctf_integer(u64, type, map->type) + ctf_integer(int, sub_stripes, map->sub_stripes) + ctf_integer(u64, offset, offset) + ctf_integer(u64, size, size) + ctf_integer(u64, root_objectid, fs_info->chunk_root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_alloc, + + TP_PROTO(struct btrfs_fs_info *fs_info, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_free, + + TP_PROTO(struct btrfs_fs_info *fs_info, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(fs_info, map, offset, size) +) + +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__chunk, + + TP_PROTO(const struct btrfs_root *root, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size), + + TP_FIELDS( + ctf_integer(int, num_stripes, map->num_stripes) + ctf_integer(u64, type, map->type) + ctf_integer(int, sub_stripes, map->sub_stripes) + ctf_integer(u64, offset, offset) + ctf_integer(u64, size, size) + ctf_integer(u64, root_objectid, root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_alloc, + + TP_PROTO(const struct btrfs_root *root, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_free, + + TP_PROTO(const struct btrfs_root *root, const struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__chunk, + + TP_PROTO(struct btrfs_root *root, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size), + + TP_FIELDS( + ctf_integer(int, num_stripes, map->num_stripes) + ctf_integer(u64, type, map->type) + ctf_integer(int, sub_stripes, map->sub_stripes) + ctf_integer(u64, offset, offset) + ctf_integer(u64, size, size) + ctf_integer(u64, root_objectid, root->root_key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_alloc, + + TP_PROTO(struct btrfs_root *root, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__chunk, btrfs_chunk_free, + + TP_PROTO(struct btrfs_root *root, struct map_lookup *map, + u64 offset, u64 size), + + TP_ARGS(root, map, offset, size) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_cow_block, + + TP_PROTO(const struct btrfs_root *root, const struct extent_buffer *buf, + const struct extent_buffer *cow), + + TP_ARGS(root, buf, cow), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, buf_start, buf->start) + ctf_integer(int, refs, atomic_read(&buf->refs)) + ctf_integer(u64, cow_start, cow->start) + ctf_integer(int, buf_level, btrfs_header_level(buf)) + ctf_integer(int, cow_level, btrfs_header_level(cow)) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(btrfs_cow_block, + + TP_PROTO(struct btrfs_root *root, struct extent_buffer *buf, + struct extent_buffer *cow), + + TP_ARGS(root, buf, cow), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, buf_start, buf->start) + ctf_integer(int, refs, atomic_read(&buf->refs)) + ctf_integer(u64, cow_start, cow->start) + ctf_integer(int, buf_level, btrfs_header_level(buf)) + ctf_integer(int, cow_level, btrfs_header_level(cow)) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_space_reservation, + + TP_PROTO(const struct btrfs_fs_info *fs_info, const char *type, u64 val, + u64 bytes, int reserve), + + TP_ARGS(fs_info, type, val, bytes, reserve), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_string(type, type) + ctf_integer(u64, val, val) + ctf_integer(u64, bytes, bytes) + ctf_integer(int, reserve, reserve) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_space_reservation, + + TP_PROTO(const struct btrfs_fs_info *fs_info, char *type, u64 val, + u64 bytes, int reserve), + + TP_ARGS(fs_info, type, val, bytes, reserve), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_string(type, type) + ctf_integer(u64, val, val) + ctf_integer(u64, bytes, bytes) + ctf_integer(int, reserve, reserve) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_space_reservation, + + TP_PROTO(struct btrfs_fs_info *fs_info, char *type, u64 val, + u64 bytes, int reserve), + + TP_ARGS(fs_info, type, val, bytes, reserve), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_string(type, type) + ctf_integer(u64, val, val) + ctf_integer(u64, bytes, bytes) + ctf_integer(int, reserve, reserve) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserved_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len), + + TP_FIELDS( + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_alloc, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_free, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserved_extent, + + TP_PROTO(struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len), + + TP_FIELDS( + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_alloc, + + TP_PROTO(struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_free, + + TP_PROTO(struct btrfs_fs_info *fs_info, u64 start, u64 len), + + TP_ARGS(fs_info, start, len) +) + +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserved_extent, + + TP_PROTO(const struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_alloc, + + TP_PROTO(const struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_free, + + TP_PROTO(const struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserved_extent, + + TP_PROTO(struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_alloc, + + TP_PROTO(struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_free, + + TP_PROTO(struct btrfs_root *root, u64 start, u64 len), + + TP_ARGS(root, start, len) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0) || \ + LTTNG_KERNEL_RANGE(5,9,5, 5,10,0) || \ + LTTNG_KERNEL_RANGE(5,4,78, 5,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(const struct btrfs_root *root, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(root, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_array(u8, fsid, root->lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(fs_info, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(fs_info, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(fs_info, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(fs_info, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) + +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(const struct btrfs_root *root, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(root, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent, + + btrfs_find_free_extent, + + TP_PROTO(struct btrfs_root *root, u64 num_bytes, u64 empty_size, + u64 data), + + TP_ARGS(root, num_bytes, empty_size, data), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, num_bytes, num_bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, data, data) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(const struct btrfs_block_group *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len), + + TP_FIELDS( + ctf_array(u8, fsid, block_group->lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bg_objectid, block_group->start) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(const struct btrfs_block_group *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(const struct btrfs_block_group *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len), + + TP_FIELDS( + ctf_array(u8, fsid, block_group->lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(block_group, start, len) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len), + + TP_FIELDS( + ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE) + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(const struct btrfs_fs_info *fs_info, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(struct btrfs_fs_info *fs_info, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(fs_info, block_group, start, len) +) +#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(const struct btrfs_root *root, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(const struct btrfs_root *root, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(const struct btrfs_root *root, + const struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent, + + TP_PROTO(struct btrfs_root *root, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len), + + TP_FIELDS( + ctf_integer(u64, root_objectid, root->root_key.objectid) + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent, + + TP_PROTO(struct btrfs_root *root, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_cluster, + + TP_PROTO(struct btrfs_root *root, + struct btrfs_block_group_cache *block_group, u64 start, + u64 len), + + TP_ARGS(root, block_group, start, len) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_find_cluster, + + TP_PROTO(const struct btrfs_block_group *block_group, u64 start, + u64 bytes, u64 empty_size, u64 min_bytes), + + TP_ARGS(block_group, start, bytes, empty_size, min_bytes), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->start) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, bytes, bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, min_bytes, min_bytes) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_failed_cluster_setup, + + TP_PROTO(const struct btrfs_block_group *block_group), + + TP_ARGS(block_group), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->start) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_setup_cluster, + + TP_PROTO(const struct btrfs_block_group *block_group, + const struct btrfs_free_cluster *cluster, u64 size, int bitmap), + + TP_ARGS(block_group, cluster, size, bitmap), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->start) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, cluster->window_start) + ctf_integer(u64, max_size, cluster->max_size) + ctf_integer(u64, size, size) + ctf_integer(int, bitmap, bitmap) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_find_cluster, + + TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start, + u64 bytes, u64 empty_size, u64 min_bytes), + + TP_ARGS(block_group, start, bytes, empty_size, min_bytes), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, bytes, bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, min_bytes, min_bytes) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_failed_cluster_setup, + + TP_PROTO(const struct btrfs_block_group_cache *block_group), + + TP_ARGS(block_group), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_setup_cluster, + + TP_PROTO(const struct btrfs_block_group_cache *block_group, + const struct btrfs_free_cluster *cluster, u64 size, int bitmap), + + TP_ARGS(block_group, cluster, size, bitmap), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, cluster->window_start) + ctf_integer(u64, max_size, cluster->max_size) + ctf_integer(u64, size, size) + ctf_integer(int, bitmap, bitmap) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +LTTNG_TRACEPOINT_EVENT(btrfs_find_cluster, + + TP_PROTO(struct btrfs_block_group_cache *block_group, u64 start, + u64 bytes, u64 empty_size, u64 min_bytes), + + TP_ARGS(block_group, start, bytes, empty_size, min_bytes), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, start) + ctf_integer(u64, bytes, bytes) + ctf_integer(u64, empty_size, empty_size) + ctf_integer(u64, min_bytes, min_bytes) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_failed_cluster_setup, + + TP_PROTO(struct btrfs_block_group_cache *block_group), + + TP_ARGS(block_group), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ) +) + +LTTNG_TRACEPOINT_EVENT(btrfs_setup_cluster, + + TP_PROTO(struct btrfs_block_group_cache *block_group, + struct btrfs_free_cluster *cluster, u64 size, int bitmap), + + TP_ARGS(block_group, cluster, size, bitmap), + + TP_FIELDS( + ctf_integer(u64, bg_objectid, block_group->key.objectid) + ctf_integer(u64, flags, block_group->flags) + ctf_integer(u64, start, cluster->window_start) + ctf_integer(u64, max_size, cluster->max_size) + ctf_integer(u64, size, size) + ctf_integer(int, bitmap, bitmap) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \ + LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT_MAP(alloc_extent_state, + + btrfs_alloc_extent_state, + + TP_PROTO(const struct extent_state *state, gfp_t mask, unsigned long IP), + + TP_ARGS(state, mask, IP), + + TP_FIELDS( + ctf_integer_hex(const struct extent_state *, state, state) + ctf_integer(gfp_t, mask, mask) + ctf_integer(unsigned long, ip, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(free_extent_state, + + btrfs_free_extent_state, + + TP_PROTO(const struct extent_state *state, unsigned long IP), + + TP_ARGS(state, IP), + + TP_FIELDS( + ctf_integer_hex(const struct extent_state *, state, state) + ctf_integer(unsigned long, ip, IP) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT_MAP(alloc_extent_state, + + btrfs_alloc_extent_state, + + TP_PROTO(struct extent_state *state, gfp_t mask, unsigned long IP), + + TP_ARGS(state, mask, IP), + + TP_FIELDS( + ctf_integer_hex(struct extent_state *, state, state) + ctf_integer(gfp_t, mask, mask) + ctf_integer(unsigned long, ip, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT_MAP(free_extent_state, + + btrfs_free_extent_state, + + TP_PROTO(struct extent_state *state, unsigned long IP), + + TP_ARGS(state, IP), + + TP_FIELDS( + ctf_integer_hex(struct extent_state *, state, state) + ctf_integer(unsigned long, ip, IP) + ) +) +#endif + +#endif /* LTTNG_TRACE_BTRFS_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/compaction.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/compaction.h new file mode 100644 index 000000000000..c6db6d0585d2 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/compaction.h @@ -0,0 +1,158 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM compaction + +#if !defined(LTTNG_TRACE_COMPACTION_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_COMPACTION_H + +#include +#include +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0) + +LTTNG_TRACEPOINT_EVENT_CLASS(compaction_isolate_template, + + TP_PROTO(unsigned long start_pfn, + unsigned long end_pfn, + unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken), + + TP_FIELDS( + ctf_integer(unsigned long, start_pfn, start_pfn) + ctf_integer(unsigned long, end_pfn, end_pfn) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_taken, nr_taken) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(compaction_isolate_template, + + mm_compaction_isolate_migratepages, + + compaction_isolate_migratepages, + + TP_PROTO(unsigned long start_pfn, + unsigned long end_pfn, + unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(compaction_isolate_template, + + mm_compaction_isolate_freepages, + + compaction_isolate_freepages, + + TP_PROTO(unsigned long start_pfn, + unsigned long end_pfn, + unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken) +) + +#else /* #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(compaction_isolate_template, + + TP_PROTO(unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(nr_scanned, nr_taken), + + TP_FIELDS( + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_taken, nr_taken) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(compaction_isolate_template, + + mm_compaction_isolate_migratepages, + + compaction_isolate_migratepages, + + TP_PROTO(unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(nr_scanned, nr_taken) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(compaction_isolate_template, + + mm_compaction_isolate_freepages, + + compaction_isolate_freepages, + + TP_PROTO(unsigned long nr_scanned, + unsigned long nr_taken), + + TP_ARGS(nr_scanned, nr_taken) +) + +#endif /* #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0) */ + +#if LTTNG_KERNEL_RANGE(3,12,30, 3,13,0) || \ + LTTNG_KERNEL_RANGE(3,14,25, 3,15,0) || \ + (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) +LTTNG_TRACEPOINT_EVENT_CODE_MAP(mm_compaction_migratepages, + + compaction_migratepages, + + TP_PROTO(unsigned long nr_all, + int migrate_rc, + struct list_head *migratepages), + + TP_ARGS(nr_all, migrate_rc, migratepages), + + TP_locvar( + unsigned long nr_failed; + ), + + TP_code_pre( + tp_locvar->nr_failed = 0; + + { + struct list_head *page_lru; + + if (migrate_rc >= 0) + tp_locvar->nr_failed = migrate_rc; + else + list_for_each(page_lru, migratepages) + tp_locvar->nr_failed++; + } + ), + + TP_FIELDS( + ctf_integer(unsigned long, nr_migrated, nr_all - tp_locvar->nr_failed) + ctf_integer(unsigned long, nr_failed, tp_locvar->nr_failed) + ), + + TP_code_post() +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) */ +LTTNG_TRACEPOINT_EVENT_MAP(mm_compaction_migratepages, + + compaction_migratepages, + + TP_PROTO(unsigned long nr_migrated, + unsigned long nr_failed), + + TP_ARGS(nr_migrated, nr_failed), + + TP_FIELDS( + ctf_integer(unsigned long, nr_migrated, nr_migrated) + ctf_integer(unsigned long, nr_failed, nr_failed) + ) +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) */ + +#endif /* LTTNG_TRACE_COMPACTION_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext3.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext3.h new file mode 100644 index 000000000000..8c0115ac2869 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext3.h @@ -0,0 +1,522 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM ext3 + +#if !defined(LTTNG_TRACE_EXT3_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_EXT3_H + +#include +#include + +LTTNG_TRACEPOINT_EVENT(ext3_free_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(umode_t, mode, inode->i_mode) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) + ctf_integer(uid_t, uid, i_uid_read(inode)) + ctf_integer(gid_t, gid, i_gid_read(inode)) +#else + ctf_integer(uid_t, uid, inode->i_uid) + ctf_integer(gid_t, gid, inode->i_gid) +#endif + ctf_integer(blkcnt_t, blocks, inode->i_blocks) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_request_inode, + TP_PROTO(struct inode *dir, int mode), + + TP_ARGS(dir, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, dir->i_sb->s_dev) + ctf_integer(ino_t, dir, dir->i_ino) + ctf_integer(umode_t, mode, mode) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_allocate_inode, + TP_PROTO(struct inode *inode, struct inode *dir, int mode), + + TP_ARGS(inode, dir, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ino_t, dir, dir->i_ino) + ctf_integer(umode_t, mode, mode) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_evict_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, nlink, inode->i_nlink) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_drop_inode, + TP_PROTO(struct inode *inode, int drop), + + TP_ARGS(inode, drop), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, drop, drop) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_mark_inode_dirty, + TP_PROTO(struct inode *inode, unsigned long IP), + + TP_ARGS(inode, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, ip, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_write_begin, + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int flags), + + TP_ARGS(inode, pos, len, flags), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, pos) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, flags, flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext3__write_end, + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, pos) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, copied, copied) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__write_end, ext3_ordered_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__write_end, ext3_writeback_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__write_end, ext3_journalled_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext3__page_op, + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__page_op, ext3_ordered_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__page_op, ext3_writeback_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__page_op, ext3_journalled_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__page_op, ext3_readpage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__page_op, ext3_releasepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext3_invalidatepage, + TP_PROTO(struct page *page, unsigned int offset, unsigned int length), + + TP_ARGS(page, offset, length), + + TP_FIELDS( + ctf_integer(pgoff_t, index, page->index) + ctf_integer(unsigned int, offset, offset) + ctf_integer(unsigned int, length, length) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext3_invalidatepage, + TP_PROTO(struct page *page, unsigned long offset), + + TP_ARGS(page, offset), + + TP_FIELDS( + ctf_integer(pgoff_t, index, page->index) + ctf_integer(unsigned long, offset, offset) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ) +) + +#endif + +LTTNG_TRACEPOINT_EVENT(ext3_discard_blocks, + TP_PROTO(struct super_block *sb, unsigned long blk, + unsigned long count), + + TP_ARGS(sb, blk, count), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, blk, blk) + ctf_integer(unsigned long, count, count) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_request_blocks, + TP_PROTO(struct inode *inode, unsigned long goal, + unsigned long count), + + TP_ARGS(inode, goal, count), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, count, count) + ctf_integer(unsigned long, goal, goal) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_allocate_blocks, + TP_PROTO(struct inode *inode, unsigned long goal, + unsigned long count, unsigned long block), + + TP_ARGS(inode, goal, count, block), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, block, block) + ctf_integer(unsigned long, count, count) + ctf_integer(unsigned long, goal, goal) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_free_blocks, + TP_PROTO(struct inode *inode, unsigned long block, + unsigned long count), + + TP_ARGS(inode, block, count), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(umode_t, mode, inode->i_mode) + ctf_integer(unsigned long, block, block) + ctf_integer(unsigned long, count, count) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_sync_file_enter, + TP_PROTO(struct file *file, int datasync), + + TP_ARGS(file, datasync), + + TP_FIELDS( + ctf_integer(dev_t, dev, file->f_path.dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, file->f_path.dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, file->f_path.dentry->d_parent->d_inode->i_ino) + ctf_integer(int, datasync, datasync) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_sync_file_exit, + TP_PROTO(struct inode *inode, int ret), + + TP_ARGS(inode, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_sync_fs, + TP_PROTO(struct super_block *sb, int wait), + + TP_ARGS(sb, wait), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, wait, wait) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_rsv_window_add, + TP_PROTO(struct super_block *sb, + struct ext3_reserve_window_node *rsv_node), + + TP_ARGS(sb, rsv_node), + + TP_FIELDS( + ctf_integer(unsigned long, start, rsv_node->rsv_window._rsv_start) + ctf_integer(unsigned long, end, rsv_node->rsv_window._rsv_end) + ctf_integer(dev_t, dev, sb->s_dev) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_discard_reservation, + TP_PROTO(struct inode *inode, + struct ext3_reserve_window_node *rsv_node), + + TP_ARGS(inode, rsv_node), + + TP_FIELDS( + ctf_integer(unsigned long, start, rsv_node->rsv_window._rsv_start) + ctf_integer(unsigned long, end, rsv_node->rsv_window._rsv_end) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_alloc_new_reservation, + TP_PROTO(struct super_block *sb, unsigned long goal), + + TP_ARGS(sb, goal), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, goal, goal) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_reserved, + TP_PROTO(struct super_block *sb, unsigned long block, + struct ext3_reserve_window_node *rsv_node), + + TP_ARGS(sb, block, rsv_node), + + TP_FIELDS( + ctf_integer(unsigned long, block, block) + ctf_integer(unsigned long, start, rsv_node->rsv_window._rsv_start) + ctf_integer(unsigned long, end, rsv_node->rsv_window._rsv_end) + ctf_integer(dev_t, dev, sb->s_dev) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_forget, + TP_PROTO(struct inode *inode, int is_metadata, unsigned long block), + + TP_ARGS(inode, is_metadata, block), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(umode_t, mode, inode->i_mode) + ctf_integer(int, is_metadata, is_metadata) + ctf_integer(unsigned long, block, block) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_read_block_bitmap, + TP_PROTO(struct super_block *sb, unsigned int group), + + TP_ARGS(sb, group), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(__u32, group, group) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_direct_IO_enter, + TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw), + + TP_ARGS(inode, offset, len, rw), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(unsigned long, len, len) + ctf_integer(int, rw, rw) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_direct_IO_exit, + TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, + int rw, int ret), + + TP_ARGS(inode, offset, len, rw, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(unsigned long, len, len) + ctf_integer(int, rw, rw) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_unlink_enter, + TP_PROTO(struct inode *parent, struct dentry *dentry), + + TP_ARGS(parent, dentry), + + TP_FIELDS( + ctf_integer(ino_t, parent, parent->i_ino) + ctf_integer(ino_t, ino, dentry->d_inode->i_ino) + ctf_integer(loff_t, size, dentry->d_inode->i_size) + ctf_integer(dev_t, dev, dentry->d_inode->i_sb->s_dev) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_unlink_exit, + TP_PROTO(struct dentry *dentry, int ret), + + TP_ARGS(dentry, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, dentry->d_inode->i_ino) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext3__truncate, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(blkcnt_t, blocks, inode->i_blocks) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__truncate, ext3_truncate_enter, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext3__truncate, ext3_truncate_exit, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT(ext3_get_blocks_enter, + TP_PROTO(struct inode *inode, unsigned long lblk, + unsigned long len, int create), + + TP_ARGS(inode, lblk, len, create), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, lblk, lblk) + ctf_integer(unsigned long, len, len) + ctf_integer(int, create, create) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_get_blocks_exit, + TP_PROTO(struct inode *inode, unsigned long lblk, + unsigned long pblk, unsigned long len, int ret), + + TP_ARGS(inode, lblk, pblk, len, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, lblk, lblk) + ctf_integer(unsigned long, pblk, pblk) + ctf_integer(unsigned long, len, len) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext3_load_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ) +) + +#endif /* LTTNG_TRACE_EXT3_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext4.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext4.h new file mode 100644 index 000000000000..d454fa6e1ce7 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/ext4.h @@ -0,0 +1,2092 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM ext4 + +#if !defined(LTTNG_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_EXT4_H + +#include +#include +#include + +#ifndef _TRACE_EXT4_DEF_ +#define _TRACE_EXT4_DEF_ +struct ext4_allocation_context; +struct ext4_allocation_request; +struct ext4_prealloc_space; +struct ext4_inode_info; +struct mpage_da_data; +struct ext4_map_blocks; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +struct ext4_extent; +#endif +#endif + +#define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +#define TP_MODE_T __u16 +#else +#define TP_MODE_T umode_t +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_free_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) + ctf_integer(uid_t, uid, i_uid_read(inode)) + ctf_integer(gid_t, gid, i_gid_read(inode)) +#else + ctf_integer(uid_t, uid, inode->i_uid) + ctf_integer(gid_t, gid, inode->i_gid) +#endif + ctf_integer(__u64, blocks, inode->i_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_request_inode, + TP_PROTO(struct inode *dir, int mode), + + TP_ARGS(dir, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, dir->i_sb->s_dev) + ctf_integer(ino_t, dir, dir->i_ino) + ctf_integer(TP_MODE_T, mode, mode) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_allocate_inode, + TP_PROTO(struct inode *inode, struct inode *dir, int mode), + + TP_ARGS(inode, dir, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ino_t, dir, dir->i_ino) + ctf_integer(TP_MODE_T, mode, mode) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +LTTNG_TRACEPOINT_EVENT(ext4_evict_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, nlink, inode->i_nlink) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_drop_inode, + TP_PROTO(struct inode *inode, int drop), + + TP_ARGS(inode, drop), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, drop, drop) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_mark_inode_dirty, + TP_PROTO(struct inode *inode, unsigned long IP), + + TP_ARGS(inode, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned long, ip, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_begin_ordered_truncate, + TP_PROTO(struct inode *inode, loff_t new_size), + + TP_ARGS(inode, new_size), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, new_size, new_size) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__write_begin, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int flags), + + TP_ARGS(inode, pos, len, flags), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, pos) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, flags, flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_begin, ext4_write_begin, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int flags), + + TP_ARGS(inode, pos, len, flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_begin, ext4_da_write_begin, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int flags), + + TP_ARGS(inode, pos, len, flags) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__write_end, + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, pos) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, copied, copied) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_end, ext4_ordered_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_end, ext4_writeback_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_end, ext4_journalled_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__write_end, ext4_da_write_end, + + TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, + unsigned int copied), + + TP_ARGS(inode, pos, len, copied) +) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) +LTTNG_TRACEPOINT_EVENT(ext4_writepage, + TP_PROTO(struct inode *inode, struct page *page), + + TP_ARGS(inode, page), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(pgoff_t, index, page->index) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_da_writepages, + TP_PROTO(struct inode *inode, struct writeback_control *wbc), + + TP_ARGS(inode, wbc), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(long, nr_to_write, wbc->nr_to_write) + ctf_integer(long, pages_skipped, wbc->pages_skipped) + ctf_integer(loff_t, range_start, wbc->range_start) + ctf_integer(loff_t, range_end, wbc->range_end) + ctf_integer(pgoff_t, writeback_index, inode->i_mapping->writeback_index) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(int, sync_mode, wbc->sync_mode) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) + ctf_integer(char, nonblocking, wbc->nonblocking) +#endif + ctf_integer(char, for_kupdate, wbc->for_kupdate) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) + ctf_integer(char, for_reclaim, wbc->for_reclaim) +#endif + ctf_integer(char, range_cyclic, wbc->range_cyclic) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_da_write_pages, + TP_PROTO(struct inode *inode, pgoff_t first_page, + struct writeback_control *wbc), + + TP_ARGS(inode, first_page, wbc), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(pgoff_t, first_page, first_page) + ctf_integer(long, nr_to_write, wbc->nr_to_write) + ctf_integer(int, sync_mode, wbc->sync_mode) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_da_write_pages, + TP_PROTO(struct inode *inode, struct mpage_da_data *mpd), + + TP_ARGS(inode, mpd), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, b_blocknr, mpd->b_blocknr) + ctf_integer(__u32, b_size, mpd->b_size) + ctf_integer(__u32, b_state, mpd->b_state) + ctf_integer(unsigned long, first_page, mpd->first_page) + ctf_integer(int, io_done, mpd->io_done) + ctf_integer(int, pages_written, mpd->pages_written) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(int, sync_mode, mpd->wbc->sync_mode) +#endif + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_da_write_pages_extent, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map), + + TP_ARGS(inode, map), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, lblk, map->m_lblk) + ctf_integer(__u32, len, map->m_len) + ctf_integer(__u32, flags, map->m_flags) + ) +) + +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_da_writepages_result, + TP_PROTO(struct inode *inode, struct writeback_control *wbc, + int ret, int pages_written), + + TP_ARGS(inode, wbc, ret, pages_written), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, ret, ret) + ctf_integer(int, pages_written, pages_written) + ctf_integer(long, pages_skipped, wbc->pages_skipped) + ctf_integer(pgoff_t, writeback_index, inode->i_mapping->writeback_index) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(int, sync_mode, wbc->sync_mode) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) + ctf_integer(char, encountered_congestion, wbc->encountered_congestion) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + ctf_integer(char, more_io, wbc->more_io) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) + ctf_integer(char, no_nrwrite_index_update, wbc->no_nrwrite_index_update) +#endif + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__page_op, + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,40)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__page_op, ext4_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) +#endif + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__page_op, ext4_readpage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__page_op, ext4_releasepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4_invalidatepage_op, + TP_PROTO(struct page *page, unsigned int offset, unsigned int length), + + TP_ARGS(page, offset, length), + + TP_FIELDS( + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(unsigned int, offset, offset) + ctf_integer(unsigned int, length, length) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4_invalidatepage_op, ext4_invalidatepage, + TP_PROTO(struct page *page, unsigned int offset, unsigned int length), + + TP_ARGS(page, offset, length) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4_invalidatepage_op, ext4_journalled_invalidatepage, + TP_PROTO(struct page *page, unsigned int offset, unsigned int length), + + TP_ARGS(page, offset, length) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_invalidatepage, + TP_PROTO(struct page *page, unsigned long offset), + + TP_ARGS(page, offset), + + TP_FIELDS( + ctf_integer(dev_t, dev, page->mapping->host->i_sb->s_dev) + ctf_integer(ino_t, ino, page->mapping->host->i_ino) + ctf_integer(pgoff_t, index, page->index) + ctf_integer(unsigned long, offset, offset) + + ) +) + +#endif + +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_discard_blocks, + TP_PROTO(struct super_block *sb, unsigned long long blk, + unsigned long long count), + + TP_ARGS(sb, blk, count), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(__u64, blk, blk) + ctf_integer(__u64, count, count) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__mb_new_pa, + TP_PROTO(struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa), + + TP_ARGS(ac, pa), + + TP_FIELDS( + ctf_integer(dev_t, dev, ac->ac_sb->s_dev) + ctf_integer(ino_t, ino, ac->ac_inode->i_ino) + ctf_integer(__u64, pa_pstart, pa->pa_pstart) + ctf_integer(__u64, pa_lstart, pa->pa_lstart) + ctf_integer(__u32, pa_len, pa->pa_len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__mb_new_pa, ext4_mb_new_inode_pa, + + TP_PROTO(struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa), + + TP_ARGS(ac, pa) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__mb_new_pa, ext4_mb_new_group_pa, + + TP_PROTO(struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa), + + TP_ARGS(ac, pa) +) + +LTTNG_TRACEPOINT_EVENT(ext4_mb_release_inode_pa, + TP_PROTO( +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + struct super_block *sb, + struct inode *inode, +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + struct super_block *sb, + struct ext4_allocation_context *ac, +#else + struct ext4_allocation_context *ac, +#endif +#endif + struct ext4_prealloc_space *pa, + unsigned long long block, unsigned int count), + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,40)) + TP_ARGS(pa, block, count), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + TP_ARGS(sb, inode, pa, block, count), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_ARGS(sb, ac, pa, block, count), +#else + TP_ARGS(ac, pa, block, count), +#endif + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,40)) + ctf_integer(dev_t, dev, pa->pa_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, pa->pa_inode->i_ino) +#else +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + ctf_integer(dev_t, dev, sb->s_dev) +#else + ctf_integer(dev_t, dev, ac->ac_sb->s_dev) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + ctf_integer(ino_t, ino, inode->i_ino) +#else + ctf_integer(ino_t, ino, + (ac && ac->ac_inode) ? ac->ac_inode->i_ino : 0) +#endif +#endif + ctf_integer(__u64, block, block) + ctf_integer(__u32, count, count) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_mb_release_group_pa, + +#if (LTTNG_KERNEL_RANGE(2,6,40, 3,3,0)) + TP_PROTO(struct ext4_prealloc_space *pa), + + TP_ARGS(pa), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + TP_PROTO(struct super_block *sb, struct ext4_prealloc_space *pa), + + TP_ARGS(sb, pa), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_PROTO(struct super_block *sb, + struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa), + + TP_ARGS(sb, ac, pa), +#else + TP_PROTO(struct ext4_allocation_context *ac, + struct ext4_prealloc_space *pa), + + TP_ARGS(ac, pa), +#endif + + TP_FIELDS( +#if (LTTNG_KERNEL_RANGE(2,6,40, 3,3,0)) + ctf_integer(dev_t, dev, pa->pa_inode->i_sb->s_dev) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + ctf_integer(dev_t, dev, sb->s_dev) +#else + ctf_integer(dev_t, dev, ac->ac_sb->s_dev) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) + ctf_integer(ino_t, ino, + (ac && ac->ac_inode) ? ac->ac_inode->i_ino : 0) +#endif + ctf_integer(__u64, pa_pstart, pa->pa_pstart) + ctf_integer(__u32, pa_len, pa->pa_len) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) || \ + LTTNG_KERNEL_RANGE(5,8,6, 5,9,0)) +LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations, + TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed), + + TP_ARGS(inode, len, needed), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, needed, needed) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_mb_discard_preallocations, + TP_PROTO(struct super_block *sb, int needed), + + TP_ARGS(sb, needed), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, needed, needed) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_request_blocks, + TP_PROTO(struct ext4_allocation_request *ar), + + TP_ARGS(ar), + + TP_FIELDS( + ctf_integer(dev_t, dev, ar->inode->i_sb->s_dev) + ctf_integer(ino_t, ino, ar->inode->i_ino) + ctf_integer(unsigned int, len, ar->len) + ctf_integer(__u32, logical, ar->logical) + ctf_integer(__u32, lleft, ar->lleft) + ctf_integer(__u32, lright, ar->lright) + ctf_integer(__u64, goal, ar->goal) + ctf_integer(__u64, pleft, ar->pleft) + ctf_integer(__u64, pright, ar->pright) + ctf_integer(unsigned int, flags, ar->flags) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_allocate_blocks, + TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block), + + TP_ARGS(ar, block), + + TP_FIELDS( + ctf_integer(dev_t, dev, ar->inode->i_sb->s_dev) + ctf_integer(ino_t, ino, ar->inode->i_ino) + ctf_integer(__u64, block, block) + ctf_integer(unsigned int, len, ar->len) + ctf_integer(__u32, logical, ar->logical) + ctf_integer(__u32, lleft, ar->lleft) + ctf_integer(__u32, lright, ar->lright) + ctf_integer(__u64, goal, ar->goal) + ctf_integer(__u64, pleft, ar->pleft) + ctf_integer(__u64, pright, ar->pright) + ctf_integer(unsigned int, flags, ar->flags) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_free_blocks, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) + TP_PROTO(struct inode *inode, __u64 block, unsigned long count, + int flags), + + TP_ARGS(inode, block, count, flags), +#else + TP_PROTO(struct inode *inode, __u64 block, unsigned long count, + int metadata), + + TP_ARGS(inode, block, count, metadata), +#endif + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, block, block) + ctf_integer(unsigned long, count, count) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) + ctf_integer(int, flags, flags) + ctf_integer(TP_MODE_T, mode, inode->i_mode) +#else + ctf_integer(int, metadata, metadata) +#endif + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +LTTNG_TRACEPOINT_EVENT(ext4_sync_file_enter, +#else +LTTNG_TRACEPOINT_EVENT(ext4_sync_file, +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct file *file, int datasync), + + TP_ARGS(file, datasync), +#else + TP_PROTO(struct file *file, struct dentry *dentry, int datasync), + + TP_ARGS(file, dentry, datasync), +#endif + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + ctf_integer(dev_t, dev, file->f_path.dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, file->f_path.dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, file->f_path.dentry->d_parent->d_inode->i_ino) +#else + ctf_integer(dev_t, dev, dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, dentry->d_parent->d_inode->i_ino) +#endif + ctf_integer(int, datasync, datasync) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +LTTNG_TRACEPOINT_EVENT(ext4_sync_file_exit, + TP_PROTO(struct inode *inode, int ret), + + TP_ARGS(inode, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(int, ret, ret) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_sync_fs, + TP_PROTO(struct super_block *sb, int wait), + + TP_ARGS(sb, wait), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, wait, wait) + + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)) +LTTNG_TRACEPOINT_EVENT(ext4_alloc_da_blocks, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned int, data_blocks, EXT4_I(inode)->i_reserved_data_blocks) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(ext4_alloc_da_blocks, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned int, data_blocks, EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(unsigned int, meta_blocks, EXT4_I(inode)->i_reserved_meta_blocks) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_mballoc_alloc, + TP_PROTO(struct ext4_allocation_context *ac), + + TP_ARGS(ac), + + TP_FIELDS( + ctf_integer(dev_t, dev, ac->ac_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, ac->ac_inode->i_ino) + ctf_integer(__u32, orig_logical, ac->ac_o_ex.fe_logical) + ctf_integer(int, orig_start, ac->ac_o_ex.fe_start) + ctf_integer(__u32, orig_group, ac->ac_o_ex.fe_group) + ctf_integer(int, orig_len, ac->ac_o_ex.fe_len) + ctf_integer(__u32, goal_logical, ac->ac_g_ex.fe_logical) + ctf_integer(int, goal_start, ac->ac_g_ex.fe_start) + ctf_integer(__u32, goal_group, ac->ac_g_ex.fe_group) + ctf_integer(int, goal_len, ac->ac_g_ex.fe_len) + ctf_integer(__u32, result_logical, ac->ac_f_ex.fe_logical) + ctf_integer(int, result_start, ac->ac_f_ex.fe_start) + ctf_integer(__u32, result_group, ac->ac_f_ex.fe_group) + ctf_integer(int, result_len, ac->ac_f_ex.fe_len) + ctf_integer(__u16, found, ac->ac_found) + ctf_integer(__u16, groups, ac->ac_groups_scanned) + ctf_integer(__u16, buddy, ac->ac_buddy) + ctf_integer(__u16, flags, ac->ac_flags) + ctf_integer(__u16, tail, ac->ac_tail) + ctf_integer(__u8, cr, ac->ac_criteria) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_mballoc_prealloc, + TP_PROTO(struct ext4_allocation_context *ac), + + TP_ARGS(ac), + + TP_FIELDS( + ctf_integer(dev_t, dev, ac->ac_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, ac->ac_inode->i_ino) + ctf_integer(__u32, orig_logical, ac->ac_o_ex.fe_logical) + ctf_integer(int, orig_start, ac->ac_o_ex.fe_start) + ctf_integer(__u32, orig_group, ac->ac_o_ex.fe_group) + ctf_integer(int, orig_len, ac->ac_o_ex.fe_len) + ctf_integer(__u32, result_logical, ac->ac_b_ex.fe_logical) + ctf_integer(int, result_start, ac->ac_b_ex.fe_start) + ctf_integer(__u32, result_group, ac->ac_b_ex.fe_group) + ctf_integer(int, result_len, ac->ac_b_ex.fe_len) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__mballoc, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + TP_PROTO(struct super_block *sb, + struct inode *inode, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, inode, group, start, len), +#else + TP_PROTO(struct ext4_allocation_context *ac), + + TP_ARGS(ac), +#endif + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(ino_t, ino, inode ? inode->i_ino : 0) + ctf_integer(int, result_start, start) + ctf_integer(__u32, result_group, group) + ctf_integer(int, result_len, len) +#else + ctf_integer(dev_t, dev, ac->ac_sb->s_dev) + ctf_integer(ino_t, ino, ac->ac_inode ? ac->ac_inode->i_ino : 0) + ctf_integer(__u32, result_logical, ac->ac_b_ex.fe_logical) + ctf_integer(int, result_start, ac->ac_b_ex.fe_start) + ctf_integer(__u32, result_group, ac->ac_b_ex.fe_group) + ctf_integer(int, result_len, ac->ac_b_ex.fe_len) +#endif + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__mballoc, ext4_mballoc_discard, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + TP_PROTO(struct super_block *sb, + struct inode *inode, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, inode, group, start, len) +#else + TP_PROTO(struct ext4_allocation_context *ac), + + TP_ARGS(ac) +#endif +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__mballoc, ext4_mballoc_free, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + TP_PROTO(struct super_block *sb, + struct inode *inode, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, inode, group, start, len) +#else + TP_PROTO(struct ext4_allocation_context *ac), + + TP_ARGS(ac) +#endif +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +LTTNG_TRACEPOINT_EVENT(ext4_forget, + TP_PROTO(struct inode *inode, int is_metadata, __u64 block), + + TP_ARGS(inode, is_metadata, block), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, block, block) + ctf_integer(int, is_metadata, is_metadata) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)) +LTTNG_TRACEPOINT_EVENT(ext4_da_update_reserve_space, + TP_PROTO(struct inode *inode, int used_blocks, int quota_claim), + + TP_ARGS(inode, used_blocks, quota_claim), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, used_blocks, used_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, quota_claim, quota_claim) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +LTTNG_TRACEPOINT_EVENT(ext4_da_update_reserve_space, + TP_PROTO(struct inode *inode, int used_blocks, int quota_claim), + + TP_ARGS(inode, used_blocks, quota_claim), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, used_blocks, used_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, reserved_meta_blocks, + EXT4_I(inode)->i_reserved_meta_blocks) + ctf_integer(int, allocated_meta_blocks, + EXT4_I(inode)->i_allocated_meta_blocks) + ctf_integer(int, quota_claim, quota_claim) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) +LTTNG_TRACEPOINT_EVENT(ext4_da_update_reserve_space, + TP_PROTO(struct inode *inode, int used_blocks), + + TP_ARGS(inode, used_blocks), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, used_blocks, used_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, reserved_meta_blocks, + EXT4_I(inode)->i_reserved_meta_blocks) + ctf_integer(int, allocated_meta_blocks, + EXT4_I(inode)->i_allocated_meta_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)) +LTTNG_TRACEPOINT_EVENT(ext4_da_reserve_space, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) +LTTNG_TRACEPOINT_EVENT(ext4_da_reserve_space, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, reserved_meta_blocks, + EXT4_I(inode)->i_reserved_meta_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) +LTTNG_TRACEPOINT_EVENT(ext4_da_reserve_space, + TP_PROTO(struct inode *inode, int md_needed), + + TP_ARGS(inode, md_needed), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, md_needed, md_needed) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, reserved_meta_blocks, + EXT4_I(inode)->i_reserved_meta_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)) +LTTNG_TRACEPOINT_EVENT(ext4_da_release_space, + TP_PROTO(struct inode *inode, int freed_blocks), + + TP_ARGS(inode, freed_blocks), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, freed_blocks, freed_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) +LTTNG_TRACEPOINT_EVENT(ext4_da_release_space, + TP_PROTO(struct inode *inode, int freed_blocks), + + TP_ARGS(inode, freed_blocks), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(__u64, i_blocks, inode->i_blocks) + ctf_integer(int, freed_blocks, freed_blocks) + ctf_integer(int, reserved_data_blocks, + EXT4_I(inode)->i_reserved_data_blocks) + ctf_integer(int, reserved_meta_blocks, + EXT4_I(inode)->i_reserved_meta_blocks) + ctf_integer(int, allocated_meta_blocks, + EXT4_I(inode)->i_allocated_meta_blocks) + ctf_integer(TP_MODE_T, mode, inode->i_mode) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__bitmap_load, + TP_PROTO(struct super_block *sb, unsigned long group), + + TP_ARGS(sb, group), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(__u32, group, group) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_mb_bitmap_load, + + TP_PROTO(struct super_block *sb, unsigned long group), + + TP_ARGS(sb, group) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_mb_buddy_bitmap_load, + + TP_PROTO(struct super_block *sb, unsigned long group), + + TP_ARGS(sb, group) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)) +LTTNG_TRACEPOINT_EVENT(ext4_read_block_bitmap_load, + TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch), + + TP_ARGS(sb, group, prefetch), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(__u32, group, group) + ctf_integer(bool, prefetch, prefetch) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_read_block_bitmap_load, + + TP_PROTO(struct super_block *sb, unsigned long group), + + TP_ARGS(sb, group) +) +#endif + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_load_inode_bitmap, + + TP_PROTO(struct super_block *sb, unsigned long group), + + TP_ARGS(sb, group) +) + +LTTNG_TRACEPOINT_EVENT(ext4_direct_IO_enter, + TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw), + + TP_ARGS(inode, offset, len, rw), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(unsigned long, len, len) + ctf_integer(int, rw, rw) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_direct_IO_exit, + TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, + int rw, int ret), + + TP_ARGS(inode, offset, len, rw, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(unsigned long, len, len) + ctf_integer(int, rw, rw) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_fallocate_exit, + TP_PROTO(struct inode *inode, loff_t offset, + unsigned int max_blocks, int ret), + + TP_ARGS(inode, offset, max_blocks, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(unsigned int, blocks, max_blocks) + ctf_integer(int, ret, ret) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__fallocate_mode, + TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), + + TP_ARGS(inode, offset, len, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(loff_t, len, len) + ctf_integer(int, mode, mode) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__fallocate_mode, ext4_fallocate_enter, + + TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), + + TP_ARGS(inode, offset, len, mode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__fallocate_mode, ext4_punch_hole, + + TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), + + TP_ARGS(inode, offset, len, mode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__fallocate_mode, ext4_zero_range, + + TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), + + TP_ARGS(inode, offset, len, mode) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +LTTNG_TRACEPOINT_EVENT(ext4_fallocate_enter, + TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), + + TP_ARGS(inode, offset, len, mode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(loff_t, len, len) + ctf_integer(int, mode, mode) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_punch_hole, + TP_PROTO(struct inode *inode, loff_t offset, loff_t len), + + TP_ARGS(inode, offset, len), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, pos, offset) + ctf_integer(loff_t, len, len) + ) +) + +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +LTTNG_TRACEPOINT_EVENT(ext4_unlink_enter, + TP_PROTO(struct inode *parent, struct dentry *dentry), + + TP_ARGS(parent, dentry), + + TP_FIELDS( + ctf_integer(dev_t, dev, dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, dentry->d_inode->i_ino) + ctf_integer(ino_t, parent, parent->i_ino) + ctf_integer(loff_t, size, dentry->d_inode->i_size) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_unlink_exit, + TP_PROTO(struct dentry *dentry, int ret), + + TP_ARGS(dentry, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, dentry->d_inode->i_sb->s_dev) + ctf_integer(ino_t, ino, dentry->d_inode->i_ino) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__truncate, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned int, blocks, inode->i_blocks) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__truncate, ext4_truncate_enter, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__truncate, ext4_truncate_exit, + + TP_PROTO(struct inode *inode), + + TP_ARGS(inode) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +/* 'ux' is the uninitialized extent. */ +LTTNG_TRACEPOINT_EVENT(ext4_ext_convert_to_initialized_enter, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, + struct ext4_extent *ux), + + TP_ARGS(inode, map, ux), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, m_lblk, map->m_lblk) + ctf_integer(unsigned, m_len, map->m_len) + ctf_integer(ext4_lblk_t, u_lblk, le32_to_cpu(ux->ee_block)) + ctf_integer(unsigned, u_len, ext4_ext_get_actual_len(ux)) + ctf_integer(ext4_fsblk_t, u_pblk, ext4_ext_pblock(ux)) + ) +) + +/* + * 'ux' is the uninitialized extent. + * 'ix' is the initialized extent to which blocks are transferred. + */ +LTTNG_TRACEPOINT_EVENT(ext4_ext_convert_to_initialized_fastpath, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, + struct ext4_extent *ux, struct ext4_extent *ix), + + TP_ARGS(inode, map, ux, ix), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, m_lblk, map->m_lblk) + ctf_integer(unsigned, m_len, map->m_len) + ctf_integer(ext4_lblk_t, u_lblk, le32_to_cpu(ux->ee_block)) + ctf_integer(unsigned, u_len, ext4_ext_get_actual_len(ux)) + ctf_integer(ext4_fsblk_t, u_pblk, ext4_ext_pblock(ux)) + ctf_integer(ext4_lblk_t, i_lblk, le32_to_cpu(ix->ee_block)) + ctf_integer(unsigned, i_len, ext4_ext_get_actual_len(ix)) + ctf_integer(ext4_fsblk_t, i_pblk, ext4_ext_pblock(ix)) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__map_blocks_enter, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + unsigned int len, unsigned int flags), + + TP_ARGS(inode, lblk, len, flags), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(unsigned int, len, len) + ctf_integer(unsigned int, flags, flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_enter, ext4_ext_map_blocks_enter, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + unsigned len, unsigned flags), + + TP_ARGS(inode, lblk, len, flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_enter, ext4_ind_map_blocks_enter, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + unsigned len, unsigned flags), + + TP_ARGS(inode, lblk, len, flags) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__map_blocks_exit, + TP_PROTO(struct inode *inode, unsigned flags, struct ext4_map_blocks *map, + int ret), + + TP_ARGS(inode, flags, map, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(unsigned int, flags, flags) + ctf_integer(ext4_fsblk_t, pblk, map->m_pblk) + ctf_integer(ext4_lblk_t, lblk, map->m_lblk) + ctf_integer(unsigned int, len, map->m_len) + ctf_integer(unsigned int, mflags, map->m_flags) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ext_map_blocks_exit, + TP_PROTO(struct inode *inode, unsigned flags, + struct ext4_map_blocks *map, int ret), + + TP_ARGS(inode, flags, map, ret) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ind_map_blocks_exit, + TP_PROTO(struct inode *inode, unsigned flags, + struct ext4_map_blocks *map, int ret), + + TP_ARGS(inode, flags, map, ret) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__map_blocks_exit, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int ret), + + TP_ARGS(inode, map, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_fsblk_t, pblk, map->m_pblk) + ctf_integer(ext4_lblk_t, lblk, map->m_lblk) + ctf_integer(unsigned int, len, map->m_len) + ctf_integer(unsigned int, mflags, map->m_flags) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ext_map_blocks_exit, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int ret), + + TP_ARGS(inode, map, ret) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ind_map_blocks_exit, + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int ret), + + TP_ARGS(inode, map, ret) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__map_blocks_exit, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + ext4_fsblk_t pblk, unsigned int len, int ret), + + TP_ARGS(inode, lblk, pblk, len, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_fsblk_t, pblk, pblk) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(unsigned int, len, len) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ext_map_blocks_exit, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + ext4_fsblk_t pblk, unsigned len, int ret), + + TP_ARGS(inode, lblk, pblk, len, ret) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__map_blocks_exit, ext4_ind_map_blocks_exit, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, + ext4_fsblk_t pblk, unsigned len, int ret), + + TP_ARGS(inode, lblk, pblk, len, ret) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + +LTTNG_TRACEPOINT_EVENT(ext4_ext_load_extent, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk), + + TP_ARGS(inode, lblk, pblk), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_fsblk_t, pblk, pblk) + ctf_integer(ext4_lblk_t, lblk, lblk) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT(ext4_load_inode, + TP_PROTO(struct super_block *sb, unsigned long ino), + + TP_ARGS(sb, ino), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(ino_t, ino, ino) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(ext4_load_inode, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ) +) +#endif +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_journal_start, + TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks, + int revoke_creds, unsigned long IP), + + TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, ip, IP) + ctf_integer(int, blocks, blocks) + ctf_integer(int, rsv_blocks, rsv_blocks) + ctf_integer(int, revoke_creds, revoke_creds) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_journal_start_reserved, + TP_PROTO(struct super_block *sb, int blocks, unsigned long IP), + + TP_ARGS(sb, blocks, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, ip, IP) + ctf_integer(int, blocks, blocks) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_journal_start, + TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks, + unsigned long IP), + + TP_ARGS(sb, blocks, rsv_blocks, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, ip, IP) + ctf_integer(int, blocks, blocks) + ctf_integer(int, rsv_blocks, rsv_blocks) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_journal_start_reserved, + TP_PROTO(struct super_block *sb, int blocks, unsigned long IP), + + TP_ARGS(sb, blocks, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, ip, IP) + ctf_integer(int, blocks, blocks) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_journal_start, + TP_PROTO(struct super_block *sb, int nblocks, unsigned long IP), + + TP_ARGS(sb, nblocks, IP), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned long, ip, IP) + ctf_integer(int, nblocks, nblocks) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__trim, + TP_PROTO(struct super_block *sb, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, group, start, len), + + TP_FIELDS( + ctf_integer(int, dev_major, MAJOR(sb->s_dev)) + ctf_integer(int, dev_minor, MINOR(sb->s_dev)) + ctf_integer(__u32, group, group) + ctf_integer(int, start, start) + ctf_integer(int, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__trim, ext4_trim_extent, + + TP_PROTO(struct super_block *sb, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, group, start, len) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__trim, ext4_trim_all_free, + + TP_PROTO(struct super_block *sb, + ext4_group_t group, + ext4_grpblk_t start, + ext4_grpblk_t len), + + TP_ARGS(sb, group, start, len) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_handle_uninitialized_extents, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int flags, + unsigned int allocated, ext4_fsblk_t newblock), + + TP_ARGS(inode, map, flags, allocated, newblock), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, + unsigned int allocated, ext4_fsblk_t newblock), + + TP_ARGS(inode, map, allocated, newblock), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + ctf_integer(int, flags, flags) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + ctf_integer(int, flags, map->m_flags) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + ctf_integer(ext4_lblk_t, lblk, map->m_lblk) + ctf_integer(ext4_fsblk_t, pblk, map->m_pblk) + ctf_integer(unsigned int, len, map->m_len) + ctf_integer(unsigned int, allocated, allocated) + ctf_integer(ext4_fsblk_t, newblk, newblock) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_get_implied_cluster_alloc_exit, + TP_PROTO(struct super_block *sb, struct ext4_map_blocks *map, int ret), + + TP_ARGS(sb, map, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(unsigned int, flags, map->m_flags) + ctf_integer(ext4_lblk_t, lblk, map->m_lblk) + ctf_integer(ext4_fsblk_t, pblk, map->m_pblk) + ctf_integer(unsigned int, len, map->m_len) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_put_in_cache, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len, + ext4_fsblk_t start), + + TP_ARGS(inode, lblk, len, start), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(unsigned int, len, len) + ctf_integer(ext4_fsblk_t, start, start) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_in_cache, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, int ret), + + TP_ARGS(inode, lblk, ret), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(int, ret, ret) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_find_delalloc_range, + TP_PROTO(struct inode *inode, ext4_lblk_t from, ext4_lblk_t to, + int reverse, int found, ext4_lblk_t found_blk), + + TP_ARGS(inode, from, to, reverse, found, found_blk), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, from, from) + ctf_integer(ext4_lblk_t, to, to) + ctf_integer(int, reverse, reverse) + ctf_integer(int, found, found) + ctf_integer(ext4_lblk_t, found_blk, found_blk) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_get_reserved_cluster_alloc, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len), + + TP_ARGS(inode, lblk, len), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(unsigned int, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_show_extent, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk, + unsigned short len), + + TP_ARGS(inode, lblk, pblk, len), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_fsblk_t, pblk, pblk) + ctf_integer(ext4_lblk_t, lblk, lblk) + ctf_integer(unsigned short, len, len) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_remove_blocks, + TP_PROTO(struct inode *inode, struct ext4_extent *ex, + ext4_lblk_t from, ext4_fsblk_t to, + struct partial_cluster *pc), + + TP_ARGS(inode, ex, from, to, pc), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, from, from) + ctf_integer(ext4_lblk_t, to, to) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(unsigned short, ee_len, ext4_ext_get_actual_len(ex)) + ctf_integer(ext4_fsblk_t, pc_pclu, pc->pclu) + ctf_integer(ext4_lblk_t, pc_lblk, pc->lblk) + ctf_integer(int, pc_state, pc->state) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_remove_blocks, + TP_PROTO(struct inode *inode, struct ext4_extent *ex, + ext4_lblk_t from, ext4_fsblk_t to, + long long partial_cluster), + + TP_ARGS(inode, ex, from, to, partial_cluster), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, from, from) + ctf_integer(ext4_lblk_t, to, to) + ctf_integer(long long, partial, partial_cluster) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(unsigned short, ee_len, ext4_ext_get_actual_len(ex)) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_remove_blocks, + TP_PROTO(struct inode *inode, struct ext4_extent *ex, + ext4_lblk_t from, ext4_fsblk_t to, + ext4_fsblk_t partial_cluster), + + TP_ARGS(inode, ex, from, to, partial_cluster), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, from, from) + ctf_integer(ext4_lblk_t, to, to) + ctf_integer(ext4_fsblk_t, partial, partial_cluster) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(unsigned short, ee_len, ext4_ext_get_actual_len(ex)) + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_rm_leaf, + TP_PROTO(struct inode *inode, ext4_lblk_t start, + struct ext4_extent *ex, + struct partial_cluster *pc), + + TP_ARGS(inode, start, ex, pc), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(short, ee_len, ext4_ext_get_actual_len(ex)) + ctf_integer(ext4_fsblk_t, pc_pclu, pc->pclu) + ctf_integer(ext4_lblk_t, pc_lblk, pc->lblk) + ctf_integer(int, pc_state, pc->state) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_rm_leaf, + TP_PROTO(struct inode *inode, ext4_lblk_t start, + struct ext4_extent *ex, + long long partial_cluster), + + TP_ARGS(inode, start, ex, partial_cluster), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(long long, partial, partial_cluster) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(short, ee_len, ext4_ext_get_actual_len(ex)) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_ext_rm_leaf, + TP_PROTO(struct inode *inode, ext4_lblk_t start, + struct ext4_extent *ex, ext4_fsblk_t partial_cluster), + + TP_ARGS(inode, start, ex, partial_cluster), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(long long, partial, partial_cluster) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, ee_lblk, le32_to_cpu(ex->ee_block)) + ctf_integer(ext4_fsblk_t, ee_pblk, ext4_ext_pblock(ex)) + ctf_integer(short, ee_len, ext4_ext_get_actual_len(ex)) + ) +) + +#endif + +LTTNG_TRACEPOINT_EVENT(ext4_ext_rm_idx, + TP_PROTO(struct inode *inode, ext4_fsblk_t pblk), + + TP_ARGS(inode, pblk), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_fsblk_t, pblk, pblk) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_remove_space, + TP_PROTO(struct inode *inode, ext4_lblk_t start, + ext4_lblk_t end, int depth), + + TP_ARGS(inode, start, end, depth), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, end, end) + ctf_integer(int, depth, depth) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_ext_remove_space, + TP_PROTO(struct inode *inode, ext4_lblk_t start, int depth), + + TP_ARGS(inode, start, depth), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(int, depth, depth) + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_remove_space_done, + TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end, + int depth, struct partial_cluster *pc, __le16 eh_entries), + + TP_ARGS(inode, start, end, depth, pc, eh_entries), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, end, end) + ctf_integer(int, depth, depth) + ctf_integer(unsigned short, eh_entries, le16_to_cpu(eh_entries)) + ctf_integer(ext4_fsblk_t, pc_pclu, pc->pclu) + ctf_integer(ext4_lblk_t, pc_lblk, pc->lblk) + ctf_integer(int, pc_state, pc->state) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_ext_remove_space_done, + TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end, + int depth, long long partial, __le16 eh_entries), + + TP_ARGS(inode, start, end, depth, partial, eh_entries), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(ext4_lblk_t, end, end) + ctf_integer(int, depth, depth) + ctf_integer(long long, partial, partial) + ctf_integer(unsigned short, eh_entries, le16_to_cpu(eh_entries)) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(ext4_ext_remove_space_done, + TP_PROTO(struct inode *inode, ext4_lblk_t start, int depth, + ext4_lblk_t partial, unsigned short eh_entries), + + TP_ARGS(inode, start, depth, partial, eh_entries), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, start, start) + ctf_integer(int, depth, depth) + ctf_integer(ext4_lblk_t, partial, partial) + ctf_integer(unsigned short, eh_entries, eh_entries) + ) +) + +#endif + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(ext4__es_extent, + TP_PROTO(struct inode *inode, struct extent_status *es), + + TP_ARGS(inode, es), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, es->es_lblk) + ctf_integer(ext4_lblk_t, len, es->es_len) + ctf_integer(ext4_fsblk_t, pblk, ext4_es_pblock(es)) + ctf_integer(char, status, ext4_es_status(es)) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__es_extent, ext4_es_insert_extent, + TP_PROTO(struct inode *inode, struct extent_status *es), + + TP_ARGS(inode, es) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__es_extent, ext4_es_cache_extent, + TP_PROTO(struct inode *inode, struct extent_status *es), + + TP_ARGS(inode, es) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT(ext4_es_insert_extent, + TP_PROTO(struct inode *inode, struct extent_status *es), + + TP_ARGS(inode, es), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, es->es_lblk) + ctf_integer(ext4_lblk_t, len, es->es_len) + ctf_integer(ext4_fsblk_t, pblk, ext4_es_pblock(es)) + ctf_integer(char, status, ext4_es_status(es) >> 60) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_remove_extent, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len), + + TP_ARGS(inode, lblk, len), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(loff_t, lblk, lblk) + ctf_integer(loff_t, len, len) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_find_delayed_extent_range_enter, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk), + + TP_ARGS(inode, lblk), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_find_delayed_extent_range_exit, + TP_PROTO(struct inode *inode, struct extent_status *es), + + TP_ARGS(inode, es), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, es->es_lblk) + ctf_integer(ext4_lblk_t, len, es->es_len) + ctf_integer(ext4_fsblk_t, pblk, ext4_es_pblock(es)) + ctf_integer(char, status, ext4_es_status(es) >> 60) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_lookup_extent_enter, + TP_PROTO(struct inode *inode, ext4_lblk_t lblk), + + TP_ARGS(inode, lblk), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, lblk) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_lookup_extent_exit, + TP_PROTO(struct inode *inode, struct extent_status *es, + int found), + + TP_ARGS(inode, es, found), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ctf_integer(ext4_lblk_t, lblk, es->es_lblk) + ctf_integer(ext4_lblk_t, len, es->es_len) + ctf_integer(ext4_fsblk_t, pblk, ext4_es_pblock(es)) + ctf_integer(char, status, ext4_es_status(es) >> 60) + ctf_integer(int, found, found) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_shrink_enter, + TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), + + TP_ARGS(sb, nr_to_scan, cache_cnt), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, nr_to_scan, nr_to_scan) + ctf_integer(int, cache_cnt, cache_cnt) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_es_shrink_exit, + TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt), + + TP_ARGS(sb, shrunk_nr, cache_cnt), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, shrunk_nr, shrunk_nr) + ctf_integer(int, cache_cnt, cache_cnt) + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +LTTNG_TRACEPOINT_EVENT(ext4_fc_replay_scan, + TP_PROTO(struct super_block *sb, int error, int off), + + TP_ARGS(sb, error, off), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, error, error) + ctf_integer(int, off, off) + ) +) + +LTTNG_TRACEPOINT_EVENT(ext4_fc_replay, + TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2), + + TP_ARGS(sb, tag, ino, priv1, priv2), + + TP_FIELDS( + ctf_integer(dev_t, dev, sb->s_dev) + ctf_integer(int, tag, tag) + ctf_integer(int, ino, ino) + ctf_integer(int, priv1, priv1) + ctf_integer(int, priv2, priv2) + ) +) +#endif + +#endif /* LTTNG_TRACE_EXT4_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/gpio.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/gpio.h new file mode 100644 index 000000000000..bb492e7121b3 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/gpio.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM gpio + +#if !defined(LTTNG_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_GPIO_H + +#include + +LTTNG_TRACEPOINT_EVENT(gpio_direction, + + TP_PROTO(unsigned gpio, int in, int err), + + TP_ARGS(gpio, in, err), + + TP_FIELDS( + ctf_integer(unsigned, gpio, gpio) + ctf_integer(int, in, in) + ctf_integer(int, err, err) + ) +) + +LTTNG_TRACEPOINT_EVENT(gpio_value, + + TP_PROTO(unsigned gpio, int get, int value), + + TP_ARGS(gpio, get, value), + + TP_FIELDS( + ctf_integer(unsigned, gpio, gpio) + ctf_integer(int, get, get) + ctf_integer(int, value, value) + ) +) + +#endif /* if !defined(LTTNG_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/i2c.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/i2c.h new file mode 100644 index 000000000000..131d1344e54d --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/i2c.h @@ -0,0 +1,120 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM i2c + +#if !defined(LTTNG_TRACE_I2C_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_I2C_H + +#include + +/* + * __i2c_transfer() write request + */ +LTTNG_TRACEPOINT_EVENT_CODE(i2c_write, + + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, + int num), + + TP_ARGS(adap, msg, num), + + TP_locvar( + int extract_sensitive_payload; + ), + + TP_code_pre( + tp_locvar->extract_sensitive_payload = + LTTNG_READ_ONCE(extract_sensitive_payload); + ), + + TP_FIELDS( + ctf_integer(int, adapter_nr, adap->nr) + ctf_integer(__u16, msg_nr, num) + ctf_integer(__u16, addr, msg->addr) + ctf_integer(__u16, flags, msg->flags) + ctf_integer(__u16, len, msg->len) + ctf_sequence_hex(__u8, buf, + tp_locvar->extract_sensitive_payload ? + msg->buf : NULL, + __u16, + tp_locvar->extract_sensitive_payload ? + msg->len : 0) + ), + + TP_code_post() +) + +/* + * __i2c_transfer() read request + */ +LTTNG_TRACEPOINT_EVENT(i2c_read, + + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, + int num), + + TP_ARGS(adap, msg, num), + + TP_FIELDS( + ctf_integer(int, adapter_nr, adap->nr) + ctf_integer(__u16, msg_nr, num) + ctf_integer(__u16, addr, msg->addr) + ctf_integer(__u16, flags, msg->flags) + ctf_integer(__u16, len, msg->len) + ) +) + +/* + * __i2c_transfer() read reply + */ +LTTNG_TRACEPOINT_EVENT_CODE(i2c_reply, + + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, + int num), + + TP_ARGS(adap, msg, num), + + TP_locvar( + int extract_sensitive_payload; + ), + + TP_code_pre( + tp_locvar->extract_sensitive_payload = + LTTNG_READ_ONCE(extract_sensitive_payload); + ), + + TP_FIELDS( + ctf_integer(int, adapter_nr, adap->nr) + ctf_integer(__u16, msg_nr, num) + ctf_integer(__u16, addr, msg->addr) + ctf_integer(__u16, flags, msg->flags) + ctf_integer(__u16, len, msg->len) + ctf_sequence_hex(__u8, buf, + tp_locvar->extract_sensitive_payload ? + msg->buf : NULL, + __u16, + tp_locvar->extract_sensitive_payload ? + msg->len : 0) + ), + + TP_code_post() +) + +/* + * __i2c_transfer() result + */ +LTTNG_TRACEPOINT_EVENT(i2c_result, + + TP_PROTO(const struct i2c_adapter *adap, int num, int ret), + + TP_ARGS(adap, num, ret), + + TP_FIELDS( + ctf_integer(int, adapter_nr, adap->nr) + ctf_integer(__u16, nr_msgs, num) + ctf_integer(__s16, ret, ret) + ) +) + +#endif /* LTTNG_TRACE_I2C_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/irq.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/irq.h new file mode 100644 index 000000000000..6f66a5e0fd6f --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/irq.h @@ -0,0 +1,190 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM irq + +#if !defined(LTTNG_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_IRQ_H + +#include + +#ifndef _TRACE_IRQ_DEF_ +#define _TRACE_IRQ_DEF_ + +struct irqaction; +struct softirq_action; + +#endif /* _TRACE_IRQ_DEF_ */ + +/** + * irq_handler_entry - called immediately before the irq action handler + * @irq: irq number + * @action: pointer to struct irqaction + * + * The struct irqaction pointed to by @action contains various + * information about the handler, including the device name, + * @action->name, and the device id, @action->dev_id. When used in + * conjunction with the irq_handler_exit tracepoint, we can figure + * out irq handler latencies. + */ +LTTNG_TRACEPOINT_EVENT(irq_handler_entry, + + TP_PROTO(int irq, struct irqaction *action), + + TP_ARGS(irq, action), + + TP_FIELDS( + ctf_integer(int, irq, irq) + ctf_string(name, action->name) + ) +) + +/** + * irq_handler_exit - called immediately after the irq action handler returns + * @irq: irq number + * @action: pointer to struct irqaction + * @ret: return value + * + * If the @ret value is set to IRQ_HANDLED, then we know that the corresponding + * @action->handler scuccessully handled this irq. Otherwise, the irq might be + * a shared irq line, or the irq was not handled successfully. Can be used in + * conjunction with the irq_handler_entry to understand irq handler latencies. + */ +LTTNG_TRACEPOINT_EVENT(irq_handler_exit, + + TP_PROTO(int irq, struct irqaction *action, int ret), + + TP_ARGS(irq, action, ret), + + TP_FIELDS( + ctf_integer(int, irq, irq) + ctf_integer(int, ret, ret) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +LTTNG_TRACEPOINT_EVENT_CLASS(irq_softirq, + + TP_PROTO(unsigned int vec_nr), + + TP_ARGS(vec_nr), + + TP_FIELDS( + ctf_integer(unsigned int, vec, vec_nr) + ) +) + +/** + * softirq_entry - called immediately before the softirq handler + * @vec_nr: softirq vector number + * + * When used in combination with the softirq_exit tracepoint + * we can determine the softirq handler runtine. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_entry, + + irq_softirq_entry, + + TP_PROTO(unsigned int vec_nr), + + TP_ARGS(vec_nr) +) + +/** + * softirq_exit - called immediately after the softirq handler returns + * @vec_nr: softirq vector number + * + * When used in combination with the softirq_entry tracepoint + * we can determine the softirq handler runtine. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_exit, + + irq_softirq_exit, + + TP_PROTO(unsigned int vec_nr), + + TP_ARGS(vec_nr) +) + +/** + * softirq_raise - called immediately when a softirq is raised + * @vec_nr: softirq vector number + * + * When used in combination with the softirq_entry tracepoint + * we can determine the softirq raise to run latency. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_raise, + + irq_softirq_raise, + + TP_PROTO(unsigned int vec_nr), + + TP_ARGS(vec_nr) +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) */ +LTTNG_TRACEPOINT_EVENT_CLASS(irq_softirq, + + TP_PROTO(struct softirq_action *h, struct softirq_action *vec), + + TP_ARGS(h, vec), + + TP_FIELDS( + ctf_integer(unsigned int, vec, (int)(h - vec)) + ) +) + +/** + * softirq_entry - called immediately before the softirq handler + * @h: pointer to struct softirq_action + * @vec: pointer to first struct softirq_action in softirq_vec array + * + * When used in combination with the softirq_exit tracepoint + * we can determine the softirq handler runtine. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_entry, + + irq_softirq_entry, + + TP_PROTO(struct softirq_action *h, struct softirq_action *vec), + + TP_ARGS(h, vec) +) + +/** + * softirq_exit - called immediately after the softirq handler returns + * @h: pointer to struct softirq_action + * @vec: pointer to first struct softirq_action in softirq_vec array + * + * When used in combination with the softirq_entry tracepoint + * we can determine the softirq handler runtine. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_exit, + + irq_softirq_exit, + + TP_PROTO(struct softirq_action *h, struct softirq_action *vec), + + TP_ARGS(h, vec) +) + +/** + * softirq_raise - called immediately when a softirq is raised + * @h: pointer to struct softirq_action + * @vec: pointer to first struct softirq_action in softirq_vec array + * + * When used in combination with the softirq_entry tracepoint + * we can determine the softirq raise to run latency. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_raise, + + irq_softirq_raise, + + TP_PROTO(struct softirq_action *h, struct softirq_action *vec), + + TP_ARGS(h, vec) +) +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) */ + +#endif /* LTTNG_TRACE_IRQ_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd.h new file mode 100644 index 000000000000..acc8a48d3c61 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd.h @@ -0,0 +1,157 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM jbd + +#if !defined(LTTNG_TRACE_JBD_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_JBD_H + +#include +#include +#include + +LTTNG_TRACEPOINT_EVENT(jbd_checkpoint, + + TP_PROTO(journal_t *journal, int result), + + TP_ARGS(journal, result), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(int, result, result) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(jbd_commit, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) +#endif + ctf_integer(int, transaction, commit_transaction->t_tid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd_commit, jbd_start_commit, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd_commit, jbd_commit_locking, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd_commit, jbd_commit_flushing, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd_commit, jbd_commit_logging, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT(jbd_drop_transaction, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) +#endif + ctf_integer(int, transaction, commit_transaction->t_tid) + ) +) + +LTTNG_TRACEPOINT_EVENT(jbd_end_commit, + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) +#endif + ctf_integer(int, transaction, commit_transaction->t_tid) + ctf_integer(int, head, journal->j_tail_sequence) + ) +) + +LTTNG_TRACEPOINT_EVENT(jbd_do_submit_data, + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) +#endif + ctf_integer(int, transaction, commit_transaction->t_tid) + ) +) + +LTTNG_TRACEPOINT_EVENT(jbd_cleanup_journal_tail, + + TP_PROTO(journal_t *journal, tid_t first_tid, + unsigned long block_nr, unsigned long freed), + + TP_ARGS(journal, first_tid, block_nr, freed), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(tid_t, tail_sequence, journal->j_tail_sequence) + ctf_integer(tid_t, first_tid, first_tid) + ctf_integer(unsigned long, block_nr, block_nr) + ctf_integer(unsigned long, freed, freed) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(journal_write_superblock, + + jbd_journal_write_superblock, + + TP_PROTO(journal_t *journal, int write_op), + + TP_ARGS(journal, write_op), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(int, write_op, write_op) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(jbd_update_superblock_end, + TP_PROTO(journal_t *journal, int wait), + + TP_ARGS(journal, wait), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(int, wait, wait) + ) +) +#endif + +#endif /* LTTNG_TRACE_JBD_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd2.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd2.h new file mode 100644 index 000000000000..10e3073fe972 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/jbd2.h @@ -0,0 +1,183 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM jbd2 + +#if !defined(LTTNG_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_JBD2_H + +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +#ifndef _TRACE_JBD2_DEF +#define _TRACE_JBD2_DEF +struct transaction_chp_stats_s; +struct transaction_run_stats_s; +#endif +#endif + +LTTNG_TRACEPOINT_EVENT(jbd2_checkpoint, + + TP_PROTO(journal_t *journal, int result), + + TP_ARGS(journal, result), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(int, result, result) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(jbd2_commit, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) + ctf_integer(int, transaction, commit_transaction->t_tid) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd2_commit, jbd2_start_commit, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd2_commit, jbd2_commit_locking, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd2_commit, jbd2_commit_flushing, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd2_commit, jbd2_commit_logging, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(jbd2_commit, jbd2_drop_transaction, + + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction) +) +#endif + +LTTNG_TRACEPOINT_EVENT(jbd2_end_commit, + TP_PROTO(journal_t *journal, transaction_t *commit_transaction), + + TP_ARGS(journal, commit_transaction), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(char, sync_commit, commit_transaction->t_synchronous_commit) + ctf_integer(int, transaction, commit_transaction->t_tid) + ctf_integer(int, head, journal->j_tail_sequence) + ) +) + +LTTNG_TRACEPOINT_EVENT(jbd2_submit_inode_data, + TP_PROTO(struct inode *inode), + + TP_ARGS(inode), + + TP_FIELDS( + ctf_integer(dev_t, dev, inode->i_sb->s_dev) + ctf_integer(ino_t, ino, inode->i_ino) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +LTTNG_TRACEPOINT_EVENT(jbd2_run_stats, + TP_PROTO(dev_t dev, unsigned long tid, + struct transaction_run_stats_s *stats), + + TP_ARGS(dev, tid, stats), + + TP_FIELDS( + ctf_integer(dev_t, dev, dev) + ctf_integer(unsigned long, tid, tid) + ctf_integer(unsigned long, wait, stats->rs_wait) + ctf_integer(unsigned long, running, stats->rs_running) + ctf_integer(unsigned long, locked, stats->rs_locked) + ctf_integer(unsigned long, flushing, stats->rs_flushing) + ctf_integer(unsigned long, logging, stats->rs_logging) + ctf_integer(__u32, handle_count, stats->rs_handle_count) + ctf_integer(__u32, blocks, stats->rs_blocks) + ctf_integer(__u32, blocks_logged, stats->rs_blocks_logged) + ) +) + +LTTNG_TRACEPOINT_EVENT(jbd2_checkpoint_stats, + TP_PROTO(dev_t dev, unsigned long tid, + struct transaction_chp_stats_s *stats), + + TP_ARGS(dev, tid, stats), + + TP_FIELDS( + ctf_integer(dev_t, dev, dev) + ctf_integer(unsigned long, tid, tid) + ctf_integer(unsigned long, chp_time, stats->cs_chp_time) + ctf_integer(__u32, forced_to_close, stats->cs_forced_to_close) + ctf_integer(__u32, written, stats->cs_written) + ctf_integer(__u32, dropped, stats->cs_dropped) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(jbd2_update_log_tail, +#else +LTTNG_TRACEPOINT_EVENT(jbd2_cleanup_journal_tail, +#endif + + TP_PROTO(journal_t *journal, tid_t first_tid, + unsigned long block_nr, unsigned long freed), + + TP_ARGS(journal, first_tid, block_nr, freed), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(tid_t, tail_sequence, journal->j_tail_sequence) + ctf_integer(tid_t, first_tid, first_tid) + ctf_integer(unsigned long, block_nr, block_nr) + ctf_integer(unsigned long, freed, freed) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(jbd2_write_superblock, + + TP_PROTO(journal_t *journal, int write_op), + + TP_ARGS(journal, write_op), + + TP_FIELDS( + ctf_integer(dev_t, dev, journal->j_fs_dev->bd_dev) + ctf_integer(int, write_op, write_op) + ) +) +#endif + +#endif /* LTTNG_TRACE_JBD2_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kmem.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kmem.h new file mode 100644 index 000000000000..8270fcedc185 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kmem.h @@ -0,0 +1,345 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kmem + +#if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_KMEM_H + +#include +#include +#include + +LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc, + + TP_PROTO(unsigned long call_site, + const void *ptr, + size_t bytes_req, + size_t bytes_alloc, + gfp_t gfp_flags), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags), + + TP_FIELDS( + ctf_integer_hex(unsigned long, call_site, call_site) + ctf_integer_hex(const void *, ptr, ptr) + ctf_integer(size_t, bytes_req, bytes_req) + ctf_integer(size_t, bytes_alloc, bytes_alloc) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc, + + kmem_kmalloc, + + TP_PROTO(unsigned long call_site, const void *ptr, + size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc, + + TP_PROTO(unsigned long call_site, const void *ptr, + size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node, + + TP_PROTO(unsigned long call_site, + const void *ptr, + size_t bytes_req, + size_t bytes_alloc, + gfp_t gfp_flags, + int node), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node), + + TP_FIELDS( + ctf_integer_hex(unsigned long, call_site, call_site) + ctf_integer_hex(const void *, ptr, ptr) + ctf_integer(size_t, bytes_req, bytes_req) + ctf_integer(size_t, bytes_alloc, bytes_alloc) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ctf_integer(int, node, node) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node, + + kmem_kmalloc_node, + + TP_PROTO(unsigned long call_site, const void *ptr, + size_t bytes_req, size_t bytes_alloc, + gfp_t gfp_flags, int node), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node, + + TP_PROTO(unsigned long call_site, const void *ptr, + size_t bytes_req, size_t bytes_alloc, + gfp_t gfp_flags, int node), + + TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free, + + TP_PROTO(unsigned long call_site, const void *ptr), + + TP_ARGS(call_site, ptr), + + TP_FIELDS( + ctf_integer_hex(unsigned long, call_site, call_site) + ctf_integer_hex(const void *, ptr, ptr) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free, kfree, + + kmem_kfree, + + TP_PROTO(unsigned long call_site, const void *ptr), + + TP_ARGS(call_site, ptr) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free, kmem_cache_free, + + TP_PROTO(unsigned long call_site, const void *ptr), + + TP_ARGS(call_site, ptr) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free, kmem_mm_page_free, +#else +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_direct, kmem_mm_page_free_direct, +#endif + + TP_PROTO(struct page *page, unsigned int order), + + TP_ARGS(page, order), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(unsigned int, order, order) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched, + + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched, + + TP_PROTO(struct page *page, int cold), + + TP_ARGS(page, cold), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, cold, cold) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_MAP(mm_pagevec_free, kmem_pagevec_free, + + TP_PROTO(struct page *page, int cold), + + TP_ARGS(page, cold), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, cold, cold) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc, kmem_mm_page_alloc, + + TP_PROTO(struct page *page, unsigned int order, + gfp_t gfp_flags, int migratetype), + + TP_ARGS(page, order, gfp_flags, migratetype), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, + page ? page_to_pfn(page) : -1UL) + ctf_integer(unsigned int, order, order) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ctf_integer(int, migratetype, migratetype) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page, + + TP_PROTO(struct page *page, unsigned int order, int migratetype), + + TP_ARGS(page, order, migratetype), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, + page ? page_to_pfn(page) : -1UL) + ctf_integer(unsigned int, order, order) + ctf_integer(int, migratetype, migratetype) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_alloc_zone_locked, + + kmem_mm_page_alloc_zone_locked, + + TP_PROTO(struct page *page, unsigned int order, int migratetype), + + TP_ARGS(page, order, migratetype) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_pcpu_drain, + + kmem_mm_page_pcpu_drain, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) + TP_PROTO(struct page *page, unsigned int order, int migratetype), +#else + TP_PROTO(struct page *page, int order, int migratetype), +#endif + + TP_ARGS(page, order, migratetype) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,2) \ + || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \ + || LTTNG_KERNEL_RANGE(3,16,35, 3,17,0) \ + || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag, + + kmem_mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, alloc_order, alloc_order) + ctf_integer(int, fallback_order, fallback_order) + ctf_integer(int, alloc_migratetype, alloc_migratetype) + ctf_integer(int, fallback_migratetype, fallback_migratetype) + ctf_integer(int, change_ownership, + (alloc_migratetype == get_pageblock_migratetype(page))) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,30)) + +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag, + + kmem_mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype, int new_migratetype), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype, new_migratetype), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, alloc_order, alloc_order) + ctf_integer(int, fallback_order, fallback_order) + ctf_integer(int, alloc_migratetype, alloc_migratetype) + ctf_integer(int, fallback_migratetype, fallback_migratetype) + ctf_integer(int, change_ownership, (new_migratetype == alloc_migratetype)) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag, + + kmem_mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype, + int change_ownership), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype, + change_ownership), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, alloc_order, alloc_order) + ctf_integer(int, fallback_order, fallback_order) + ctf_integer(int, alloc_migratetype, alloc_migratetype) + ctf_integer(int, fallback_migratetype, fallback_migratetype) + ctf_integer(int, change_ownership, change_ownership) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag, + + kmem_mm_page_alloc_extfrag, + + TP_PROTO(struct page *page, + int alloc_order, int fallback_order, + int alloc_migratetype, int fallback_migratetype), + + TP_ARGS(page, + alloc_order, fallback_order, + alloc_migratetype, fallback_migratetype), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(unsigned long, pfn, page_to_pfn(page)) + ctf_integer(int, alloc_order, alloc_order) + ctf_integer(int, fallback_order, fallback_order) + ctf_integer(int, alloc_migratetype, alloc_migratetype) + ctf_integer(int, fallback_migratetype, fallback_migratetype) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + +#endif + +#endif /* LTTNG_TRACE_KMEM_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kvm.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kvm.h new file mode 100644 index 000000000000..62030fcc87c2 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/kvm.h @@ -0,0 +1,284 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(LTTNG_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_KVM_MAIN_H + +#include +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kvm + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) + +LTTNG_TRACEPOINT_EVENT(kvm_userspace_exit, + TP_PROTO(__u32 reason, int errno), + TP_ARGS(reason, errno), + + TP_FIELDS( + ctf_integer(__u32, reason, reason) + ctf_integer(int, errno, errno) + ) +) +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) +#if defined(__KVM_HAVE_IOAPIC) +#undef __KVM_HAVE_IRQ_LINE +#define __KVM_HAVE_IRQ_LINE +#endif +#endif + +#if defined(__KVM_HAVE_IRQ_LINE) +LTTNG_TRACEPOINT_EVENT(kvm_set_irq, + TP_PROTO(unsigned int gsi, int level, int irq_source_id), + TP_ARGS(gsi, level, irq_source_id), + + TP_FIELDS( + ctf_integer(unsigned int, gsi, gsi) + ctf_integer(int, level, level) + ctf_integer(int, irq_source_id, irq_source_id) + ) +) +#endif + +#if defined(__KVM_HAVE_IOAPIC) + +LTTNG_TRACEPOINT_EVENT(kvm_ioapic_set_irq, + TP_PROTO(__u64 e, int pin, bool coalesced), + TP_ARGS(e, pin, coalesced), + + TP_FIELDS( + ctf_integer(__u64, e, e) + ctf_integer(int, pin, pin) + ctf_integer(bool, coalesced, coalesced) + ) +) + +LTTNG_TRACEPOINT_EVENT(kvm_msi_set_irq, + TP_PROTO(__u64 address, __u64 data), + TP_ARGS(address, data), + + TP_FIELDS( + ctf_integer(__u64, address, address) + ctf_integer(__u64, data, data) + ) +) + +LTTNG_TRACEPOINT_EVENT(kvm_ack_irq, + TP_PROTO(unsigned int irqchip, unsigned int pin), + TP_ARGS(irqchip, pin), + + TP_FIELDS( + ctf_integer(unsigned int, irqchip, irqchip) + ctf_integer(unsigned int, pin, pin) + ) +) + +#endif /* defined(__KVM_HAVE_IOAPIC) */ + +#define KVM_TRACE_MMIO_READ_UNSATISFIED 0 +#define KVM_TRACE_MMIO_READ 1 +#define KVM_TRACE_MMIO_WRITE 2 + +#define kvm_trace_symbol_mmio \ + { KVM_TRACE_MMIO_READ_UNSATISFIED, "unsatisfied-read" }, \ + { KVM_TRACE_MMIO_READ, "read" }, \ + { KVM_TRACE_MMIO_WRITE, "write" } + + +#if (LTTNG_SLE_KERNEL_RANGE(4,4,121,92,92,0, 4,4,122,0,0,0) \ + || LTTNG_SLE_KERNEL_RANGE(4,4,131,94,0,0, 4,5,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(kvm_mmio, + TP_PROTO(int type, int len, u64 gpa, u64 val), + TP_ARGS(type, len, gpa, val), + + TP_FIELDS( + ctf_integer(u32, type, type) + ctf_integer(u32, len, len) + ctf_integer(u64, gpa, gpa) + ctf_integer(u64, val, val) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) \ + || LTTNG_KERNEL_RANGE(4,14,14, 4,15,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(4,14,13,0,1,0, 4,15,0,0,0,0) \ + || LTTNG_KERNEL_RANGE(4,9,77, 4,10,0) \ + || LTTNG_KERNEL_RANGE(4,4,112, 4,5,0) \ + || LTTNG_KERNEL_RANGE(4,1,50, 4,2,0) \ + || LTTNG_KERNEL_RANGE(3,16,52, 3,17,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,144, 3,14,0,0) \ + || LTTNG_KERNEL_RANGE(3,2,97, 3,3,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(4,13,16,38, 4,14,0,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(4,9,65,0,3,0, 4,10,0,0,0,0) \ + || LTTNG_FEDORA_KERNEL_RANGE(4,14,13,300, 4,15,0,0)) + +LTTNG_TRACEPOINT_EVENT(kvm_mmio, + TP_PROTO(int type, int len, u64 gpa, void *val), + TP_ARGS(type, len, gpa, val), + + TP_FIELDS( + ctf_integer(u32, type, type) + ctf_integer(u32, len, len) + ctf_integer(u64, gpa, gpa) + ctf_sequence_hex(unsigned char, val, val, u32, len) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(kvm_mmio, + TP_PROTO(int type, int len, u64 gpa, u64 val), + TP_ARGS(type, len, gpa, val), + + TP_FIELDS( + ctf_integer(u32, type, type) + ctf_integer(u32, len, len) + ctf_integer(u64, gpa, gpa) + ctf_integer(u64, val, val) + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + +#define kvm_fpu_load_symbol \ + {0, "unload"}, \ + {1, "load"} + +LTTNG_TRACEPOINT_EVENT(kvm_fpu, + TP_PROTO(int load), + TP_ARGS(load), + + TP_FIELDS( + ctf_integer(u32, load, load) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,18,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,327,0,0, 3,11,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT(kvm_age_page, + TP_PROTO(ulong gfn, int level, struct kvm_memory_slot *slot, int ref), + TP_ARGS(gfn, level, slot, ref), + + TP_FIELDS( + ctf_integer(u64, hva, + ((gfn - slot->base_gfn) << PAGE_SHIFT) + slot->userspace_addr) + ctf_integer(u64, gfn, gfn) + ctf_integer(u8, level, level) + ctf_integer(u8, referenced, ref) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(kvm_age_page, + TP_PROTO(ulong hva, struct kvm_memory_slot *slot, int ref), + TP_ARGS(hva, slot, ref), + + TP_FIELDS( + ctf_integer(u64, hva, hva) + ctf_integer(u64, gfn, + slot->base_gfn + ((hva - slot->userspace_addr) >> PAGE_SHIFT)) + ctf_integer(u8, referenced, ref) + ) +) +#endif +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) + +#ifdef CONFIG_KVM_ASYNC_PF +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_async_get_page_class, + + TP_PROTO(u64 gva, u64 gfn), + + TP_ARGS(gva, gfn), + + TP_FIELDS( + ctf_integer(__u64, gva, gva) + ctf_integer(u64, gfn, gfn) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_get_page_class, kvm_try_async_get_page, + + TP_PROTO(u64 gva, u64 gfn), + + TP_ARGS(gva, gfn) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_get_page_class, kvm_async_pf_doublefault, + + TP_PROTO(u64 gva, u64 gfn), + + TP_ARGS(gva, gfn) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_async_pf_nopresent_ready, + + TP_PROTO(u64 token, u64 gva), + + TP_ARGS(token, gva), + + TP_FIELDS( + ctf_integer(__u64, token, token) + ctf_integer(__u64, gva, gva) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_not_present, + + TP_PROTO(u64 token, u64 gva), + + TP_ARGS(token, gva) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, + + TP_PROTO(u64 token, u64 gva), + + TP_ARGS(token, gva) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,229,0,0, 3,11,0,0,0,0)) + +LTTNG_TRACEPOINT_EVENT( + kvm_async_pf_completed, + TP_PROTO(unsigned long address, u64 gva), + TP_ARGS(address, gva), + + TP_FIELDS( + ctf_integer(unsigned long, address, address) + ctf_integer(u64, gva, gva) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) */ + +LTTNG_TRACEPOINT_EVENT( + kvm_async_pf_completed, + TP_PROTO(unsigned long address, struct page *page, u64 gva), + TP_ARGS(address, page, gva), + + TP_FIELDS( + ctf_integer(unsigned long, address, address) + ctf_integer(pfn_t, pfn, page ? page_to_pfn(page) : 0) + ctf_integer(u64, gva, gva) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) */ + +#endif + +#endif + +#endif /* LTTNG_TRACE_KVM_MAIN_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lock.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lock.h new file mode 100644 index 000000000000..49e78113d5ee --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lock.h @@ -0,0 +1,138 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#include + +#undef TRACE_SYSTEM +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +#define TRACE_SYSTEM lock +#else +#define TRACE_SYSTEM lockdep +#define TRACE_INCLUDE_FILE lock +#if defined(_TRACE_LOCKDEP_H) +#define LTTNG_TRACE_LOCK_H +#endif +#endif + +#if !defined(LTTNG_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_LOCK_H + +#include +#include + +#ifdef CONFIG_LOCKDEP + +LTTNG_TRACEPOINT_EVENT(lock_acquire, + + TP_PROTO(struct lockdep_map *lock, unsigned int subclass, + int trylock, int read, int check, + struct lockdep_map *next_lock, unsigned long ip), + + TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip), + + TP_FIELDS( + ctf_integer(unsigned int, flags, (trylock ? 1 : 0) | (read ? 2 : 0)) + ctf_string(name, lock->name) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + ctf_integer_hex(void *, lockdep_addr, lock) +#endif + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + +LTTNG_TRACEPOINT_EVENT_CLASS(lock, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip), + + TP_ARGS(lock, ip), + + TP_FIELDS( + ctf_string(name, lock->name) + ctf_integer_hex(void *, lockdep_addr, lock) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(lock, lock_release, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip), + + TP_ARGS(lock, ip) +) + +#ifdef CONFIG_LOCK_STAT + +LTTNG_TRACEPOINT_EVENT_INSTANCE(lock, lock_contended, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip), + + TP_ARGS(lock, ip) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(lock, lock_acquired, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip), + + TP_ARGS(lock, ip) +) + +#endif + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + +LTTNG_TRACEPOINT_EVENT(lock_release, + + TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip), + + TP_ARGS(lock, nested, ip), + + TP_FIELDS( + ctf_string(name, lock->name) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + ctf_integer_hex(void *, lockdep_addr, lock) +#endif + ) +) + +#ifdef CONFIG_LOCK_STAT + +LTTNG_TRACEPOINT_EVENT(lock_contended, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip), + + TP_ARGS(lock, ip), + + TP_FIELDS( + ctf_string(name, lock->name) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + ctf_integer_hex(void *, lockdep_addr, lock) +#endif + ) +) + +LTTNG_TRACEPOINT_EVENT(lock_acquired, + + TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime), + + TP_ARGS(lock, ip, waittime), + + TP_FIELDS( + ctf_string(name, lock->name) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + ctf_integer(s64, wait_nsec, wait_nsec) + ctf_integer_hex(void *, lockdep_addr, lock) +#else + ctf_integer(unsigned long, wait_usec, (unsigned long) waittime) + ctf_integer(unsigned long, wait_nsec_rem, do_div(waittime, NSEC_PER_USEC)) +#endif + ) +) + +#endif + +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + +#endif + +#endif /* LTTNG_TRACE_LOCK_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-statedump.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-statedump.h new file mode 100644 index 000000000000..3bfc28e70bdb --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-statedump.h @@ -0,0 +1,145 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM lttng_statedump + +#if !defined(LTTNG_TRACE_LTTNG_STATEDUMP_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_LTTNG_STATEDUMP_H + +#include +#include +#include +#include +#include + + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) +#define lttng_proc_inum ns.inum +#else +#define lttng_proc_inum proc_inum +#endif + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_start, + TP_PROTO(struct lttng_session *session), + TP_ARGS(session), + TP_FIELDS() +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_end, + TP_PROTO(struct lttng_session *session), + TP_ARGS(session), + TP_FIELDS() +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_process_state, + TP_PROTO(struct lttng_session *session, + struct task_struct *p, + int type, int mode, int submode, int status, + struct pid_namespace *pid_ns), + TP_ARGS(session, p, type, mode, submode, status, pid_ns), + TP_FIELDS( + ctf_integer(pid_t, tid, p->pid) + ctf_integer(pid_t, vtid, pid_ns ? task_pid_nr_ns(p, pid_ns) : 0) + ctf_integer(pid_t, pid, p->tgid) + ctf_integer(pid_t, vpid, pid_ns ? task_tgid_nr_ns(p, pid_ns) : 0) + ctf_integer(pid_t, ppid, + ({ + pid_t ret; + + rcu_read_lock(); + ret = task_tgid_nr(p->real_parent); + rcu_read_unlock(); + ret; + })) + ctf_integer(pid_t, vppid, + ({ + struct task_struct *parent; + pid_t ret = 0; + + if (pid_ns) { + rcu_read_lock(); + parent = rcu_dereference(p->real_parent); + ret = task_tgid_nr_ns(parent, pid_ns); + rcu_read_unlock(); + } + ret; + })) + ctf_array_text(char, name, p->comm, TASK_COMM_LEN) + ctf_integer(int, type, type) + ctf_integer(int, mode, mode) + ctf_integer(int, submode, submode) + ctf_integer(int, status, status) + ctf_integer(int, ns_level, pid_ns ? pid_ns->level : 0) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + ctf_integer(unsigned int, ns_inum, pid_ns ? pid_ns->lttng_proc_inum : 0) +#endif + ctf_integer(unsigned int, cpu, task_cpu(p)) + ) +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_file_descriptor, + TP_PROTO(struct lttng_session *session, + struct task_struct *p, int fd, const char *filename, + unsigned int flags, fmode_t fmode), + TP_ARGS(session, p, fd, filename, flags, fmode), + TP_FIELDS( + ctf_integer(pid_t, pid, p->tgid) + ctf_integer(int, fd, fd) + ctf_integer_oct(unsigned int, flags, flags) + ctf_integer_hex(fmode_t, fmode, fmode) + ctf_string(filename, filename) + ) +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_vm_map, + TP_PROTO(struct lttng_session *session, + struct task_struct *p, struct vm_area_struct *map, + unsigned long inode), + TP_ARGS(session, p, map, inode), + TP_FIELDS( + ctf_integer(pid_t, pid, p->tgid) + ctf_integer_hex(unsigned long, start, map->vm_start) + ctf_integer_hex(unsigned long, end, map->vm_end) + ctf_integer_hex(unsigned long, flags, map->vm_flags) + ctf_integer(unsigned long, inode, inode) + ctf_integer(unsigned long, pgoff, map->vm_pgoff << PAGE_SHIFT) + ) +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_network_interface, + TP_PROTO(struct lttng_session *session, + struct net_device *dev, struct in_ifaddr *ifa), + TP_ARGS(session, dev, ifa), + TP_FIELDS( + ctf_string(name, dev->name) + ctf_integer_network_hex(uint32_t, address_ipv4, + ifa ? ifa->ifa_address : 0U) + ) +) + +LTTNG_TRACEPOINT_EVENT(lttng_statedump_block_device, + TP_PROTO(struct lttng_session *session, + dev_t dev, const char *diskname), + TP_ARGS(session, dev, diskname), + TP_FIELDS( + ctf_integer(dev_t, dev, dev) + ctf_string(diskname, diskname) + ) +) + +/* Called with desc->lock held */ +LTTNG_TRACEPOINT_EVENT(lttng_statedump_interrupt, + TP_PROTO(struct lttng_session *session, + unsigned int irq, const char *chip_name, + struct irqaction *action), + TP_ARGS(session, irq, chip_name, action), + TP_FIELDS( + ctf_integer(unsigned int, irq, irq) + ctf_string(name, chip_name) + ctf_string(action, action->name ? : "") + ) +) + +#endif /* LTTNG_TRACE_LTTNG_STATEDUMP_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-test.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-test.h new file mode 100644 index 000000000000..9f0cffbf0c1b --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng-test.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM lttng_test + +#if !defined(LTTNG_TRACE_LTTNG_TEST_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_LTTNG_TEST_H + +#include +#include +#include + +LTTNG_TRACEPOINT_ENUM( + lttng_test_filter_event_enum, + TP_ENUM_VALUES( + ctf_enum_auto("AUTO: EXPECT 0") + ctf_enum_value("VALUE: 23", 23) + ctf_enum_value("VALUE: 27", 27) + ctf_enum_auto("AUTO: EXPECT 28") + ctf_enum_range("RANGE: 101 TO 303", 101, 303) + ctf_enum_auto("AUTO: EXPECT 304") + ) +) + +LTTNG_TRACEPOINT_EVENT(lttng_test_filter_event, + TP_PROTO(int anint, int netint, long *values, + char *text, size_t textlen, + char *etext, uint32_t * net_values), + TP_ARGS(anint, netint, values, text, textlen, etext, net_values), + TP_FIELDS( + ctf_integer(int, intfield, anint) + ctf_integer_hex(int, intfield2, anint) + ctf_integer(long, longfield, anint) + ctf_integer_network(int, netintfield, netint) + ctf_integer_network_hex(int, netintfieldhex, netint) + ctf_array(long, arrfield1, values, 3) + ctf_array_text(char, arrfield2, text, 10) + ctf_array_network(uint32_t, arrfield3, net_values, 3) + ctf_sequence(char, seqfield1, text, size_t, textlen) + ctf_sequence_text(char, seqfield2, text, size_t, textlen) + ctf_sequence_network(uint32_t, seqfield3, net_values, size_t, 3) + ctf_sequence(long, seqfield4, values, size_t, 3) + ctf_string(stringfield, text) + ctf_string(stringfield2, etext) + ctf_sequence_bitfield(long, bitfield_seq, values, uint8_t, 3) + ctf_array_bitfield(long, bitfield_array, values, 3) + ctf_enum(lttng_test_filter_event_enum, int, enum0, 0) + ctf_enum(lttng_test_filter_event_enum, int, enum23, 23) + ctf_enum(lttng_test_filter_event_enum, int, enum27, 27) + ctf_enum(lttng_test_filter_event_enum, int, enum28, 28) + ctf_enum(lttng_test_filter_event_enum, int, enum202, 202) + ctf_enum(lttng_test_filter_event_enum, int, enum304, 304) + ) +) + +#endif /* LTTNG_TRACE_LTTNG_TEST_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng.h new file mode 100644 index 000000000000..4b021e220d1a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/lttng.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM lttng + +#if !defined(LTTNG_TRACE_LTTNG_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_LTTNG_H + +#include + +LTTNG_TRACEPOINT_EVENT(lttng_logger, + TP_PROTO(const char __user *text, size_t len), + TP_ARGS(text, len), + TP_FIELDS( + ctf_user_sequence_text(char, msg, text, size_t, len) + ) +) + +#endif /* LTTNG_TRACE_LTTNG_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/mm_vmscan.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/mm_vmscan.h new file mode 100644 index 000000000000..e3b698f96b07 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/mm_vmscan.h @@ -0,0 +1,825 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mm_vmscan + +#if !defined(LTTNG_TRACE_MM_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_MM_VMSCAN_H + +#include +#include +#include +#include +#include + +#ifndef _TRACE_VMSCAN_DEF +#define _TRACE_VMSCAN_DEF +#define RECLAIM_WB_ANON 0x0001u +#define RECLAIM_WB_FILE 0x0002u +#define RECLAIM_WB_MIXED 0x0010u +#define RECLAIM_WB_SYNC 0x0004u /* Unused, all reclaim async */ +#define RECLAIM_WB_ASYNC 0x0008u + +#if ((LINUX_VERSION_CODE <= KERNEL_VERSION(3,0,38)) || \ + LTTNG_KERNEL_RANGE(3,1,0, 3,2,0)) +typedef int isolate_mode_t; +#endif + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) + +#include + +#define trace_reclaim_flags(file) ( \ + (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ + (RECLAIM_WB_ASYNC) \ + ) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)) + +#include + +#define trace_reclaim_flags(page) ( \ + (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ + (RECLAIM_WB_ASYNC) \ + ) + +#define trace_shrink_flags(file) \ + ( \ + (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ + (RECLAIM_WB_ASYNC) \ + ) + +#endif + +LTTNG_TRACEPOINT_EVENT(mm_vmscan_kswapd_sleep, + + TP_PROTO(int nid), + + TP_ARGS(nid), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + +LTTNG_TRACEPOINT_EVENT(mm_vmscan_kswapd_wake, + + TP_PROTO(int nid, int zid, int order), + + TP_ARGS(nid, zid, order), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(int, zid, zid) + ctf_integer(int, order, order) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(mm_vmscan_kswapd_wake, + + TP_PROTO(int nid, int order), + + TP_ARGS(nid, order), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(int, order, order) + ) +) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_wakeup_kswapd, + + TP_PROTO(int nid, int zid, int order, gfp_t gfp_flags), + + TP_ARGS(nid, zid, order, gfp_flags), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(int, zid, zid) + ctf_integer(int, order, order) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(mm_vmscan_wakeup_kswapd, + + TP_PROTO(int nid, int zid, int order), + + TP_ARGS(nid, zid, order), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(int, zid, zid) + ctf_integer(int, order, order) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, + + TP_PROTO(int order, gfp_t gfp_flags), + + TP_ARGS(order, gfp_flags), + + TP_FIELDS( + ctf_integer(int, order, order) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, + + TP_PROTO(int order, gfp_t gfp_flags), + + TP_ARGS(order, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, + + TP_PROTO(int order, gfp_t gfp_flags), + + TP_ARGS(order, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, + + TP_PROTO(int order, gfp_t gfp_flags), + + TP_ARGS(order, gfp_flags) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), + + TP_ARGS(order, may_writepage, gfp_flags, classzone_idx), + + TP_FIELDS( + ctf_integer(int, order, order) + ctf_integer(int, may_writepage, may_writepage) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ctf_integer(int, classzone_idx, classzone_idx) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), + + TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), + + TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), + + TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) +) + +#else + +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), + + TP_ARGS(order, may_writepage, gfp_flags), + + TP_FIELDS( + ctf_integer(int, order, order) + ctf_integer(int, may_writepage, may_writepage) + ctf_integer(gfp_t, gfp_flags, gfp_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), + + TP_ARGS(order, may_writepage, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), + + TP_ARGS(order, may_writepage, gfp_flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, + + TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), + + TP_ARGS(order, may_writepage, gfp_flags) +) + +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template, + + TP_PROTO(unsigned long nr_reclaimed), + + TP_ARGS(nr_reclaimed), + + TP_FIELDS( + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end, + + TP_PROTO(unsigned long nr_reclaimed), + + TP_ARGS(nr_reclaimed) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end, + + TP_PROTO(unsigned long nr_reclaimed), + + TP_ARGS(nr_reclaimed) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end, + + TP_PROTO(unsigned long nr_reclaimed), + + TP_ARGS(nr_reclaimed) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_shrink_slab_start, + + mm_vmscan_shrink_slab_start, + + TP_PROTO(struct shrinker *shr, struct shrink_control *sc, + long nr_objects_to_shrink, unsigned long cache_items, + unsigned long long delta, unsigned long total_scan, + int priority), + + TP_ARGS(shr, sc, nr_objects_to_shrink, cache_items, delta, total_scan, + priority), + + TP_FIELDS( + ctf_integer_hex(struct shrinker *, shr, shr) + ctf_integer_hex(void *, shrink, shr->scan_objects) + ctf_integer(int, nid, sc->nid) + ctf_integer(long, nr_objects_to_shrink, nr_objects_to_shrink) + ctf_integer(gfp_t, gfp_flags, sc->gfp_mask) + ctf_integer(unsigned long, cache_items, cache_items) + ctf_integer(unsigned long long, delta, delta) + ctf_integer(unsigned long, total_scan, total_scan) + ctf_integer(int, priority, priority) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_shrink_slab_start, + + mm_vmscan_shrink_slab_start, + + TP_PROTO(struct shrinker *shr, struct shrink_control *sc, + long nr_objects_to_shrink, unsigned long pgs_scanned, + unsigned long lru_pgs, unsigned long cache_items, + unsigned long long delta, unsigned long total_scan), + + TP_ARGS(shr, sc, nr_objects_to_shrink, pgs_scanned, lru_pgs, + cache_items, delta, total_scan), + + TP_FIELDS( + ctf_integer_hex(struct shrinker *, shr, shr) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + ctf_integer_hex(void *, shrink, shr->scan_objects) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + ctf_integer_hex(void *, shrink, shr->shrink) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + ctf_integer(long, nr_objects_to_shrink, nr_objects_to_shrink) + ctf_integer(gfp_t, gfp_flags, sc->gfp_mask) + ctf_integer(unsigned long, pgs_scanned, pgs_scanned) + ctf_integer(unsigned long, lru_pgs, lru_pgs) + ctf_integer(unsigned long, cache_items, cache_items) + ctf_integer(unsigned long long, delta, delta) + ctf_integer(unsigned long, total_scan, total_scan) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_shrink_slab_end, + + mm_vmscan_shrink_slab_end, + + TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval, + long unused_scan_cnt, long new_scan_cnt, long total_scan), + + TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt, + total_scan), + + TP_FIELDS( + ctf_integer_hex(struct shrinker *, shr, shr) + ctf_integer(int, nid, nid) + ctf_integer_hex(void *, shrink, shr->scan_objects) + ctf_integer(long, unused_scan, unused_scan_cnt) + ctf_integer(long, new_scan, new_scan_cnt) + ctf_integer(int, retval, shrinker_retval) + ctf_integer(long, total_scan, total_scan) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_MAP(mm_shrink_slab_end, + + mm_vmscan_shrink_slab_end, + + TP_PROTO(struct shrinker *shr, int shrinker_retval, + long unused_scan_cnt, long new_scan_cnt), + + TP_ARGS(shr, shrinker_retval, unused_scan_cnt, new_scan_cnt), + + TP_FIELDS( + ctf_integer_hex(struct shrinker *, shr, shr) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + ctf_integer_hex(void *, shrink, shr->scan_objects) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + ctf_integer_hex(void *, shrink, shr->shrink) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + ctf_integer(long, unused_scan, unused_scan_cnt) + ctf_integer(long, new_scan, new_scan_cnt) + ctf_integer(int, retval, shrinker_retval) + ctf_integer(long, total_scan, new_scan_cnt - unused_scan_cnt) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_isolate, + + TP_PROTO(int classzone_idx, + int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_skipped, + unsigned long nr_taken, + isolate_mode_t isolate_mode, + int lru + ), + + TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_skipped, + nr_taken, isolate_mode, lru + ), + + TP_FIELDS( + ctf_integer(int, classzone_idx, classzone_idx) + ctf_integer(int, order, order) + ctf_integer(unsigned long, nr_requested, nr_requested) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_skipped, nr_skipped) + ctf_integer(unsigned long, nr_taken, nr_taken) + ctf_integer(isolate_mode_t, isolate_mode, isolate_mode) + ctf_integer(int, lru, lru) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_lru_isolate_template, + + TP_PROTO(int classzone_idx, + int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, + isolate_mode_t isolate_mode, + int file + ), + + TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, + isolate_mode, file + ), + + + TP_FIELDS( + ctf_integer(int, classzone_idx, classzone_idx) + ctf_integer(int, order, order) + ctf_integer(unsigned long, nr_requested, nr_requested) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_taken, nr_taken) + ctf_integer(isolate_mode_t, isolate_mode, isolate_mode) + ctf_integer(int, file, file) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_lru_isolate_template, mm_vmscan_lru_isolate, + + TP_PROTO(int classzone_idx, + int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, + isolate_mode_t isolate_mode, + int file + ), + + TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, + isolate_mode, file + ) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate, + + TP_PROTO(int classzone_idx, + int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, + isolate_mode_t isolate_mode, + int file + ), + + TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_taken, + isolate_mode, file + ) +) +#else +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_lru_isolate_template, + + TP_PROTO(int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + unsigned long nr_lumpy_taken, + unsigned long nr_lumpy_dirty, + unsigned long nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode_t isolate_mode +#else + isolate_mode_t isolate_mode, + int file +#endif + ), + + TP_ARGS(order, nr_requested, nr_scanned, nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode +#else + isolate_mode, file +#endif + ), + + + TP_FIELDS( + ctf_integer(int, order, order) + ctf_integer(unsigned long, nr_requested, nr_requested) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_taken, nr_taken) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + ctf_integer(unsigned long, nr_lumpy_taken, nr_lumpy_taken) + ctf_integer(unsigned long, nr_lumpy_dirty, nr_lumpy_dirty) + ctf_integer(unsigned long, nr_lumpy_failed, nr_lumpy_failed) +#endif + ctf_integer(isolate_mode_t, isolate_mode, isolate_mode) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + ctf_integer(int, file, file) +#endif + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_lru_isolate_template, mm_vmscan_lru_isolate, + + TP_PROTO(int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + unsigned long nr_lumpy_taken, + unsigned long nr_lumpy_dirty, + unsigned long nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode_t isolate_mode +#else + isolate_mode_t isolate_mode, + int file +#endif + ), + + TP_ARGS(order, nr_requested, nr_scanned, nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode +#else + isolate_mode, file +#endif + ) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate, + + TP_PROTO(int order, + unsigned long nr_requested, + unsigned long nr_scanned, + unsigned long nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + unsigned long nr_lumpy_taken, + unsigned long nr_lumpy_dirty, + unsigned long nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode_t isolate_mode +#else + isolate_mode_t isolate_mode, + int file +#endif + ), + + TP_ARGS(order, nr_requested, nr_scanned, nr_taken, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) + nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) + isolate_mode +#else + isolate_mode, file +#endif + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(int, reclaim_flags, trace_reclaim_flags( + page_is_file_lru(page))) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(int, reclaim_flags, trace_reclaim_flags( + page_is_file_cache(page))) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_writepage, + + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(int, reclaim_flags, trace_reclaim_flags(page)) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(mm_vmscan_writepage, + + TP_PROTO(struct page *page, + int reclaim_flags), + + TP_ARGS(page, reclaim_flags), + + TP_FIELDS( + ctf_integer_hex(struct page *, page, page) + ctf_integer(int, reclaim_flags, reclaim_flags) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(int nid, + unsigned long nr_scanned, unsigned long nr_reclaimed, + struct reclaim_stat *stat, int priority, int file), + + TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(unsigned long, nr_dirty, stat->nr_dirty) + ctf_integer(unsigned long, nr_writeback, stat->nr_writeback) + ctf_integer(unsigned long, nr_congested, stat->nr_congested) + ctf_integer(unsigned long, nr_immediate, stat->nr_immediate) + ctf_integer(unsigned long, nr_activate_anon, stat->nr_activate[0]) + ctf_integer(unsigned long, nr_activate_file, stat->nr_activate[1]) + ctf_integer(unsigned long, nr_ref_keep, stat->nr_ref_keep) + ctf_integer(unsigned long, nr_unmap_fail, stat->nr_unmap_fail) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, trace_reclaim_flags(file)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(int nid, + unsigned long nr_scanned, unsigned long nr_reclaimed, + struct reclaim_stat *stat, int priority, int file), + + TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(unsigned long, nr_dirty, stat->nr_dirty) + ctf_integer(unsigned long, nr_writeback, stat->nr_writeback) + ctf_integer(unsigned long, nr_congested, stat->nr_congested) + ctf_integer(unsigned long, nr_immediate, stat->nr_immediate) + ctf_integer(unsigned long, nr_activate, stat->nr_activate) + ctf_integer(unsigned long, nr_ref_keep, stat->nr_ref_keep) + ctf_integer(unsigned long, nr_unmap_fail, stat->nr_unmap_fail) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, trace_shrink_flags(file)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(int nid, + unsigned long nr_scanned, unsigned long nr_reclaimed, + unsigned long nr_dirty, unsigned long nr_writeback, + unsigned long nr_congested, unsigned long nr_immediate, + unsigned long nr_activate, unsigned long nr_ref_keep, + unsigned long nr_unmap_fail, + int priority, int file), + + TP_ARGS(nid, nr_scanned, nr_reclaimed, nr_dirty, nr_writeback, + nr_congested, nr_immediate, nr_activate, nr_ref_keep, + nr_unmap_fail, priority, file), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(unsigned long, nr_dirty, nr_dirty) + ctf_integer(unsigned long, nr_writeback, nr_writeback) + ctf_integer(unsigned long, nr_congested, nr_congested) + ctf_integer(unsigned long, nr_immediate, nr_immediate) + ctf_integer(unsigned long, nr_activate, nr_activate) + ctf_integer(unsigned long, nr_ref_keep, nr_ref_keep) + ctf_integer(unsigned long, nr_unmap_fail, nr_unmap_fail) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, trace_shrink_flags(file)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(int nid, + unsigned long nr_scanned, unsigned long nr_reclaimed, + int priority, int file), + + TP_ARGS(nid, nr_scanned, nr_reclaimed, priority, file), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, trace_shrink_flags(file)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(struct zone *zone, + unsigned long nr_scanned, unsigned long nr_reclaimed, + int priority, int file), + + TP_ARGS(zone, nr_scanned, nr_reclaimed, priority, file), + + TP_FIELDS( + ctf_integer(int, nid, zone_to_nid(zone)) + ctf_integer(int, zid, zone_idx(zone)) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, trace_shrink_flags(file)) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_shrink_inactive, + + TP_PROTO(int nid, int zid, + unsigned long nr_scanned, unsigned long nr_reclaimed, + int priority, int reclaim_flags), + + TP_ARGS(nid, zid, nr_scanned, nr_reclaimed, priority, reclaim_flags), + + TP_FIELDS( + ctf_integer(int, nid, nid) + ctf_integer(int, zid, zid) + ctf_integer(unsigned long, nr_scanned, nr_scanned) + ctf_integer(unsigned long, nr_reclaimed, nr_reclaimed) + ctf_integer(int, priority, priority) + ctf_integer(int, reclaim_flags, reclaim_flags) + ) +) +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(replace_swap_token, + + mm_vmscan_replace_swap_token, + + TP_PROTO(struct mm_struct *old_mm, + struct mm_struct *new_mm), + + TP_ARGS(old_mm, new_mm), + + TP_FIELDS( + ctf_integer_hex(struct mm_struct *, old_mm, old_mm) + ctf_integer(unsigned int, old_prio, old_mm ? old_mm->token_priority : 0) + ctf_integer_hex(struct mm_struct *, new_mm, new_mm) + ctf_integer(unsigned int, new_prio, new_mm->token_priority) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(mm_vmscan_put_swap_token_template, + TP_PROTO(struct mm_struct *swap_token_mm), + + TP_ARGS(swap_token_mm), + + TP_FIELDS( + ctf_integer_hex(struct mm_struct*, swap_token_mm, swap_token_mm) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(mm_vmscan_put_swap_token_template, put_swap_token, + + mm_vmscan_put_swap_token, + + TP_PROTO(struct mm_struct *swap_token_mm), + TP_ARGS(swap_token_mm) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(mm_vmscan_put_swap_token_template, disable_swap_token, + + mm_vmscan_disable_swap_token, + + TP_PROTO(struct mm_struct *swap_token_mm), + TP_ARGS(swap_token_mm) +) + +LTTNG_TRACEPOINT_EVENT_MAP(update_swap_token_priority, + + mm_vmscan_update_swap_token_priority, + + TP_PROTO(struct mm_struct *mm, + unsigned int old_prio, + struct mm_struct *swap_token_mm), + + TP_ARGS(mm, old_prio, swap_token_mm), + + TP_FIELDS( + ctf_integer_hex(struct mm_struct *, mm, mm) + ctf_integer(unsigned int, old_prio, old_prio) + ctf_integer(unsigned int, new_prio, mm->token_priority) + ctf_integer_hex(struct mm_struct *, swap_token_mm, swap_token_mm) + ctf_integer(unsigned int, swap_token_prio, swap_token_mm ? swap_token_mm->token_priority : 0) + ) +) +#endif + +#endif /* LTTNG_TRACE_MM_VMSCAN_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/module.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/module.h new file mode 100644 index 000000000000..febe8d206b07 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/module.h @@ -0,0 +1,125 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Because linux/module.h has tracepoints in the header, and ftrace.h + * eventually includes this file, define_trace.h includes linux/module.h + * But we do not want the module.h to override the TRACE_SYSTEM macro + * variable that define_trace.h is processing, so we only set it + * when module events are being processed, which would happen when + * CREATE_TRACE_POINTS is defined. + */ +#ifdef CREATE_TRACE_POINTS +#undef TRACE_SYSTEM +#define TRACE_SYSTEM module +#endif + +#if !defined(LTTNG_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_MODULE_H + +#include +#include + +#ifdef CONFIG_MODULES + +#ifndef _TRACE_MODULE_DEF +#define _TRACE_MODULE_DEF +struct module; + +#endif + +LTTNG_TRACEPOINT_EVENT(module_load, + + TP_PROTO(struct module *mod), + + TP_ARGS(mod), + + TP_FIELDS( + ctf_integer(unsigned int, taints, mod->taints) + ctf_string(name, mod->name) + ) +) + +LTTNG_TRACEPOINT_EVENT(module_free, + + TP_PROTO(struct module *mod), + + TP_ARGS(mod), + + TP_FIELDS( + ctf_string(name, mod->name) + ) +) + +#ifdef CONFIG_MODULE_UNLOAD +/* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ + +LTTNG_TRACEPOINT_EVENT_CLASS(module_refcnt, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct module *mod, unsigned long ip), + + TP_ARGS(mod, ip), +#else + TP_PROTO(struct module *mod, unsigned long ip, int refcnt), + + TP_ARGS(mod, ip, refcnt), +#endif + + TP_FIELDS( + ctf_integer(unsigned long, ip, ip) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) + ctf_integer(int, refcnt, atomic_read(&mod->refcnt)) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + ctf_integer(int, refcnt, __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs)) +#else + ctf_integer(int, refcnt, refcnt) +#endif + ctf_string(name, mod->name) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_get, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct module *mod, unsigned long ip), + + TP_ARGS(mod, ip) +#else + TP_PROTO(struct module *mod, unsigned long ip, int refcnt), + + TP_ARGS(mod, ip, refcnt) +#endif +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_put, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct module *mod, unsigned long ip), + + TP_ARGS(mod, ip) +#else + TP_PROTO(struct module *mod, unsigned long ip, int refcnt), + + TP_ARGS(mod, ip, refcnt) +#endif +) +#endif /* CONFIG_MODULE_UNLOAD */ + +LTTNG_TRACEPOINT_EVENT(module_request, + + TP_PROTO(char *name, bool wait, unsigned long ip), + + TP_ARGS(name, wait, ip), + + TP_FIELDS( + ctf_integer(unsigned long, ip, ip) + ctf_integer(bool, wait, wait) + ctf_string(name, name) + ) +) + +#endif /* CONFIG_MODULES */ + +#endif /* LTTNG_TRACE_MODULE_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/napi.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/napi.h new file mode 100644 index 000000000000..57fd6ee279e3 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/napi.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM napi + +#if !defined(LTTNG_TRACE_NAPI_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_NAPI_H + +#include +#include +#include + +#define NO_DEV "(no_device)" + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + +LTTNG_TRACEPOINT_EVENT(napi_poll, + + TP_PROTO(struct napi_struct *napi, int work, int budget), + + TP_ARGS(napi, work, budget), + + TP_FIELDS( + ctf_integer_hex(struct napi_struct *, napi, napi) + ctf_string(dev_name, napi->dev ? napi->dev->name : NO_DEV) + ctf_integer(int, work, work) + ctf_integer(int, budget, budget) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(napi_poll, + + TP_PROTO(struct napi_struct *napi), + + TP_ARGS(napi), + + TP_FIELDS( + ctf_integer_hex(struct napi_struct *, napi, napi) + ctf_string(dev_name, napi->dev ? napi->dev->name : NO_DEV) + ) +) + +#endif + +#undef NO_DEV + +#endif /* LTTNG_TRACE_NAPI_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/net.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/net.h new file mode 100644 index 000000000000..878926365c5e --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/net.h @@ -0,0 +1,571 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM net + +#if !defined(LTTNG_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_NET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef ONCE_LTTNG_NET_H +#define ONCE_LTTNG_NET_H + +static inline unsigned char __has_network_hdr(struct sk_buff *skb) +{ + /* + * If the header is not set yet, the network header will point + * to the head. + */ + return skb_network_header(skb) != skb->head; +} + +static struct lttng_event_field emptyfields[] = { +}; + +/* Structures for transport headers. */ + +static struct lttng_event_field tcpfields[] = { + [0] = { + .name = "source_port", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [1] = { + .name = "dest_port", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [2] = { + .name = "seq", + .type = __type_integer(uint32_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [3] = { + .name = "ack_seq", + .type = __type_integer(uint32_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [4] = { + .name = "data_offset", + .type = __type_integer(uint8_t, 4, 4, 0, + __BIG_ENDIAN, 10, none), + }, + [5] = { + .name = "reserved", + .type = __type_integer(uint8_t, 3, 1, 0, + __BIG_ENDIAN, 10, none), + }, + [6] = { + .name = "flags", + .type = __type_integer(uint8_t, 9, 1, 0, + __BIG_ENDIAN, 16, none), + }, + [7] = { + .name = "window_size", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [8] = { + .name = "checksum", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + }, + [9] = { + .name = "urg_ptr", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, +}; + +static struct lttng_event_field transport_fields[] = { + [0] = { + .name = "unknown", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(emptyfields), + .u._struct.fields = emptyfields, + }, + }, + [1] = { + .name = "tcp", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(tcpfields), + .u._struct.fields = tcpfields, + }, + }, +}; + +enum transport_header_types { + TH_NONE = 0, + TH_TCP = 1, +}; + +static inline enum transport_header_types __get_transport_header_type(struct sk_buff *skb) +{ + if (__has_network_hdr(skb)) { + /* + * When both transport and network headers are set, + * transport header is greater than network header, + * otherwise it points to head. + */ + if (skb->transport_header > skb->network_header) { + /* + * Get the transport protocol from the network + * header's data. This method works both for + * sent and received packets. + */ + if ((skb->protocol == htons(ETH_P_IP) && + ip_hdr(skb)->protocol == IPPROTO_TCP) || + (skb->protocol == htons(ETH_P_IPV6) && + ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)) + return TH_TCP; + } + /* Fallthrough for other cases where header is not TCP. */ + } + return TH_NONE; +} + +static struct lttng_enum_entry proto_transport_enum_entries[] = { + [0] = { + .start = { .value = 0, .signedness = 0, }, + .end = { .value = IPPROTO_TCP - 1, .signedness = 0, }, + .string = "_unknown", + }, + [1] = { + .start = { .value = IPPROTO_TCP, .signedness = 0, }, + .end = { .value = IPPROTO_TCP, .signedness = 0, }, + .string = "_tcp", + }, + [2] = { + .start = { .value = IPPROTO_TCP + 1, .signedness = 0, }, + .end = { .value = 255, .signedness = 0, }, + .string = "_unknown", + }, +}; + +static const struct lttng_enum_desc proto_transport_header_type = { + .name = "proto_transport_header_type", + .entries = proto_transport_enum_entries, + .nr_entries = ARRAY_SIZE(proto_transport_enum_entries), +}; + +static struct lttng_enum_entry transport_enum_entries[] = { + [0] = { + .start = { .value = TH_NONE, .signedness = 0, }, + .end = { .value = TH_NONE, .signedness = 0, }, + .string = "_unknown", + }, + [1] = { + .start = { .value = TH_TCP, .signedness = 0, }, + .end = { .value = TH_TCP, .signedness = 0, }, + .string = "_tcp", + }, +}; + +static const struct lttng_enum_desc transport_header_type = { + .name = "transport_header_type", + .entries = transport_enum_entries, + .nr_entries = ARRAY_SIZE(transport_enum_entries), +}; + +/* Structures for network headers. */ + +static struct lttng_event_field ipv4fields[] = { + [0] = { + .name = "version", + .type = __type_integer(uint8_t, 4, 4, 0, + __BIG_ENDIAN, 10, none), + }, + [1] = { + .name = "ihl", + .type = __type_integer(uint8_t, 4, 4, 0, + __BIG_ENDIAN, 10, none), + }, + [2] = { + .name = "tos", + .type = __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [3] = { + .name = "tot_len", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [4] = { + .name = "id", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + }, + [5] = { + .name = "frag_off", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [6] = { + .name = "ttl", + .type = __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [7] = { + .name = "protocol", + .type = { + .atype = atype_enum, + .u.basic.enumeration.desc = + &proto_transport_header_type, + .u.basic.enumeration.container_type = { + .size = 8, + .alignment = 8, + .signedness = 0, + .reverse_byte_order = + __BIG_ENDIAN != __BYTE_ORDER, + .base = 10, + .encoding = lttng_encode_none, + }, + }, + }, + [8] = { + .name = "checksum", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + }, + [9] = { + .name = "saddr", + .type = { + .atype = atype_array, + .u.array.elem_type = + __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + .u.array.length = 4, + .u.array.elem_alignment = lttng_alignof(uint8_t), + }, + }, + [10] = { + .name = "daddr", + .type = { + .atype = atype_array, + .u.array.elem_type = + __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + .u.array.length = 4, + .u.array.elem_alignment = lttng_alignof(uint8_t), + }, + }, + [11] = { + .name = "transport_header_type", + .type = { + .atype = atype_enum, + .u.basic.enumeration.desc = &transport_header_type, + .u.basic.enumeration.container_type = { + .size = 8, + .alignment = 8, + .signedness = 0, + .reverse_byte_order = 0, + .base = 10, + .encoding = lttng_encode_none, + }, + }, + }, + [12] = { + .name = "transport_header", + .type = { + .atype = atype_variant, + .u.variant.tag_name = "transport_header_type", + .u.variant.choices = transport_fields, + .u.variant.nr_choices = ARRAY_SIZE(transport_fields), + }, + }, +}; + +static struct lttng_event_field ipv6fields[] = { + [0] = { + .name = "version", + .type = __type_integer(uint8_t, 4, 4, 0, + __BIG_ENDIAN, 10, none), + }, + [1] = { + .name = "prio", + .type = __type_integer(uint8_t, 4, 4, 0, + __BIG_ENDIAN, 10, none), + }, + [2] = { + .name = "flow_lbl", + .type = { + .atype = atype_array, + .u.array.elem_type = + __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + .u.array.length = 3, + .u.array.elem_alignment = lttng_alignof(uint8_t), + }, + }, + [3] = { + .name = "payload_len", + .type = __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [4] = { + .name = "nexthdr", + .type = { + .atype = atype_enum, + .u.basic.enumeration.desc = + &proto_transport_header_type, + .u.basic.enumeration.container_type = { + .size = 8, + .alignment = 8, + .signedness = 0, + .reverse_byte_order = + __BIG_ENDIAN != __BYTE_ORDER, + .base = 10, + .encoding = lttng_encode_none, + }, + }, + }, + [5] = { + .name = "hop_limit", + .type = __type_integer(uint8_t, 0, 0, 0, + __BIG_ENDIAN, 10, none), + }, + [6] = { + .name = "saddr", + .type = { + .atype = atype_array, + .u.array.elem_type = + __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + .u.array.length = 8, + .u.array.elem_alignment = lttng_alignof(uint16_t), + }, + }, + [7] = { + .name = "daddr", + .type = { + .atype = atype_array, + .u.array.elem_type = + __type_integer(uint16_t, 0, 0, 0, + __BIG_ENDIAN, 16, none), + .u.array.length = 8, + .u.array.elem_alignment = lttng_alignof(uint16_t), + }, + }, + [8] = { + .name = "transport_header_type", + .type = { + .atype = atype_enum, + .u.basic.enumeration.desc = &transport_header_type, + .u.basic.enumeration.container_type = { + .size = 8, + .alignment = 8, + .signedness = 0, + .reverse_byte_order = 0, + .base = 10, + .encoding = lttng_encode_none, + }, + }, + }, + [9] = { + .name = "transport_header", + .type = { + .atype = atype_variant, + .u.variant.tag_name = "transport_header_type", + .u.variant.choices = transport_fields, + .u.variant.nr_choices = ARRAY_SIZE(transport_fields), + }, + }, +}; + +static struct lttng_event_field network_fields[] = { + [0] = { + .name = "unknown", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = 0, + .u._struct.fields = emptyfields, + }, + }, + [1] = { + .name = "ipv4", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(ipv4fields), + .u._struct.fields = ipv4fields, + }, + }, + [2] = { + .name = "ipv6", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(ipv6fields), + .u._struct.fields = ipv6fields, + }, + }, +}; + +enum network_header_types { + NH_NONE, + NH_IPV4, + NH_IPV6, +}; + +static inline unsigned char __get_network_header_type(struct sk_buff *skb) +{ + if (__has_network_hdr(skb)) { + if (skb->protocol == htons(ETH_P_IPV6)) + return NH_IPV6; + else if (skb->protocol == htons(ETH_P_IP)) + return NH_IPV4; + /* Fallthrough for other header types. */ + } + return NH_NONE; +} + +#endif + +LTTNG_TRACEPOINT_ENUM(net_network_header, + TP_ENUM_VALUES( + ctf_enum_value("_unknown", NH_NONE) + ctf_enum_value("_ipv4", NH_IPV4) + ctf_enum_value("_ipv6", NH_IPV6) + ) +) + +LTTNG_TRACEPOINT_EVENT(net_dev_xmit, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,40)) + TP_PROTO(struct sk_buff *skb, + int rc, + struct net_device *dev, + unsigned int skb_len), + + TP_ARGS(skb, rc, dev, skb_len), +#else + TP_PROTO(struct sk_buff *skb, + int rc), + + TP_ARGS(skb, rc), +#endif + + TP_FIELDS( + ctf_integer_hex(void *, skbaddr, skb) + ctf_integer(int, rc, rc) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,40)) + ctf_integer(unsigned int, len, skb_len) + ctf_string(name, dev->name) +#else + ctf_integer(unsigned int, len, skb->len) + ctf_string(name, skb->dev->name) +#endif + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(net_dev_template, + + TP_PROTO(struct sk_buff *skb), + + TP_ARGS(skb), + + TP_FIELDS( + ctf_integer_hex(void *, skbaddr, skb) + ctf_integer(unsigned int, len, skb->len) + ctf_string(name, skb->dev->name) + ctf_enum(net_network_header, unsigned char, + network_header_type, __get_network_header_type(skb)) + ctf_custom_field( + ctf_custom_type( + .atype = atype_variant, + .u.variant.tag_name = "network_header_type", + .u.variant.choices = network_fields, + .u.variant.nr_choices = + ARRAY_SIZE(network_fields), + ), + network_header, + ctf_custom_code( + bool has_network_header = false; + + /* Copy the network header. */ + switch (__get_network_header_type(skb)) { + case NH_IPV4: { + ctf_align(uint16_t) + ctf_array_type(uint8_t, ip_hdr(skb), + sizeof(struct iphdr)) + has_network_header = true; + break; + } + case NH_IPV6: { + ctf_align(uint16_t) + ctf_array_type(uint8_t, ipv6_hdr(skb), + sizeof(struct ipv6hdr)) + has_network_header = true; + break; + } + default: + /* + * For any other network header + * type, there is nothing to do. + */ + break; + } + + if (has_network_header) { + enum transport_header_types th_type = + __get_transport_header_type(skb); + + /* Transport header type field. */ + ctf_integer_type(unsigned char, th_type) + + /* Copy the transport header. */ + if (th_type == TH_TCP) { + ctf_align(uint32_t) + ctf_array_type(uint8_t, tcp_hdr(skb), + sizeof(struct tcphdr)) + } + /* + * For any other transport header type, + * there is nothing to do. + */ + } + ) + ) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(net_dev_template, net_dev_queue, + + TP_PROTO(struct sk_buff *skb), + + TP_ARGS(skb) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_template, + + netif_receive_skb, + + net_if_receive_skb, + + TP_PROTO(struct sk_buff *skb), + + TP_ARGS(skb) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_template, + + netif_rx, + + net_if_rx, + + TP_PROTO(struct sk_buff *skb), + + TP_ARGS(skb) +) +#endif /* LTTNG_TRACE_NET_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/power.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/power.h new file mode 100644 index 000000000000..2146a377b094 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/power.h @@ -0,0 +1,282 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM power + +#if !defined(LTTNG_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_POWER_H + +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) +LTTNG_TRACEPOINT_EVENT_CLASS(power_cpu, + + TP_PROTO(unsigned int state, unsigned int cpu_id), + + TP_ARGS(state, cpu_id), + + TP_FIELDS( + ctf_integer(u32, state, state) + ctf_integer(u32, cpu_id, cpu_id) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_cpu, cpu_idle, + + power_cpu_idle, + + TP_PROTO(unsigned int state, unsigned int cpu_id), + + TP_ARGS(state, cpu_id) +) + +/* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */ +#ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING +#define _PWR_EVENT_AVOID_DOUBLE_DEFINING + +#define PWR_EVENT_EXIT -1 +#endif + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_cpu, cpu_frequency, + + power_cpu_frequency, + + TP_PROTO(unsigned int frequency, unsigned int cpu_id), + + TP_ARGS(frequency, cpu_id) +) + +LTTNG_TRACEPOINT_EVENT_MAP(machine_suspend, + + power_machine_suspend, + + TP_PROTO(unsigned int state), + + TP_ARGS(state), + + TP_FIELDS( + ctf_integer(u32, state, state) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(power_wakeup_source, + + TP_PROTO(const char *name, unsigned int state), + + TP_ARGS(name, state), + + TP_FIELDS( + ctf_string(name, name) + ctf_integer(u64, state, state) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_wakeup_source, wakeup_source_activate, + + power_wakeup_source_activate, + + TP_PROTO(const char *name, unsigned int state), + + TP_ARGS(name, state) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_wakeup_source, wakeup_source_deactivate, + + power_wakeup_source_deactivate, + + TP_PROTO(const char *name, unsigned int state), + + TP_ARGS(name, state) +) +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) +#undef CONFIG_EVENT_POWER_TRACING_DEPRECATED +#define CONFIG_EVENT_POWER_TRACING_DEPRECATED +#define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED +#endif + +#ifdef CONFIG_EVENT_POWER_TRACING_DEPRECATED + +/* + * The power events are used for cpuidle & suspend (power_start, power_end) + * and for cpufreq (power_frequency) + */ +LTTNG_TRACEPOINT_EVENT_CLASS(power, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), + + TP_ARGS(type, state, cpu_id), +#else + TP_PROTO(unsigned int type, unsigned int state), + + TP_ARGS(type, state), +#endif + + TP_FIELDS( + ctf_integer(u64, type, type) + ctf_integer(u64, state, state) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + ctf_integer(u64, cpu_id, cpu_id) +#endif + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(power, power_start, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), + + TP_ARGS(type, state, cpu_id) +#else + TP_PROTO(unsigned int type, unsigned int state), + + TP_ARGS(type, state) +#endif +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(power, power_frequency, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), + + TP_ARGS(type, state, cpu_id) +#else + TP_PROTO(unsigned int type, unsigned int state), + + TP_ARGS(type, state) +#endif +) + +LTTNG_TRACEPOINT_EVENT(power_end, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + TP_PROTO(unsigned int cpu_id), + + TP_ARGS(cpu_id), +#else + TP_PROTO(int dummy), + + TP_ARGS(dummy), +#endif + + TP_FIELDS( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + ctf_integer(u64, cpu_id, cpu_id) +#else + ctf_integer(u64, dummy, 0xffff) +#endif + ) +) + +/* Deprecated dummy functions must be protected against multi-declartion */ +#ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED +#define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED + +enum { + POWER_NONE = 0, + POWER_CSTATE = 1, + POWER_PSTATE = 2, +}; +#endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ + +#else /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ + +#ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED +#define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED +enum { + POWER_NONE = 0, + POWER_CSTATE = 1, + POWER_PSTATE = 2, +}; + +/* These dummy declaration have to be ripped out when the deprecated + events get removed */ +static inline void trace_power_start(u64 type, u64 state, u64 cpuid) {}; +static inline void trace_power_end(u64 cpuid) {}; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +static inline void trace_power_start_rcuidle(u64 type, u64 state, u64 cpuid) {}; +static inline void trace_power_end_rcuidle(u64 cpuid) {}; +#endif +static inline void trace_power_frequency(u64 type, u64 state, u64 cpuid) {}; +#endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ + +#endif /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +/* + * The clock events are used for clock enable/disable and for + * clock rate change + */ +LTTNG_TRACEPOINT_EVENT_CLASS(power_clock, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id), + + TP_FIELDS( + ctf_string(name, name) + ctf_integer(u64, state, state) + ctf_integer(u64, cpu_id, cpu_id) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_clock, clock_enable, + + power_clock_enable, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_clock, clock_disable, + + power_clock_disable, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(power_clock, clock_set_rate, + + power_clock_set_rate, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id) +) + +/* + * The power domain events are used for power domains transitions + */ +LTTNG_TRACEPOINT_EVENT_CLASS(power_domain, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id), + + TP_FIELDS( + ctf_string(name, name) + ctf_integer(u64, state, state) + ctf_integer(u64, cpu_id, cpu_id) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(power_domain, power_domain_target, + + TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), + + TP_ARGS(name, state, cpu_id) +) +#endif + +#endif /* LTTNG_TRACE_POWER_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/preemptirq.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/preemptirq.h new file mode 100644 index 000000000000..2fc81177cc3d --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/preemptirq.h @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifdef CONFIG_PREEMPTIRQ_EVENTS + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM preemptirq + +#if !defined(LTTNG_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_PREEMPTIRQ_H + +#include +#include +#include +#include + +/* + * The preemptirq probe is built when CONFIG_PREEMPTIRQ_EVENTS is defined. + */ + +LTTNG_TRACEPOINT_EVENT_CLASS(preemptirq_template, + + TP_PROTO(unsigned long ip, unsigned long parent_ip), + + TP_ARGS(ip, parent_ip), + + TP_FIELDS( + ctf_integer_hex(unsigned long, caller, ip) + ctf_integer_hex(unsigned long, parent, parent_ip) + ) +) + +/* + * Tracing of irq enable / disable events is enabled + * on >= 4.19 when CONFIG_TRACE_IRQFLAGS is defined. + * on previous kernels when CONFIG_PROVE_LOCKING is NOT defined. + */ +#if defined(CONFIG_TRACE_IRQFLAGS) +#define LTTNG_TRACE_IRQ +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0) && \ + !defined(CONFIG_PROVE_LOCKING)) +#define LTTNG_TRACE_IRQ +#endif + +#ifdef LTTNG_TRACE_IRQ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, irq_disable, + + preemptirq_irq_disable, + + TP_PROTO(unsigned long ip, unsigned long parent_ip), + + TP_ARGS(ip, parent_ip) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, irq_enable, + + preemptirq_irq_enable, + + TP_PROTO(unsigned long ip, unsigned long parent_ip), + + TP_ARGS(ip, parent_ip) +) +#endif /* LTTNG_TRACE_IRQ */ + +/* + * Tracing of preempt enable / disable events is enabled + * on >= 4.19 when CONFIG_TRACE_PREEMPT_TOGGLE is defined. + * on previous kernels when CONFIG_DEBUG_PREEMPT is defined. + */ +#if defined(CONFIG_TRACE_PREEMPT_TOGGLE) +#define LTTNG_TRACE_PREEMPT +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0) && \ + defined(CONFIG_DEBUG_PREEMPT)) +#define LTTNG_TRACE_PREEMPT +#endif + +#ifdef LTTNG_TRACE_PREEMPT +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, preempt_disable, + + preemptirq_preempt_disable, + + TP_PROTO(unsigned long ip, unsigned long parent_ip), + + TP_ARGS(ip, parent_ip) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, preempt_enable, + + preemptirq_preempt_enable, + + TP_PROTO(unsigned long ip, unsigned long parent_ip), + + TP_ARGS(ip, parent_ip) +) +#endif /* LTTNG_TRACE_PREEMPT */ + +#endif /* LTTNG_TRACE_PREEMPTIRQ_H */ + +/* This part must be outside protection */ +#include + +#endif /* CONFIG_PREEMPTIRQ_EVENTS */ diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/printk.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/printk.h new file mode 100644 index 000000000000..1d5ea365a01c --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/printk.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM printk + +#if !defined(LTTNG_TRACE_PRINTK_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_PRINTK_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(console, + + printk_console, + + TP_PROTO(const char *text, size_t len), + + TP_ARGS(text, len), + + TP_FIELDS( + ctf_sequence_text(char, msg, text, size_t, len) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(console, + + printk_console, + + TP_PROTO(const char *log_buf, unsigned start, unsigned end, + unsigned log_buf_len), + + TP_ARGS(log_buf, start, end, log_buf_len), + + TP_FIELDS( + ctf_sequence_text(char, msg, log_buf + start, + size_t, end - start) + ) +) + +#else /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP(console, + + printk_console, + + TP_PROTO(const char *log_buf, unsigned start, unsigned end, + unsigned log_buf_len), + + TP_ARGS(log_buf, start, end, log_buf_len), + + TP_FIELDS( + /* + * printk buffer is gathered from two segments on older kernels. + */ + ctf_sequence_text(char, msg1, + log_buf + (start & (log_buf_len - 1)), + size_t, (start & (log_buf_len - 1)) > (end & (log_buf_len - 1)) + ? log_buf_len - (start & (log_buf_len - 1)) + : end - start) + ctf_sequence_text(char, msg2, + log_buf, + size_t, (start & (log_buf_len - 1)) > (end & (log_buf_len - 1)) + ? end & (log_buf_len - 1) + : 0) + ) +) + +#endif + +#endif /* LTTNG_TRACE_PRINTK_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/random.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/random.h new file mode 100644 index 000000000000..80b227968e61 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/random.h @@ -0,0 +1,132 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM random + +#if !defined(LTTNG_TRACE_RANDOM_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_RANDOM_H + +#include +#include + +LTTNG_TRACEPOINT_EVENT_CLASS(random__mix_pool_bytes, + TP_PROTO(const char *pool_name, int bytes, unsigned long IP), + + TP_ARGS(pool_name, bytes, IP), + + TP_FIELDS( + ctf_string(pool_name, pool_name) + ctf_integer(int, bytes, bytes) + ctf_integer(unsigned long, IP, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(random__mix_pool_bytes, mix_pool_bytes, + + random_mix_pool_bytes, + + TP_PROTO(const char *pool_name, int bytes, unsigned long IP), + + TP_ARGS(pool_name, bytes, IP) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(random__mix_pool_bytes, mix_pool_bytes_nolock, + + random_mix_pool_bytes_nolock, + + TP_PROTO(const char *pool_name, int bytes, unsigned long IP), + + TP_ARGS(pool_name, bytes, IP) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) +LTTNG_TRACEPOINT_EVENT_MAP(credit_entropy_bits, + + random_credit_entropy_bits, + + TP_PROTO(const char *pool_name, int bits, int entropy_count, + unsigned long IP), + + TP_ARGS(pool_name, bits, entropy_count, IP), + + TP_FIELDS( + ctf_string(pool_name, pool_name) + ctf_integer(int, bits, bits) + ctf_integer(int, entropy_count, entropy_count) + ctf_integer(unsigned long, IP, IP) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_MAP(credit_entropy_bits, + + random_credit_entropy_bits, + + TP_PROTO(const char *pool_name, int bits, int entropy_count, + int entropy_total, unsigned long IP), + + TP_ARGS(pool_name, bits, entropy_count, entropy_total, IP), + + TP_FIELDS( + ctf_string(pool_name, pool_name) + ctf_integer(int, bits, bits) + ctf_integer(int, entropy_count, entropy_count) + ctf_integer(int, entropy_total, entropy_total) + ctf_integer(unsigned long, IP, IP) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_MAP(get_random_bytes, + + random_get_random_bytes, + + TP_PROTO(int nbytes, unsigned long IP), + + TP_ARGS(nbytes, IP), + + TP_FIELDS( + ctf_integer(int, nbytes, nbytes) + ctf_integer(unsigned long, IP, IP) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(random__extract_entropy, + TP_PROTO(const char *pool_name, int nbytes, int entropy_count, + unsigned long IP), + + TP_ARGS(pool_name, nbytes, entropy_count, IP), + + TP_FIELDS( + ctf_string(pool_name, pool_name) + ctf_integer(int, nbytes, nbytes) + ctf_integer(int, entropy_count, entropy_count) + ctf_integer(unsigned long, IP, IP) + ) +) + + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(random__extract_entropy, extract_entropy, + + random_extract_entropy, + + TP_PROTO(const char *pool_name, int nbytes, int entropy_count, + unsigned long IP), + + TP_ARGS(pool_name, nbytes, entropy_count, IP) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(random__extract_entropy, extract_entropy_user, + + random_extract_entropy_user, + + TP_PROTO(const char *pool_name, int nbytes, int entropy_count, + unsigned long IP), + + TP_ARGS(pool_name, nbytes, entropy_count, IP) +) + + + +#endif /* LTTNG_TRACE_RANDOM_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rcu.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rcu.h new file mode 100644 index 000000000000..24bd51da82d6 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rcu.h @@ -0,0 +1,965 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM rcu + +#if !defined(LTTNG_TRACE_RCU_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_RCU_H + +#include +#include + +/* + * Tracepoint for start/end markers used for utilization calculations. + * By convention, the string is of the following forms: + * + * "Start " -- Mark the start of the specified activity, + * such as "context switch". Nesting is permitted. + * "End " -- Mark the end of the specified activity. + * + * An "@" character within "" is a comment character: Data + * reduction scripts will ignore the "@" and the remainder of the line. + */ +LTTNG_TRACEPOINT_EVENT(rcu_utilization, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *s), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + TP_PROTO(char *s), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + + TP_ARGS(s), + + TP_FIELDS( + ctf_string(s, s) + ) +) + +#ifdef CONFIG_RCU_TRACE + +#if defined(CONFIG_TREE_RCU) \ + || (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) \ + && defined(CONFIG_PREEMPT_RCU)) \ + || defined(CONFIG_TREE_PREEMPT_RCU) + +/* + * Tracepoint for grace-period events: starting and ending a grace + * period ("start" and "end", respectively), a CPU noting the start + * of a new grace period or the end of an old grace period ("cpustart" + * and "cpuend", respectively), a CPU passing through a quiescent + * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" + * and "cpuofl", respectively), and a CPU being kicked for being too + * long in dyntick-idle mode ("kick"). + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_grace_period, + + TP_PROTO(const char *rcuname, unsigned long gp_seq, const char *gpevent), + + TP_ARGS(rcuname, gp_seq, gpevent), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_string(gpevent, gpevent) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_grace_period, + + TP_PROTO(const char *rcuname, unsigned long gpnum, const char *gpevent), + + TP_ARGS(rcuname, gpnum, gpevent), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_string(gpevent, gpevent) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_grace_period, + + TP_PROTO(char *rcuname, unsigned long gpnum, char *gpevent), + + TP_ARGS(rcuname, gpnum, gpevent), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_string(gpevent, gpevent) + ) +) +#endif + +/* + * Tracepoint for grace-period-initialization events. These are + * distinguished by the type of RCU, the new grace-period number, the + * rcu_node structure level, the starting and ending CPU covered by the + * rcu_node structure, and the mask of CPUs that will be waited for. + * All but the type of RCU are extracted from the rcu_node structure. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init, + + TP_PROTO(const char *rcuname, unsigned long gp_seq, u8 level, + int grplo, int grphi, unsigned long qsmask), + + TP_ARGS(rcuname, gp_seq, level, grplo, grphi, qsmask), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(unsigned long, qsmask, qsmask) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init, + + TP_PROTO(const char *rcuname, unsigned long gpnum, u8 level, + int grplo, int grphi, unsigned long qsmask), + + TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(unsigned long, qsmask, qsmask) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init, + + TP_PROTO(char *rcuname, unsigned long gpnum, u8 level, + int grplo, int grphi, unsigned long qsmask), + + TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(unsigned long, qsmask, qsmask) + ) +) +#endif + +/* + * Tracepoint for tasks blocking within preemptible-RCU read-side + * critical sections. Track the type of RCU (which one day might + * include SRCU), the grace-period number that the task is blocking + * (the current or the next), and the task's PID. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_preempt_task, + + TP_PROTO(const char *rcuname, int pid, unsigned long gp_seq), + + TP_ARGS(rcuname, pid, gp_seq), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_integer(int, pid, pid) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_preempt_task, + + TP_PROTO(const char *rcuname, int pid, unsigned long gpnum), + + TP_ARGS(rcuname, pid, gpnum), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, pid, pid) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_preempt_task, + + TP_PROTO(char *rcuname, int pid, unsigned long gpnum), + + TP_ARGS(rcuname, pid, gpnum), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, pid, pid) + ) +) +#endif + +/* + * Tracepoint for tasks that blocked within a given preemptible-RCU + * read-side critical section exiting that critical section. Track the + * type of RCU (which one day might include SRCU) and the task's PID. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task, + + TP_PROTO(const char *rcuname, unsigned long gp_seq, int pid), + + TP_ARGS(rcuname, gp_seq, pid), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_integer(int, pid, pid) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task, + + TP_PROTO(const char *rcuname, unsigned long gpnum, int pid), + + TP_ARGS(rcuname, gpnum, pid), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, pid, pid) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task, + + TP_PROTO(char *rcuname, unsigned long gpnum, int pid), + + TP_ARGS(rcuname, gpnum, pid), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, pid, pid) + ) +) +#endif + +/* + * Tracepoint for quiescent-state-reporting events. These are + * distinguished by the type of RCU, the grace-period number, the + * mask of quiescent lower-level entities, the rcu_node structure level, + * the starting and ending CPU covered by the rcu_node structure, and + * whether there are any blocked tasks blocking the current grace period. + * All but the type of RCU are extracted from the rcu_node structure. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report, + + TP_PROTO(const char *rcuname, unsigned long gp_seq, + unsigned long mask, unsigned long qsmask, + u8 level, int grplo, int grphi, int gp_tasks), + + TP_ARGS(rcuname, gp_seq, mask, qsmask, level, grplo, grphi, gp_tasks), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_integer(unsigned long, mask, mask) + ctf_integer(unsigned long, qsmask, qsmask) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(u8, gp_tasks, gp_tasks) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report, + + TP_PROTO(const char *rcuname, unsigned long gpnum, + unsigned long mask, unsigned long qsmask, + u8 level, int grplo, int grphi, int gp_tasks), + + TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(unsigned long, mask, mask) + ctf_integer(unsigned long, qsmask, qsmask) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(u8, gp_tasks, gp_tasks) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report, + + TP_PROTO(char *rcuname, unsigned long gpnum, + unsigned long mask, unsigned long qsmask, + u8 level, int grplo, int grphi, int gp_tasks), + + TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(unsigned long, mask, mask) + ctf_integer(unsigned long, qsmask, qsmask) + ctf_integer(u8, level, level) + ctf_integer(int, grplo, grplo) + ctf_integer(int, grphi, grphi) + ctf_integer(u8, gp_tasks, gp_tasks) + ) +) +#endif + +/* + * Tracepoint for quiescent states detected by force_quiescent_state(). + * These trace events include the type of RCU, the grace-period number + * that was blocked by the CPU, the CPU itself, and the type of quiescent + * state, which can be "dti" for dyntick-idle mode, "ofl" for CPU offline, + * or "kick" when kicking a CPU that has been in dyntick-idle mode for + * too long. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(rcu_fqs, + + TP_PROTO(const char *rcuname, unsigned long gp_seq, int cpu, const char *qsevent), + + TP_ARGS(rcuname, gp_seq, cpu, qsevent), + + TP_FIELDS( + ctf_integer(unsigned long, gp_seq, gp_seq) + ctf_integer(int, cpu, cpu) + ctf_string(rcuname, rcuname) + ctf_string(qsevent, qsevent) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_fqs, + + TP_PROTO(const char *rcuname, unsigned long gpnum, int cpu, const char *qsevent), + + TP_ARGS(rcuname, gpnum, cpu, qsevent), + + TP_FIELDS( + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, cpu, cpu) + ctf_string(rcuname, rcuname) + ctf_string(qsevent, qsevent) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_fqs, + + TP_PROTO(char *rcuname, unsigned long gpnum, int cpu, char *qsevent), + + TP_ARGS(rcuname, gpnum, cpu, qsevent), + + TP_FIELDS( + ctf_integer(unsigned long, gpnum, gpnum) + ctf_integer(int, cpu, cpu) + ctf_string(rcuname, rcuname) + ctf_string(qsevent, qsevent) + ) +) +#endif + +#endif /* + * #if defined(CONFIG_TREE_RCU) + * || (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) + * && defined(CONFIG_PREEMPT_RCU)) + * || defined(CONFIG_TREE_PREEMPT_RCU) + */ + +/* + * Tracepoint for dyntick-idle entry/exit events. These take a string + * as argument: "Start" for entering dyntick-idle mode, "End" for + * leaving it, "--=" for events moving towards idle, and "++=" for events + * moving away from idle. "Error on entry: not idle task" and "Error on + * exit: not idle task" indicate that a non-idle task is erroneously + * toying with the idle loop. + * + * These events also take a pair of numbers, which indicate the nesting + * depth before and after the event of interest. Note that task-related + * events use the upper bits of each number, while interrupt-related + * events use the lower bits. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) \ + || LTTNG_KERNEL_RANGE(5,5,6, 5,6,0) \ + || LTTNG_KERNEL_RANGE(5,4,22, 5,5,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,46, 5,1,0,0) +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(const char *polarity, long oldnesting, long newnesting, int dynticks), + + TP_ARGS(polarity, oldnesting, newnesting, dynticks), + + TP_FIELDS( + ctf_string(polarity, polarity) + ctf_integer(long, oldnesting, oldnesting) + ctf_integer(long, newnesting, newnesting) + ctf_integer(int, dynticks, dynticks) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0)) +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(const char *polarity, long oldnesting, long newnesting, atomic_t dynticks), + + TP_ARGS(polarity, oldnesting, newnesting, dynticks), + + TP_FIELDS( + ctf_string(polarity, polarity) + ctf_integer(long, oldnesting, oldnesting) + ctf_integer(long, newnesting, newnesting) + ctf_integer(int, dynticks, atomic_read(&dynticks)) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(const char *polarity, long long oldnesting, long long newnesting), + + TP_ARGS(polarity, oldnesting, newnesting), + + TP_FIELDS( + ctf_string(polarity, polarity) + ctf_integer(long long, oldnesting, oldnesting) + ctf_integer(long long, newnesting, newnesting) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(char *polarity, long long oldnesting, long long newnesting), + + TP_ARGS(polarity, oldnesting, newnesting), + + TP_FIELDS( + ctf_string(polarity, polarity) + ctf_integer(long long, oldnesting, oldnesting) + ctf_integer(long long, newnesting, newnesting) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(char *polarity), + + TP_ARGS(polarity), + + TP_FIELDS( + ctf_string(polarity, polarity) + ) +) +#endif + + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +/* + * Tracepoint for RCU preparation for idle, the goal being to get RCU + * processing done so that the current CPU can shut off its scheduling + * clock and enter dyntick-idle mode. One way to accomplish this is + * to drain all RCU callbacks from this CPU, and the other is to have + * done everything RCU requires for the current grace period. In this + * latter case, the CPU will be awakened at the end of the current grace + * period in order to process the remainder of its callbacks. + * + * These tracepoints take a string as argument: + * + * "No callbacks": Nothing to do, no callbacks on this CPU. + * "In holdoff": Nothing to do, holding off after unsuccessful attempt. + * "Begin holdoff": Attempt failed, don't retry until next jiffy. + * "Dyntick with callbacks": Entering dyntick-idle despite callbacks. + * "Dyntick with lazy callbacks": Entering dyntick-idle w/lazy callbacks. + * "More callbacks": Still more callbacks, try again to clear them out. + * "Callbacks drained": All callbacks processed, off to dyntick idle! + * "Timer": Timer fired to cause CPU to continue processing callbacks. + * "Demigrate": Timer fired on wrong CPU, woke up correct CPU. + * "Cleanup after idle": Idle exited, timer canceled. + */ +LTTNG_TRACEPOINT_EVENT(rcu_prep_idle, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *reason), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + TP_PROTO(char *reason), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + + TP_ARGS(reason), + + TP_FIELDS( + ctf_string(reason, reason) + ) +) +#endif + +/* + * Tracepoint for the registration of a single RCU callback function. + * The first argument is the type of RCU, the second argument is + * a pointer to the RCU callback itself, the third element is the + * number of lazy callbacks queued, and the fourth element is the + * total number of callbacks queued. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT(rcu_callback, + + TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen), + + TP_ARGS(rcuname, rhp, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_callback, + + TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen_lazy, + long qlen), + + TP_ARGS(rcuname, rhp, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_callback, + + TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen_lazy, + long qlen), + + TP_ARGS(rcuname, rhp, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_callback, + + TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen), + + TP_ARGS(rcuname, rhp, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen, qlen) + ) +) +#endif + + +/* + * Tracepoint for the registration of a single RCU callback of the special + * kfree() form. The first argument is the RCU type, the second argument + * is a pointer to the RCU callback, the third argument is the offset + * of the callback within the enclosing RCU-protected data structure, + * the fourth argument is the number of lazy callbacks queued, and the + * fifth argument is the total number of callbacks queued. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + + TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset, + long qlen), + + TP_ARGS(rcuname, rhp, offset, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + + TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset, + long qlen_lazy, long qlen), + + TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + + TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset, + long qlen_lazy, long qlen), + + TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + + TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset, + long qlen), + + TP_ARGS(rcuname, rhp, offset, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen, qlen) + ) +) +#endif + +/* + * Tracepoint for marking the beginning rcu_do_batch, performed to start + * RCU callback invocation. The first argument is the RCU flavor, + * the second is the number of lazy callbacks queued, the third is + * the total number of callbacks queued, and the fourth argument is + * the current RCU-callback batch limit. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(const char *rcuname, long qlen, long blimit), + + TP_ARGS(rcuname, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(const char *rcuname, long qlen_lazy, long qlen, long blimit), + + TP_ARGS(rcuname, qlen_lazy, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit), + + TP_ARGS(rcuname, qlen_lazy, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(char *rcuname, long qlen_lazy, long qlen, int blimit), + + TP_ARGS(rcuname, qlen_lazy, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(int, blimit, blimit) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(char *rcuname, long qlen, int blimit), + + TP_ARGS(rcuname, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen, qlen) + ctf_integer(int, blimit, blimit) + ) +) +#endif + +/* + * Tracepoint for the invocation of a single RCU callback function. + * The first argument is the type of RCU, and the second argument is + * a pointer to the RCU callback itself. + */ +LTTNG_TRACEPOINT_EVENT(rcu_invoke_callback, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *rcuname, struct rcu_head *rhp), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + TP_PROTO(char *rcuname, struct rcu_head *rhp), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + + TP_ARGS(rcuname, rhp), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ) +) + +/* + * Tracepoint for the invocation of a single RCU callback of the special + * kfree() form. The first argument is the RCU flavor, the second + * argument is a pointer to the RCU callback, and the third argument + * is the offset of the callback within the enclosing RCU-protected + * data structure. + */ +LTTNG_TRACEPOINT_EVENT(rcu_invoke_kfree_callback, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + + TP_ARGS(rcuname, rhp, offset), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer(unsigned long, offset, offset) + ) +) + +/* + * Tracepoint for exiting rcu_do_batch after RCU callbacks have been + * invoked. The first argument is the name of the RCU flavor, + * the second argument is number of callbacks actually invoked, + * the third argument (cb) is whether or not any of the callbacks that + * were ready to invoke at the beginning of this batch are still + * queued, the fourth argument (nr) is the return value of need_resched(), + * the fifth argument (iit) is 1 if the current task is the idle task, + * and the sixth argument (risk) is the return value from + * rcu_is_callbacks_kthread(). + */ +LTTNG_TRACEPOINT_EVENT(rcu_batch_end, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) + TP_PROTO(const char *rcuname, int callbacks_invoked, + char cb, char nr, char iit, char risk), + + TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *rcuname, int callbacks_invoked, + bool cb, bool nr, bool iit, bool risk), + + TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + TP_PROTO(char *rcuname, int callbacks_invoked, + bool cb, bool nr, bool iit, bool risk), + + TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), +#else + TP_PROTO(char *rcuname, int callbacks_invoked), + + TP_ARGS(rcuname, callbacks_invoked), +#endif + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(int, callbacks_invoked, callbacks_invoked) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) + ctf_integer(char, cb, cb) + ctf_integer(char, nr, nr) + ctf_integer(char, iit, iit) + ctf_integer(char, risk, risk) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + ctf_integer(bool, cb, cb) + ctf_integer(bool, nr, nr) + ctf_integer(bool, iit, iit) + ctf_integer(bool, risk, risk) +#endif + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +/* + * Tracepoint for rcutorture readers. The first argument is the name + * of the RCU flavor from rcutorture's viewpoint and the second argument + * is the callback address. + */ +LTTNG_TRACEPOINT_EVENT(rcu_torture_read, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *rcutorturename, struct rcu_head *rhp, + unsigned long secs, unsigned long c_old, unsigned long c), + + TP_ARGS(rcutorturename, rhp, secs, c_old, c), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + TP_PROTO(char *rcutorturename, struct rcu_head *rhp, + unsigned long secs, unsigned long c_old, unsigned long c), + + TP_ARGS(rcutorturename, rhp, secs, c_old, c), +#else + TP_PROTO(char *rcutorturename, struct rcu_head *rhp), + + TP_ARGS(rcutorturename, rhp), +#endif + + TP_FIELDS( + ctf_string(rcutorturename, rcutorturename) + ctf_integer_hex(struct rcu_head *, rhp, rhp) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + ctf_integer(unsigned long, secs, secs) + ctf_integer(unsigned long, c_old, c_old) + ctf_integer(unsigned long, c, c) +#endif + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +/* + * Tracepoint for _rcu_barrier() execution. The string "s" describes + * the _rcu_barrier phase: + * "Begin": rcu_barrier_callback() started. + * "Check": rcu_barrier_callback() checking for piggybacking. + * "EarlyExit": rcu_barrier_callback() piggybacked, thus early exit. + * "Inc1": rcu_barrier_callback() piggyback check counter incremented. + * "Offline": rcu_barrier_callback() found offline CPU + * "OnlineQ": rcu_barrier_callback() found online CPU with callbacks. + * "OnlineNQ": rcu_barrier_callback() found online CPU, no callbacks. + * "IRQ": An rcu_barrier_callback() callback posted on remote CPU. + * "CB": An rcu_barrier_callback() invoked a callback, not the last. + * "LastCB": An rcu_barrier_callback() invoked the last callback. + * "Inc2": rcu_barrier_callback() piggyback check counter incremented. + * The "cpu" argument is the CPU or -1 if meaningless, the "cnt" argument + * is the count of remaining callbacks, and "done" is the piggybacking count. + */ +LTTNG_TRACEPOINT_EVENT(rcu_barrier, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) + TP_PROTO(const char *rcuname, const char *s, int cpu, int cnt, unsigned long done), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + TP_PROTO(char *rcuname, char *s, int cpu, int cnt, unsigned long done), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + + TP_ARGS(rcuname, s, cpu, cnt, done), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_string(s, s) + ctf_integer(int, cpu, cpu) + ctf_integer(int, cnt, cnt) + ctf_integer(unsigned long, done, done) + ) +) +#endif + +#else /* #ifdef CONFIG_RCU_TRACE */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,0)) +#define trace_rcu_grace_period(rcuname, gp_seq, gpevent) do { } while (0) +#define trace_rcu_grace_period_init(rcuname, gp_seq, level, grplo, grphi, \ + qsmask) do { } while (0) +#define trace_rcu_preempt_task(rcuname, pid, gp_seq) do { } while (0) +#define trace_rcu_unlock_preempted_task(rcuname, gp_seq, pid) do { } while (0) +#define trace_rcu_quiescent_state_report(rcuname, gp_seq, mask, qsmask, level, \ + grplo, grphi, gp_tasks) do { } \ + while (0) +#define trace_rcu_fqs(rcuname, gp_seq, cpu, qsevent) do { } while (0) +#else +#define trace_rcu_grace_period(rcuname, gpnum, gpevent) do { } while (0) +#define trace_rcu_grace_period_init(rcuname, gpnum, level, grplo, grphi, \ + qsmask) do { } while (0) +#define trace_rcu_preempt_task(rcuname, pid, gpnum) do { } while (0) +#define trace_rcu_unlock_preempted_task(rcuname, gpnum, pid) do { } while (0) +#define trace_rcu_quiescent_state_report(rcuname, gpnum, mask, qsmask, level, \ + grplo, grphi, gp_tasks) do { } \ + while (0) +#define trace_rcu_fqs(rcuname, gpnum, cpu, qsevent) do { } while (0) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0)) +#define trace_rcu_dyntick(polarity, oldnesting, newnesting, dyntick) do { } while (0) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#define trace_rcu_dyntick(polarity, oldnesting, newnesting) do { } while (0) +#else +#define trace_rcu_dyntick(polarity) do { } while (0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#define trace_rcu_prep_idle(reason) do { } while (0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +#define trace_rcu_callback(rcuname, rhp, qlen_lazy, qlen) do { } while (0) +#define trace_rcu_kfree_callback(rcuname, rhp, offset, qlen_lazy, qlen) \ + do { } while (0) +#define trace_rcu_batch_start(rcuname, qlen_lazy, qlen, blimit) \ + do { } while (0) +#else +#define trace_rcu_callback(rcuname, rhp, qlen) do { } while (0) +#define trace_rcu_kfree_callback(rcuname, rhp, offset, qlen) do { } while (0) +#define trace_rcu_batch_start(rcuname, qlen, blimit) do { } while (0) +#endif +#define trace_rcu_invoke_callback(rcuname, rhp) do { } while (0) +#define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ + do { } while (0) +#else +#define trace_rcu_batch_end(rcuname, callbacks_invoked) do { } while (0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#define trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ + do { } while (0) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +#define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) +#endif +#endif /* #else #ifdef CONFIG_RCU_TRACE */ + +#endif /* LTTNG_TRACE_RCU_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regmap.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regmap.h new file mode 100644 index 000000000000..badfd32b29a3 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regmap.h @@ -0,0 +1,145 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM regmap + +#if !defined(LTTNG_TRACE_REGMAP_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_REGMAP_H + +#include +#include +#include + +#ifndef _TRACE_REGMAP_DEF_ +#define _TRACE_REGMAP_DEF_ +struct device; +struct regmap; +#endif + +/* + * Log register events + */ +LTTNG_TRACEPOINT_EVENT_CLASS(regmap_reg, + + TP_PROTO(struct regmap *map, unsigned int reg, + unsigned int val), + + TP_ARGS(map, reg, val), + + TP_FIELDS( + ctf_string(name, regmap_name(map)) + ctf_integer(unsigned int, reg, reg) + ctf_integer(unsigned int, val, val) + ) +) +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_reg, regmap_reg_write, + + TP_PROTO(struct regmap *map, unsigned int reg, + unsigned int val), + + TP_ARGS(map, reg, val) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_reg, regmap_reg_read, + + TP_PROTO(struct regmap *map, unsigned int reg, + unsigned int val), + + TP_ARGS(map, reg, val) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_reg, regmap_reg_read_cache, + + TP_PROTO(struct regmap *map, unsigned int reg, + unsigned int val), + + TP_ARGS(map, reg, val) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(regmap_block, + + TP_PROTO(struct regmap *map, unsigned int reg, int count), + + TP_ARGS(map, reg, count), + + TP_FIELDS( + ctf_string(name, regmap_name(map)) + ctf_integer(unsigned int, reg, reg) + ctf_integer(int, count, count) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_block, regmap_hw_read_start, + + TP_PROTO(struct regmap *map, unsigned int reg, int count), + + TP_ARGS(map, reg, count) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_block, regmap_hw_read_done, + + TP_PROTO(struct regmap *map, unsigned int reg, int count), + + TP_ARGS(map, reg, count) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_block, regmap_hw_write_start, + + TP_PROTO(struct regmap *map, unsigned int reg, int count), + + TP_ARGS(map, reg, count) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_block, regmap_hw_write_done, + + TP_PROTO(struct regmap *map, unsigned int reg, int count), + + TP_ARGS(map, reg, count) +) + +LTTNG_TRACEPOINT_EVENT_MAP(regcache_sync, + + regmap_regcache_sync, + + TP_PROTO(struct regmap *map, const char *type, + const char *status), + + TP_ARGS(map, type, status), + + TP_FIELDS( + ctf_string(name, regmap_name(map)) + ctf_string(status, status) + ctf_string(type, type) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(regmap_bool, + + TP_PROTO(struct regmap *map, bool flag), + + TP_ARGS(map, flag), + + TP_FIELDS( + ctf_string(name, regmap_name(map)) + ctf_integer(int, flag, flag) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_bool, regmap_cache_only, + + TP_PROTO(struct regmap *map, bool flag), + + TP_ARGS(map, flag) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_bool, regmap_cache_bypass, + + TP_PROTO(struct regmap *map, bool flag), + + TP_ARGS(map, flag) + +) + +#endif /* LTTNG_TRACE_REGMAP_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regulator.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regulator.h new file mode 100644 index 000000000000..3d2616cf0ded --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/regulator.h @@ -0,0 +1,118 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM regulator + +#if !defined(LTTNG_TRACE_REGULATOR_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_REGULATOR_H + +#include +#include + +/* + * Events which just log themselves and the regulator name for enable/disable + * type tracking. + */ +LTTNG_TRACEPOINT_EVENT_CLASS(regulator_basic, + + TP_PROTO(const char *name), + + TP_ARGS(name), + + TP_FIELDS( + ctf_string(name, name) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_basic, regulator_enable, + + TP_PROTO(const char *name), + + TP_ARGS(name) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_basic, regulator_enable_delay, + + TP_PROTO(const char *name), + + TP_ARGS(name) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_basic, regulator_enable_complete, + + TP_PROTO(const char *name), + + TP_ARGS(name) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_basic, regulator_disable, + + TP_PROTO(const char *name), + + TP_ARGS(name) + +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_basic, regulator_disable_complete, + + TP_PROTO(const char *name), + + TP_ARGS(name) + +) + +/* + * Events that take a range of numerical values, mostly for voltages + * and so on. + */ +LTTNG_TRACEPOINT_EVENT_CLASS(regulator_range, + + TP_PROTO(const char *name, int min, int max), + + TP_ARGS(name, min, max), + + TP_FIELDS( + ctf_string(name, name) + ctf_integer(int, min, min) + ctf_integer(int, max, max) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_range, regulator_set_voltage, + + TP_PROTO(const char *name, int min, int max), + + TP_ARGS(name, min, max) + +) + + +/* + * Events that take a single value, mostly for readback and refcounts. + */ +LTTNG_TRACEPOINT_EVENT_CLASS(regulator_value, + + TP_PROTO(const char *name, unsigned int val), + + TP_ARGS(name, val), + + TP_FIELDS( + ctf_string(name, name) + ctf_integer(unsigned int, val, val) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_value, regulator_set_voltage_complete, + + TP_PROTO(const char *name, unsigned int value), + + TP_ARGS(name, value) + +) + +#endif /* _TRACE_POWER_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpc.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpc.h new file mode 100644 index 000000000000..ceaf9dbf4089 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpc.h @@ -0,0 +1,366 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM rpc + +#if !defined(LTTNG_TRACE_RPC_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_RPC_H + +#include +#include +#include + +#ifndef ONCE_LTTNG_RPC_H +#define ONCE_LTTNG_RPC_H + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +static inline +int lttng_get_clid(const struct rpc_task *task) +{ + struct rpc_clnt *tk_client; + + tk_client = task->tk_client; + if (!tk_client) + return -1; + /* + * The cl_clid field is always initialized to positive signed + * integers. Negative signed integer values are treated as + * errors. + */ + return (int) tk_client->cl_clid; +} +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ + +#endif /* ONCE_LTTNG_RPC_H */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status, + + TP_PROTO(const struct rpc_task *task), + + TP_ARGS(task), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(int, status, task->tk_status) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status, + TP_PROTO(const struct rpc_task *task), + + TP_ARGS(task) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status, + TP_PROTO(const struct rpc_task *task), + + TP_ARGS(task) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status, + + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(int, status, task->tk_status) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status, + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status, + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task) +) +#else +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status, + + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task), + + TP_FIELDS( + ctf_integer_hex(const struct rpc_task *, task, task) + ctf_integer_hex(const struct rpc_clnt *, clnt, task->tk_client) + ctf_integer(int, status, task->tk_status) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status, + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status, + TP_PROTO(struct rpc_task *task), + + TP_ARGS(task) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_connect_status, + TP_PROTO(const struct rpc_task *task), + + TP_ARGS(task) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)) +LTTNG_TRACEPOINT_EVENT(rpc_connect_status, + TP_PROTO(const struct rpc_task *task), + + TP_ARGS(task), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(int, status, task->tk_status) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rpc_connect_status, + TP_PROTO(struct rpc_task *task, int status), + + TP_ARGS(task, status), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(int, status, status) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(rpc_connect_status, + TP_PROTO(struct rpc_task *task, int status), + + TP_ARGS(task, status), + + TP_FIELDS( + ctf_integer_hex(const struct rpc_task *, task, task) + ctf_integer_hex(const struct rpc_clnt *, clnt, task->tk_client) + ctf_integer(int, status, status) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running, + + TP_PROTO(const struct rpc_task *task, const void *action), + + TP_ARGS(task, action), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer_hex(const void *, action, action) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin, + + TP_PROTO(const struct rpc_task *task, const void *action), + + TP_ARGS(task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action, + + TP_PROTO(const struct rpc_task *task, const void *action), + + TP_ARGS(task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete, + + TP_PROTO(const struct rpc_task *task, const void *action), + + TP_ARGS(task, action) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued, + + TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(task, q), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(unsigned long, timeout, task->tk_timeout) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ctf_string(q_name, rpc_qname(q)) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep, + + TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(task, q) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup, + + TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(task, q) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer_hex(const void *, action, action) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q), + + TP_FIELDS( + ctf_integer(unsigned int, task_id, task->tk_pid) + ctf_integer(int, client_id, lttng_get_clid(task)) + ctf_integer(unsigned long, timeout, task->tk_timeout) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ctf_string(q_name, rpc_qname(q)) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q) +) + +#else +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action), + + TP_FIELDS( + ctf_integer_hex(const struct rpc_clnt *, clnt, clnt) + ctf_integer_hex(const struct rpc_task *, task, task) + ctf_integer_hex(const void *, action, action) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action), + + TP_ARGS(clnt, task, action) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q), + + TP_FIELDS( + ctf_integer_hex(const struct rpc_clnt *, clnt, clnt) + ctf_integer_hex(const struct rpc_task *, task, task) + ctf_integer(unsigned long, timeout, task->tk_timeout) + ctf_integer(unsigned long, runstate, task->tk_runstate) + ctf_integer(int, status, task->tk_status) + ctf_integer(unsigned short, flags, task->tk_flags) + ctf_string(q_name, rpc_qname(q)) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup, + + TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q), + + TP_ARGS(clnt, task, q) +) +#endif + +#endif /* LTTNG_TRACE_RPC_H */ + +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpm.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpm.h new file mode 100644 index 000000000000..5fcc456b603a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/rpm.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM rpm + +#if !defined(LTTNG_TRACE_RUNTIME_POWER_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_RUNTIME_POWER_H + +#include +#include + +#ifndef _TRACE_RPM_DEF_ +#define _TRACE_RPM_DEF_ +struct device; +#endif + +/* + * The rpm_internal events are used for tracing some important + * runtime pm internal functions. + */ +LTTNG_TRACEPOINT_EVENT_CLASS(rpm_internal, + + TP_PROTO(struct device *dev, int flags), + + TP_ARGS(dev, flags), + + TP_FIELDS( + ctf_string(name, dev_name(dev)) + ctf_integer(int, flags, flags) + ctf_integer(int, usage_count, atomic_read(&dev->power.usage_count)) + ctf_integer(int, disable_depth, dev->power.disable_depth) + ctf_integer(int, runtime_auto, dev->power.runtime_auto) + ctf_integer(int, request_pending, dev->power.request_pending) + ctf_integer(int, irq_safe, dev->power.irq_safe) + ctf_integer(int, child_count, atomic_read(&dev->power.child_count)) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpm_internal, rpm_suspend, + + TP_PROTO(struct device *dev, int flags), + + TP_ARGS(dev, flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpm_internal, rpm_resume, + + TP_PROTO(struct device *dev, int flags), + + TP_ARGS(dev, flags) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(rpm_internal, rpm_idle, + + TP_PROTO(struct device *dev, int flags), + + TP_ARGS(dev, flags) +) + +LTTNG_TRACEPOINT_EVENT(rpm_return_int, + TP_PROTO(struct device *dev, unsigned long ip, int ret), + TP_ARGS(dev, ip, ret), + + TP_FIELDS( + ctf_string(name, dev_name(dev)) + ctf_integer(unsigned long, ip, ip) + ctf_integer(int, ret, ret) + ) +) + +#endif /* LTTNG_TRACE_RUNTIME_POWER_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sched.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sched.h new file mode 100644 index 000000000000..95bf13cc72b4 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sched.h @@ -0,0 +1,655 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM sched + +#if !defined(LTTNG_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_SCHED_H + +#include +#include +#include +#include +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#include +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) +#define lttng_proc_inum ns.inum +#else +#define lttng_proc_inum proc_inum +#endif + +#define LTTNG_MAX_PID_NS_LEVEL 32 + +#ifndef _TRACE_SCHED_DEF_ +#define _TRACE_SCHED_DEF_ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) + +static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p) +{ + unsigned int state; + +#ifdef CONFIG_SCHED_DEBUG + BUG_ON(p != current); +#endif /* CONFIG_SCHED_DEBUG */ + + /* + * Preemption ignores task state, therefore preempted tasks are always + * RUNNING (we will not have dequeued if state != RUNNING). + */ + if (preempt) + return TASK_REPORT_MAX; + + /* + * task_state_index() uses fls() and returns a value from 0-8 range. + * Decrement it by 1 (except TASK_RUNNING state i.e 0) before using + * it for left shift operation to get the correct task->state + * mapping. + */ + state = task_state_index(p); + + return state ? (1 << (state - 1)) : state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p) +{ + unsigned int state; + +#ifdef CONFIG_SCHED_DEBUG + BUG_ON(p != current); +#endif /* CONFIG_SCHED_DEBUG */ + + /* + * Preemption ignores task state, therefore preempted tasks are always + * RUNNING (we will not have dequeued if state != RUNNING). + */ + if (preempt) + return TASK_REPORT_MAX; + + /* + * __get_task_state() uses fls() and returns a value from 0-8 range. + * Decrement it by 1 (except TASK_RUNNING state i.e 0) before using + * it for left shift operation to get the correct task->state + * mapping. + */ + state = __get_task_state(p); + + return state ? (1 << (state - 1)) : state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + +static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p) +{ +#ifdef CONFIG_SCHED_DEBUG + BUG_ON(p != current); +#endif /* CONFIG_SCHED_DEBUG */ + /* + * Preemption ignores task state, therefore preempted tasks are always RUNNING + * (we will not have dequeued if state != RUNNING). + */ + return preempt ? TASK_RUNNING | TASK_STATE_MAX : p->state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT +#ifdef CONFIG_SCHED_DEBUG + BUG_ON(p != current); +#endif /* CONFIG_SCHED_DEBUG */ + /* + * For all intents and purposes a preempted task is a running task. + */ + if (preempt_count() & PREEMPT_ACTIVE) + state = TASK_RUNNING | TASK_STATE_MAX; +#endif /* CONFIG_PREEMPT */ + + return state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT + /* + * For all intents and purposes a preempted task is a running task. + */ + if (task_preempt_count(p) & PREEMPT_ACTIVE) + state = TASK_RUNNING | TASK_STATE_MAX; +#endif + + return state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT + /* + * For all intents and purposes a preempted task is a running task. + */ + if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) + state = TASK_RUNNING | TASK_STATE_MAX; +#endif + + return state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT + /* + * For all intents and purposes a preempted task is a running task. + */ + if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) + state = TASK_RUNNING; +#endif + + return state; +} + +#endif + +#endif /* _TRACE_SCHED_DEF_ */ + +/* + * Tracepoint for calling kthread_stop, performed to end a kthread: + */ +LTTNG_TRACEPOINT_EVENT(sched_kthread_stop, + + TP_PROTO(struct task_struct *t), + + TP_ARGS(t), + + TP_FIELDS( + ctf_array_text(char, comm, t->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, t->pid) + ) +) + +/* + * Tracepoint for the return value of the kthread stopping: + */ +LTTNG_TRACEPOINT_EVENT(sched_kthread_stop_ret, + + TP_PROTO(int ret), + + TP_ARGS(ret), + + TP_FIELDS( + ctf_integer(int, ret, ret) + ) +) + +/* + * Tracepoint for waking up a task: + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) || \ + LTTNG_RT_KERNEL_RANGE(4,1,10,11, 4,2,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,18,27,26, 3,19,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,14,61,63, 3,15,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,12,54,73, 3,13,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,10,97,106, 3,11,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,4,110,139, 3,5,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,2,77,111, 3,3,0,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(sched_wakeup_template, + + TP_PROTO(struct task_struct *p), + + TP_ARGS(p), + + TP_FIELDS( + ctf_array_text(char, comm, p->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, p->pid) + ctf_integer(int, prio, p->prio - MAX_RT_PRIO) + ctf_integer(int, target_cpu, task_cpu(p)) + ) +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ +LTTNG_TRACEPOINT_EVENT_CLASS(sched_wakeup_template, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct task_struct *p, int success), + + TP_ARGS(p, success), +#else + TP_PROTO(struct rq *rq, struct task_struct *p, int success), + + TP_ARGS(rq, p, success), +#endif + + TP_FIELDS( + ctf_array_text(char, comm, p->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, p->pid) + ctf_integer(int, prio, p->prio - MAX_RT_PRIO) + ctf_integer(int, success, success) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) + ctf_integer(int, target_cpu, task_cpu(p)) +#endif + ) +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) || \ + LTTNG_RT_KERNEL_RANGE(4,1,10,11, 4,2,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,18,27,26, 3,19,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,14,61,63, 3,15,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,12,54,73, 3,13,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,10,97,106, 3,11,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,4,110,139, 3,5,0,0) || \ + LTTNG_RT_KERNEL_RANGE(3,2,77,111, 3,3,0,0)) + +/* + * Tracepoint called when waking a task; this tracepoint is guaranteed to be + * called from the waking context. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_waking, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) + +/* + * Tracepoint called when the task is actually woken; p->state == TASK_RUNNNG. + * It it not always called from the waking context. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) + +/* + * Tracepoint for waking up a new task: + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup, + TP_PROTO(struct task_struct *p, int success), + TP_ARGS(p, success)) + +/* + * Tracepoint for waking up a new task: + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new, + TP_PROTO(struct task_struct *p, int success), + TP_ARGS(p, success)) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup, + TP_PROTO(struct rq *rq, struct task_struct *p, int success), + TP_ARGS(rq, p, success)) + +/* + * Tracepoint for waking up a new task: + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new, + TP_PROTO(struct rq *rq, struct task_struct *p, int success), + TP_ARGS(rq, p, success)) + +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + +/* + * Tracepoint for task switches, performed by the scheduler: + */ +LTTNG_TRACEPOINT_EVENT(sched_switch, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + TP_PROTO(bool preempt, + struct task_struct *prev, + struct task_struct *next), + + TP_ARGS(preempt, prev, next), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + TP_PROTO(struct task_struct *prev, + struct task_struct *next), + + TP_ARGS(prev, next), +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + TP_PROTO(struct rq *rq, struct task_struct *prev, + struct task_struct *next), + + TP_ARGS(rq, prev, next), +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + + TP_FIELDS( + ctf_array_text(char, prev_comm, prev->comm, TASK_COMM_LEN) + ctf_integer(pid_t, prev_tid, prev->pid) + ctf_integer(int, prev_prio, prev->prio - MAX_RT_PRIO) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + ctf_integer(long, prev_state, __trace_sched_switch_state(preempt, prev)) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + ctf_integer(long, prev_state, __trace_sched_switch_state(prev)) +#else + ctf_integer(long, prev_state, prev->state) +#endif + ctf_array_text(char, next_comm, next->comm, TASK_COMM_LEN) + ctf_integer(pid_t, next_tid, next->pid) + ctf_integer(int, next_prio, next->prio - MAX_RT_PRIO) + ) +) + +/* + * Tracepoint for a task being migrated: + */ +LTTNG_TRACEPOINT_EVENT(sched_migrate_task, + + TP_PROTO(struct task_struct *p, int dest_cpu), + + TP_ARGS(p, dest_cpu), + + TP_FIELDS( + ctf_array_text(char, comm, p->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, p->pid) + ctf_integer(int, prio, p->prio - MAX_RT_PRIO) + ctf_integer(int, orig_cpu, task_cpu(p)) + ctf_integer(int, dest_cpu, dest_cpu) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(sched_process_template, + + TP_PROTO(struct task_struct *p), + + TP_ARGS(p), + + TP_FIELDS( + ctf_array_text(char, comm, p->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, p->pid) + ctf_integer(int, prio, p->prio - MAX_RT_PRIO) + ) +) + +/* + * Tracepoint for freeing a task: + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_process_template, sched_process_free, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) + + +/* + * Tracepoint for a task exiting: + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_process_template, sched_process_exit, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) + +/* + * Tracepoint for waiting on task to unschedule: + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_process_template, sched_wait_task, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_process_template, sched_wait_task, + TP_PROTO(struct rq *rq, struct task_struct *p), + TP_ARGS(rq, p)) +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) */ + +/* + * Tracepoint for a waiting task: + */ +LTTNG_TRACEPOINT_EVENT(sched_process_wait, + + TP_PROTO(struct pid *pid), + + TP_ARGS(pid), + + TP_FIELDS( + ctf_array_text(char, comm, current->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, pid_nr(pid)) + ctf_integer(int, prio, current->prio - MAX_RT_PRIO) + ) +) + +/* + * Tracepoint for do_fork. + * Saving both TID and PID information, especially for the child, allows + * trace analyzers to distinguish between creation of a new process and + * creation of a new thread. Newly created processes will have child_tid + * == child_pid, while creation of a thread yields to child_tid != + * child_pid. + */ +LTTNG_TRACEPOINT_EVENT_CODE(sched_process_fork, + + TP_PROTO(struct task_struct *parent, struct task_struct *child), + + TP_ARGS(parent, child), + + TP_locvar( + pid_t vtids[LTTNG_MAX_PID_NS_LEVEL]; + unsigned int ns_level; + ), + + TP_code_pre( + if (child) { + struct pid *child_pid; + unsigned int i; + + child_pid = task_pid(child); + tp_locvar->ns_level = + min_t(unsigned int, child_pid->level + 1, + LTTNG_MAX_PID_NS_LEVEL); + for (i = 0; i < tp_locvar->ns_level; i++) + tp_locvar->vtids[i] = child_pid->numbers[i].nr; + } + ), + + TP_FIELDS( + ctf_array_text(char, parent_comm, parent->comm, TASK_COMM_LEN) + ctf_integer(pid_t, parent_tid, parent->pid) + ctf_integer(pid_t, parent_pid, parent->tgid) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + ctf_integer(unsigned int, parent_ns_inum, + ({ + unsigned int parent_ns_inum = 0; + + if (parent) { + struct pid_namespace *pid_ns; + + pid_ns = task_active_pid_ns(parent); + if (pid_ns) + parent_ns_inum = + pid_ns->lttng_proc_inum; + } + parent_ns_inum; + })) +#endif + ctf_array_text(char, child_comm, child->comm, TASK_COMM_LEN) + ctf_integer(pid_t, child_tid, child->pid) + ctf_sequence(pid_t, vtids, tp_locvar->vtids, u8, tp_locvar->ns_level) + ctf_integer(pid_t, child_pid, child->tgid) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) + ctf_integer(unsigned int, child_ns_inum, + ({ + unsigned int child_ns_inum = 0; + + if (child) { + struct pid_namespace *pid_ns; + + pid_ns = task_active_pid_ns(child); + if (pid_ns) + child_ns_inum = + pid_ns->lttng_proc_inum; + } + child_ns_inum; + })) +#endif + ), + + TP_code_post() +) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) +/* + * Tracepoint for sending a signal: + */ +LTTNG_TRACEPOINT_EVENT(sched_signal_send, + + TP_PROTO(int sig, struct task_struct *p), + + TP_ARGS(sig, p), + + TP_FIELDS( + ctf_integer(int, sig, sig) + ctf_array_text(char, comm, p->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, p->pid) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +/* + * Tracepoint for exec: + */ +LTTNG_TRACEPOINT_EVENT(sched_process_exec, + + TP_PROTO(struct task_struct *p, pid_t old_pid, + struct linux_binprm *bprm), + + TP_ARGS(p, old_pid, bprm), + + TP_FIELDS( + ctf_string(filename, bprm->filename) + ctf_integer(pid_t, tid, p->pid) + ctf_integer(pid_t, old_tid, old_pid) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +/* + * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE + * adding sched_stat support to SCHED_FIFO/RR would be welcome. + */ +LTTNG_TRACEPOINT_EVENT_CLASS(sched_stat_template, + + TP_PROTO(struct task_struct *tsk, u64 delay), + + TP_ARGS(tsk, delay), + + TP_FIELDS( + ctf_array_text(char, comm, tsk->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, tsk->pid) + ctf_integer(u64, delay, delay) + ) +) + + +/* + * Tracepoint for accounting wait time (time the task is runnable + * but not actually running due to scheduler contention). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_stat_template, sched_stat_wait, + TP_PROTO(struct task_struct *tsk, u64 delay), + TP_ARGS(tsk, delay)) + +/* + * Tracepoint for accounting sleep time (time the task is not runnable, + * including iowait, see below). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_stat_template, sched_stat_sleep, + TP_PROTO(struct task_struct *tsk, u64 delay), + TP_ARGS(tsk, delay)) + +/* + * Tracepoint for accounting iowait time (time the task is not runnable + * due to waiting on IO to complete). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_stat_template, sched_stat_iowait, + TP_PROTO(struct task_struct *tsk, u64 delay), + TP_ARGS(tsk, delay)) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +/* + * Tracepoint for accounting blocked time (time the task is in uninterruptible). + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_stat_template, sched_stat_blocked, + TP_PROTO(struct task_struct *tsk, u64 delay), + TP_ARGS(tsk, delay)) +#endif + +/* + * Tracepoint for accounting runtime (time the task is executing + * on a CPU). + */ +LTTNG_TRACEPOINT_EVENT(sched_stat_runtime, + + TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime), + + TP_ARGS(tsk, runtime, vruntime), + + TP_FIELDS( + ctf_array_text(char, comm, tsk->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, tsk->pid) + ctf_integer(u64, runtime, runtime) + ctf_integer(u64, vruntime, vruntime) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0) || \ + LTTNG_RT_KERNEL_RANGE(4,9,27,18, 4,10,0,0) || \ + LTTNG_RT_KERNEL_RANGE(4,11,5,1, 4,12,0,0)) +/* + * Tracepoint for showing priority inheritance modifying a tasks + * priority. + */ +LTTNG_TRACEPOINT_EVENT(sched_pi_setprio, + + TP_PROTO(struct task_struct *tsk, struct task_struct *pi_task), + + TP_ARGS(tsk, pi_task), + + TP_FIELDS( + ctf_array_text(char, comm, tsk->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, tsk->pid) + ctf_integer(int, oldprio, tsk->prio - MAX_RT_PRIO) + ctf_integer(int, newprio, pi_task ? pi_task->prio - MAX_RT_PRIO : tsk->prio - MAX_RT_PRIO) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +/* + * Tracepoint for showing priority inheritance modifying a tasks + * priority. + */ +LTTNG_TRACEPOINT_EVENT(sched_pi_setprio, + + TP_PROTO(struct task_struct *tsk, int newprio), + + TP_ARGS(tsk, newprio), + + TP_FIELDS( + ctf_array_text(char, comm, tsk->comm, TASK_COMM_LEN) + ctf_integer(pid_t, tid, tsk->pid) + ctf_integer(int, oldprio, tsk->prio - MAX_RT_PRIO) + ctf_integer(int, newprio, newprio - MAX_RT_PRIO) + ) +) +#endif + +#endif /* LTTNG_TRACE_SCHED_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/scsi.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/scsi.h new file mode 100644 index 000000000000..97ee050f45dc --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/scsi.h @@ -0,0 +1,498 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM scsi + +#if !defined(LTTNG_TRACE_SCSI_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_SCSI_H + +#include +#include +#include +#include +#include + +#ifndef _TRACE_SCSI_DEF +#define _TRACE_SCSI_DEF + +#define scsi_opcode_name(opcode) { opcode, #opcode } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) \ + || LTTNG_SLE_KERNEL_RANGE(4,4,9,36,0,0, 4,5,0,0,0,0)) + +#define show_opcode_name(val) \ + __print_symbolic(val, \ + scsi_opcode_name(TEST_UNIT_READY), \ + scsi_opcode_name(REZERO_UNIT), \ + scsi_opcode_name(REQUEST_SENSE), \ + scsi_opcode_name(FORMAT_UNIT), \ + scsi_opcode_name(READ_BLOCK_LIMITS), \ + scsi_opcode_name(REASSIGN_BLOCKS), \ + scsi_opcode_name(INITIALIZE_ELEMENT_STATUS), \ + scsi_opcode_name(READ_6), \ + scsi_opcode_name(WRITE_6), \ + scsi_opcode_name(SEEK_6), \ + scsi_opcode_name(READ_REVERSE), \ + scsi_opcode_name(WRITE_FILEMARKS), \ + scsi_opcode_name(SPACE), \ + scsi_opcode_name(INQUIRY), \ + scsi_opcode_name(RECOVER_BUFFERED_DATA), \ + scsi_opcode_name(MODE_SELECT), \ + scsi_opcode_name(RESERVE), \ + scsi_opcode_name(RELEASE), \ + scsi_opcode_name(COPY), \ + scsi_opcode_name(ERASE), \ + scsi_opcode_name(MODE_SENSE), \ + scsi_opcode_name(START_STOP), \ + scsi_opcode_name(RECEIVE_DIAGNOSTIC), \ + scsi_opcode_name(SEND_DIAGNOSTIC), \ + scsi_opcode_name(ALLOW_MEDIUM_REMOVAL), \ + scsi_opcode_name(SET_WINDOW), \ + scsi_opcode_name(READ_CAPACITY), \ + scsi_opcode_name(READ_10), \ + scsi_opcode_name(WRITE_10), \ + scsi_opcode_name(SEEK_10), \ + scsi_opcode_name(POSITION_TO_ELEMENT), \ + scsi_opcode_name(WRITE_VERIFY), \ + scsi_opcode_name(VERIFY), \ + scsi_opcode_name(SEARCH_HIGH), \ + scsi_opcode_name(SEARCH_EQUAL), \ + scsi_opcode_name(SEARCH_LOW), \ + scsi_opcode_name(SET_LIMITS), \ + scsi_opcode_name(PRE_FETCH), \ + scsi_opcode_name(READ_POSITION), \ + scsi_opcode_name(SYNCHRONIZE_CACHE), \ + scsi_opcode_name(LOCK_UNLOCK_CACHE), \ + scsi_opcode_name(READ_DEFECT_DATA), \ + scsi_opcode_name(MEDIUM_SCAN), \ + scsi_opcode_name(COMPARE), \ + scsi_opcode_name(COPY_VERIFY), \ + scsi_opcode_name(WRITE_BUFFER), \ + scsi_opcode_name(READ_BUFFER), \ + scsi_opcode_name(UPDATE_BLOCK), \ + scsi_opcode_name(READ_LONG), \ + scsi_opcode_name(WRITE_LONG), \ + scsi_opcode_name(CHANGE_DEFINITION), \ + scsi_opcode_name(WRITE_SAME), \ + scsi_opcode_name(UNMAP), \ + scsi_opcode_name(READ_TOC), \ + scsi_opcode_name(LOG_SELECT), \ + scsi_opcode_name(LOG_SENSE), \ + scsi_opcode_name(XDWRITEREAD_10), \ + scsi_opcode_name(MODE_SELECT_10), \ + scsi_opcode_name(RESERVE_10), \ + scsi_opcode_name(RELEASE_10), \ + scsi_opcode_name(MODE_SENSE_10), \ + scsi_opcode_name(PERSISTENT_RESERVE_IN), \ + scsi_opcode_name(PERSISTENT_RESERVE_OUT), \ + scsi_opcode_name(VARIABLE_LENGTH_CMD), \ + scsi_opcode_name(REPORT_LUNS), \ + scsi_opcode_name(MAINTENANCE_IN), \ + scsi_opcode_name(MAINTENANCE_OUT), \ + scsi_opcode_name(MOVE_MEDIUM), \ + scsi_opcode_name(EXCHANGE_MEDIUM), \ + scsi_opcode_name(READ_12), \ + scsi_opcode_name(WRITE_12), \ + scsi_opcode_name(WRITE_VERIFY_12), \ + scsi_opcode_name(SEARCH_HIGH_12), \ + scsi_opcode_name(SEARCH_EQUAL_12), \ + scsi_opcode_name(SEARCH_LOW_12), \ + scsi_opcode_name(READ_ELEMENT_STATUS), \ + scsi_opcode_name(SEND_VOLUME_TAG), \ + scsi_opcode_name(WRITE_LONG_2), \ + scsi_opcode_name(READ_16), \ + scsi_opcode_name(WRITE_16), \ + scsi_opcode_name(VERIFY_16), \ + scsi_opcode_name(WRITE_SAME_16), \ + scsi_opcode_name(ZBC_OUT), \ + scsi_opcode_name(ZBC_IN), \ + scsi_opcode_name(SERVICE_ACTION_IN_16), \ + scsi_opcode_name(READ_32), \ + scsi_opcode_name(WRITE_32), \ + scsi_opcode_name(WRITE_SAME_32), \ + scsi_opcode_name(ATA_16), \ + scsi_opcode_name(ATA_12)) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,327,0,0, 3,11,0,0,0,0)) + +#define show_opcode_name(val) \ + __print_symbolic(val, \ + scsi_opcode_name(TEST_UNIT_READY), \ + scsi_opcode_name(REZERO_UNIT), \ + scsi_opcode_name(REQUEST_SENSE), \ + scsi_opcode_name(FORMAT_UNIT), \ + scsi_opcode_name(READ_BLOCK_LIMITS), \ + scsi_opcode_name(REASSIGN_BLOCKS), \ + scsi_opcode_name(INITIALIZE_ELEMENT_STATUS), \ + scsi_opcode_name(READ_6), \ + scsi_opcode_name(WRITE_6), \ + scsi_opcode_name(SEEK_6), \ + scsi_opcode_name(READ_REVERSE), \ + scsi_opcode_name(WRITE_FILEMARKS), \ + scsi_opcode_name(SPACE), \ + scsi_opcode_name(INQUIRY), \ + scsi_opcode_name(RECOVER_BUFFERED_DATA), \ + scsi_opcode_name(MODE_SELECT), \ + scsi_opcode_name(RESERVE), \ + scsi_opcode_name(RELEASE), \ + scsi_opcode_name(COPY), \ + scsi_opcode_name(ERASE), \ + scsi_opcode_name(MODE_SENSE), \ + scsi_opcode_name(START_STOP), \ + scsi_opcode_name(RECEIVE_DIAGNOSTIC), \ + scsi_opcode_name(SEND_DIAGNOSTIC), \ + scsi_opcode_name(ALLOW_MEDIUM_REMOVAL), \ + scsi_opcode_name(SET_WINDOW), \ + scsi_opcode_name(READ_CAPACITY), \ + scsi_opcode_name(READ_10), \ + scsi_opcode_name(WRITE_10), \ + scsi_opcode_name(SEEK_10), \ + scsi_opcode_name(POSITION_TO_ELEMENT), \ + scsi_opcode_name(WRITE_VERIFY), \ + scsi_opcode_name(VERIFY), \ + scsi_opcode_name(SEARCH_HIGH), \ + scsi_opcode_name(SEARCH_EQUAL), \ + scsi_opcode_name(SEARCH_LOW), \ + scsi_opcode_name(SET_LIMITS), \ + scsi_opcode_name(PRE_FETCH), \ + scsi_opcode_name(READ_POSITION), \ + scsi_opcode_name(SYNCHRONIZE_CACHE), \ + scsi_opcode_name(LOCK_UNLOCK_CACHE), \ + scsi_opcode_name(READ_DEFECT_DATA), \ + scsi_opcode_name(MEDIUM_SCAN), \ + scsi_opcode_name(COMPARE), \ + scsi_opcode_name(COPY_VERIFY), \ + scsi_opcode_name(WRITE_BUFFER), \ + scsi_opcode_name(READ_BUFFER), \ + scsi_opcode_name(UPDATE_BLOCK), \ + scsi_opcode_name(READ_LONG), \ + scsi_opcode_name(WRITE_LONG), \ + scsi_opcode_name(CHANGE_DEFINITION), \ + scsi_opcode_name(WRITE_SAME), \ + scsi_opcode_name(UNMAP), \ + scsi_opcode_name(READ_TOC), \ + scsi_opcode_name(LOG_SELECT), \ + scsi_opcode_name(LOG_SENSE), \ + scsi_opcode_name(XDWRITEREAD_10), \ + scsi_opcode_name(MODE_SELECT_10), \ + scsi_opcode_name(RESERVE_10), \ + scsi_opcode_name(RELEASE_10), \ + scsi_opcode_name(MODE_SENSE_10), \ + scsi_opcode_name(PERSISTENT_RESERVE_IN), \ + scsi_opcode_name(PERSISTENT_RESERVE_OUT), \ + scsi_opcode_name(VARIABLE_LENGTH_CMD), \ + scsi_opcode_name(REPORT_LUNS), \ + scsi_opcode_name(MAINTENANCE_IN), \ + scsi_opcode_name(MAINTENANCE_OUT), \ + scsi_opcode_name(MOVE_MEDIUM), \ + scsi_opcode_name(EXCHANGE_MEDIUM), \ + scsi_opcode_name(READ_12), \ + scsi_opcode_name(WRITE_12), \ + scsi_opcode_name(WRITE_VERIFY_12), \ + scsi_opcode_name(SEARCH_HIGH_12), \ + scsi_opcode_name(SEARCH_EQUAL_12), \ + scsi_opcode_name(SEARCH_LOW_12), \ + scsi_opcode_name(READ_ELEMENT_STATUS), \ + scsi_opcode_name(SEND_VOLUME_TAG), \ + scsi_opcode_name(WRITE_LONG_2), \ + scsi_opcode_name(READ_16), \ + scsi_opcode_name(WRITE_16), \ + scsi_opcode_name(VERIFY_16), \ + scsi_opcode_name(WRITE_SAME_16), \ + scsi_opcode_name(SERVICE_ACTION_IN_16), \ + scsi_opcode_name(SAI_READ_CAPACITY_16), \ + scsi_opcode_name(SAI_GET_LBA_STATUS), \ + scsi_opcode_name(MI_REPORT_TARGET_PGS), \ + scsi_opcode_name(MO_SET_TARGET_PGS), \ + scsi_opcode_name(READ_32), \ + scsi_opcode_name(WRITE_32), \ + scsi_opcode_name(WRITE_SAME_32), \ + scsi_opcode_name(ATA_16), \ + scsi_opcode_name(ATA_12)) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) */ + +#define show_opcode_name(val) \ + __print_symbolic(val, \ + scsi_opcode_name(TEST_UNIT_READY), \ + scsi_opcode_name(REZERO_UNIT), \ + scsi_opcode_name(REQUEST_SENSE), \ + scsi_opcode_name(FORMAT_UNIT), \ + scsi_opcode_name(READ_BLOCK_LIMITS), \ + scsi_opcode_name(REASSIGN_BLOCKS), \ + scsi_opcode_name(INITIALIZE_ELEMENT_STATUS), \ + scsi_opcode_name(READ_6), \ + scsi_opcode_name(WRITE_6), \ + scsi_opcode_name(SEEK_6), \ + scsi_opcode_name(READ_REVERSE), \ + scsi_opcode_name(WRITE_FILEMARKS), \ + scsi_opcode_name(SPACE), \ + scsi_opcode_name(INQUIRY), \ + scsi_opcode_name(RECOVER_BUFFERED_DATA), \ + scsi_opcode_name(MODE_SELECT), \ + scsi_opcode_name(RESERVE), \ + scsi_opcode_name(RELEASE), \ + scsi_opcode_name(COPY), \ + scsi_opcode_name(ERASE), \ + scsi_opcode_name(MODE_SENSE), \ + scsi_opcode_name(START_STOP), \ + scsi_opcode_name(RECEIVE_DIAGNOSTIC), \ + scsi_opcode_name(SEND_DIAGNOSTIC), \ + scsi_opcode_name(ALLOW_MEDIUM_REMOVAL), \ + scsi_opcode_name(SET_WINDOW), \ + scsi_opcode_name(READ_CAPACITY), \ + scsi_opcode_name(READ_10), \ + scsi_opcode_name(WRITE_10), \ + scsi_opcode_name(SEEK_10), \ + scsi_opcode_name(POSITION_TO_ELEMENT), \ + scsi_opcode_name(WRITE_VERIFY), \ + scsi_opcode_name(VERIFY), \ + scsi_opcode_name(SEARCH_HIGH), \ + scsi_opcode_name(SEARCH_EQUAL), \ + scsi_opcode_name(SEARCH_LOW), \ + scsi_opcode_name(SET_LIMITS), \ + scsi_opcode_name(PRE_FETCH), \ + scsi_opcode_name(READ_POSITION), \ + scsi_opcode_name(SYNCHRONIZE_CACHE), \ + scsi_opcode_name(LOCK_UNLOCK_CACHE), \ + scsi_opcode_name(READ_DEFECT_DATA), \ + scsi_opcode_name(MEDIUM_SCAN), \ + scsi_opcode_name(COMPARE), \ + scsi_opcode_name(COPY_VERIFY), \ + scsi_opcode_name(WRITE_BUFFER), \ + scsi_opcode_name(READ_BUFFER), \ + scsi_opcode_name(UPDATE_BLOCK), \ + scsi_opcode_name(READ_LONG), \ + scsi_opcode_name(WRITE_LONG), \ + scsi_opcode_name(CHANGE_DEFINITION), \ + scsi_opcode_name(WRITE_SAME), \ + scsi_opcode_name(UNMAP), \ + scsi_opcode_name(READ_TOC), \ + scsi_opcode_name(LOG_SELECT), \ + scsi_opcode_name(LOG_SENSE), \ + scsi_opcode_name(XDWRITEREAD_10), \ + scsi_opcode_name(MODE_SELECT_10), \ + scsi_opcode_name(RESERVE_10), \ + scsi_opcode_name(RELEASE_10), \ + scsi_opcode_name(MODE_SENSE_10), \ + scsi_opcode_name(PERSISTENT_RESERVE_IN), \ + scsi_opcode_name(PERSISTENT_RESERVE_OUT), \ + scsi_opcode_name(VARIABLE_LENGTH_CMD), \ + scsi_opcode_name(REPORT_LUNS), \ + scsi_opcode_name(MAINTENANCE_IN), \ + scsi_opcode_name(MAINTENANCE_OUT), \ + scsi_opcode_name(MOVE_MEDIUM), \ + scsi_opcode_name(EXCHANGE_MEDIUM), \ + scsi_opcode_name(READ_12), \ + scsi_opcode_name(WRITE_12), \ + scsi_opcode_name(WRITE_VERIFY_12), \ + scsi_opcode_name(SEARCH_HIGH_12), \ + scsi_opcode_name(SEARCH_EQUAL_12), \ + scsi_opcode_name(SEARCH_LOW_12), \ + scsi_opcode_name(READ_ELEMENT_STATUS), \ + scsi_opcode_name(SEND_VOLUME_TAG), \ + scsi_opcode_name(WRITE_LONG_2), \ + scsi_opcode_name(READ_16), \ + scsi_opcode_name(WRITE_16), \ + scsi_opcode_name(VERIFY_16), \ + scsi_opcode_name(WRITE_SAME_16), \ + scsi_opcode_name(SERVICE_ACTION_IN), \ + scsi_opcode_name(SAI_READ_CAPACITY_16), \ + scsi_opcode_name(SAI_GET_LBA_STATUS), \ + scsi_opcode_name(MI_REPORT_TARGET_PGS), \ + scsi_opcode_name(MO_SET_TARGET_PGS), \ + scsi_opcode_name(READ_32), \ + scsi_opcode_name(WRITE_32), \ + scsi_opcode_name(WRITE_SAME_32), \ + scsi_opcode_name(ATA_16), \ + scsi_opcode_name(ATA_12)) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) */ + +#define scsi_hostbyte_name(result) { result, #result } +#define show_hostbyte_name(val) \ + __print_symbolic(val, \ + scsi_hostbyte_name(DID_OK), \ + scsi_hostbyte_name(DID_NO_CONNECT), \ + scsi_hostbyte_name(DID_BUS_BUSY), \ + scsi_hostbyte_name(DID_TIME_OUT), \ + scsi_hostbyte_name(DID_BAD_TARGET), \ + scsi_hostbyte_name(DID_ABORT), \ + scsi_hostbyte_name(DID_PARITY), \ + scsi_hostbyte_name(DID_ERROR), \ + scsi_hostbyte_name(DID_RESET), \ + scsi_hostbyte_name(DID_BAD_INTR), \ + scsi_hostbyte_name(DID_PASSTHROUGH), \ + scsi_hostbyte_name(DID_SOFT_ERROR), \ + scsi_hostbyte_name(DID_IMM_RETRY), \ + scsi_hostbyte_name(DID_REQUEUE), \ + scsi_hostbyte_name(DID_TRANSPORT_DISRUPTED), \ + scsi_hostbyte_name(DID_TRANSPORT_FAILFAST)) + +#define scsi_driverbyte_name(result) { result, #result } +#define show_driverbyte_name(val) \ + __print_symbolic(val, \ + scsi_driverbyte_name(DRIVER_OK), \ + scsi_driverbyte_name(DRIVER_BUSY), \ + scsi_driverbyte_name(DRIVER_SOFT), \ + scsi_driverbyte_name(DRIVER_MEDIA), \ + scsi_driverbyte_name(DRIVER_ERROR), \ + scsi_driverbyte_name(DRIVER_INVALID), \ + scsi_driverbyte_name(DRIVER_TIMEOUT), \ + scsi_driverbyte_name(DRIVER_HARD), \ + scsi_driverbyte_name(DRIVER_SENSE)) + +#define scsi_msgbyte_name(result) { result, #result } +#define show_msgbyte_name(val) \ + __print_symbolic(val, \ + scsi_msgbyte_name(COMMAND_COMPLETE), \ + scsi_msgbyte_name(EXTENDED_MESSAGE), \ + scsi_msgbyte_name(SAVE_POINTERS), \ + scsi_msgbyte_name(RESTORE_POINTERS), \ + scsi_msgbyte_name(DISCONNECT), \ + scsi_msgbyte_name(INITIATOR_ERROR), \ + scsi_msgbyte_name(ABORT_TASK_SET), \ + scsi_msgbyte_name(MESSAGE_REJECT), \ + scsi_msgbyte_name(NOP), \ + scsi_msgbyte_name(MSG_PARITY_ERROR), \ + scsi_msgbyte_name(LINKED_CMD_COMPLETE), \ + scsi_msgbyte_name(LINKED_FLG_CMD_COMPLETE), \ + scsi_msgbyte_name(TARGET_RESET), \ + scsi_msgbyte_name(ABORT_TASK), \ + scsi_msgbyte_name(CLEAR_TASK_SET), \ + scsi_msgbyte_name(INITIATE_RECOVERY), \ + scsi_msgbyte_name(RELEASE_RECOVERY), \ + scsi_msgbyte_name(CLEAR_ACA), \ + scsi_msgbyte_name(LOGICAL_UNIT_RESET), \ + scsi_msgbyte_name(SIMPLE_QUEUE_TAG), \ + scsi_msgbyte_name(HEAD_OF_QUEUE_TAG), \ + scsi_msgbyte_name(ORDERED_QUEUE_TAG), \ + scsi_msgbyte_name(IGNORE_WIDE_RESIDUE), \ + scsi_msgbyte_name(ACA), \ + scsi_msgbyte_name(QAS_REQUEST), \ + scsi_msgbyte_name(BUS_DEVICE_RESET), \ + scsi_msgbyte_name(ABORT)) + +#define scsi_statusbyte_name(result) { result, #result } +#define show_statusbyte_name(val) \ + __print_symbolic(val, \ + scsi_statusbyte_name(SAM_STAT_GOOD), \ + scsi_statusbyte_name(SAM_STAT_CHECK_CONDITION), \ + scsi_statusbyte_name(SAM_STAT_CONDITION_MET), \ + scsi_statusbyte_name(SAM_STAT_BUSY), \ + scsi_statusbyte_name(SAM_STAT_INTERMEDIATE), \ + scsi_statusbyte_name(SAM_STAT_INTERMEDIATE_CONDITION_MET), \ + scsi_statusbyte_name(SAM_STAT_RESERVATION_CONFLICT), \ + scsi_statusbyte_name(SAM_STAT_COMMAND_TERMINATED), \ + scsi_statusbyte_name(SAM_STAT_TASK_SET_FULL), \ + scsi_statusbyte_name(SAM_STAT_ACA_ACTIVE), \ + scsi_statusbyte_name(SAM_STAT_TASK_ABORTED)) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +#define scsi_prot_op_name(result) { result, #result } +#define show_prot_op_name(val) \ + __print_symbolic(val, \ + scsi_prot_op_name(SCSI_PROT_NORMAL), \ + scsi_prot_op_name(SCSI_PROT_READ_INSERT), \ + scsi_prot_op_name(SCSI_PROT_WRITE_STRIP), \ + scsi_prot_op_name(SCSI_PROT_READ_STRIP), \ + scsi_prot_op_name(SCSI_PROT_WRITE_INSERT), \ + scsi_prot_op_name(SCSI_PROT_READ_PASS), \ + scsi_prot_op_name(SCSI_PROT_WRITE_PASS)) +#endif + +const char *scsi_trace_parse_cdb(struct trace_seq*, unsigned char*, int); +#define __parse_cdb(cdb, len) scsi_trace_parse_cdb(p, cdb, len) +#endif + +LTTNG_TRACEPOINT_EVENT(scsi_dispatch_cmd_start, + + TP_PROTO(struct scsi_cmnd *cmd), + + TP_ARGS(cmd), + + TP_FIELDS( + ctf_integer(unsigned int, host_no, cmd->device->host->host_no) + ctf_integer(unsigned int, channel, cmd->device->channel) + ctf_integer(unsigned int, id, cmd->device->id) + ctf_integer(unsigned int, lun, cmd->device->lun) + ctf_integer(unsigned int, opcode, cmd->cmnd[0]) + ctf_integer(unsigned int, cmd_len, cmd->cmd_len) + ctf_integer(unsigned int, data_sglen, scsi_sg_count(cmd)) + ctf_integer(unsigned int, prot_sglen, scsi_prot_sg_count(cmd)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(unsigned char, prot_op, scsi_get_prot_op(cmd)) +#endif + ctf_sequence_hex(unsigned char, cmnd, cmd->cmnd, u32, cmd->cmd_len) + ) +) + +LTTNG_TRACEPOINT_EVENT(scsi_dispatch_cmd_error, + + TP_PROTO(struct scsi_cmnd *cmd, int rtn), + + TP_ARGS(cmd, rtn), + + TP_FIELDS( + ctf_integer(unsigned int, host_no, cmd->device->host->host_no) + ctf_integer(unsigned int, channel, cmd->device->channel) + ctf_integer(unsigned int, id, cmd->device->id) + ctf_integer(unsigned int, lun, cmd->device->lun) + ctf_integer(int, rtn, rtn) + ctf_integer(unsigned int, opcode, cmd->cmnd[0]) + ctf_integer(unsigned int, cmd_len, cmd->cmd_len) + ctf_integer(unsigned int, data_sglen, scsi_sg_count(cmd)) + ctf_integer(unsigned int, prot_sglen, scsi_prot_sg_count(cmd)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(unsigned char, prot_op, scsi_get_prot_op(cmd)) +#endif + ctf_sequence_hex(unsigned char, cmnd, cmd->cmnd, u32, cmd->cmd_len) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(scsi_cmd_done_timeout_template, + + TP_PROTO(struct scsi_cmnd *cmd), + + TP_ARGS(cmd), + + TP_FIELDS( + ctf_integer(unsigned int, host_no, cmd->device->host->host_no) + ctf_integer(unsigned int, channel, cmd->device->channel) + ctf_integer(unsigned int, id, cmd->device->id) + ctf_integer(unsigned int, lun, cmd->device->lun) + ctf_integer(int, result, cmd->result) + ctf_integer(unsigned int, opcode, cmd->cmnd[0]) + ctf_integer(unsigned int, cmd_len, cmd->cmd_len) + ctf_integer(unsigned int, data_sglen, scsi_sg_count(cmd)) + ctf_integer(unsigned int, prot_sglen, scsi_prot_sg_count(cmd)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + ctf_integer(unsigned char, prot_op, scsi_get_prot_op(cmd)) +#endif + ctf_sequence_hex(unsigned char, cmnd, cmd->cmnd, u32, cmd->cmd_len) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_done, + TP_PROTO(struct scsi_cmnd *cmd), + TP_ARGS(cmd)) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_timeout, + TP_PROTO(struct scsi_cmnd *cmd), + TP_ARGS(cmd)) + +LTTNG_TRACEPOINT_EVENT(scsi_eh_wakeup, + + TP_PROTO(struct Scsi_Host *shost), + + TP_ARGS(shost), + + TP_FIELDS( + ctf_integer(unsigned int, host_no, shost->host_no) + ) +) + +#endif /* LTTNG_TRACE_SCSI_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/signal.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/signal.h new file mode 100644 index 000000000000..7c44cb14fc25 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/signal.h @@ -0,0 +1,202 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM signal + +#if !defined(LTTNG_TRACE_SIGNAL_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_SIGNAL_H + +#include +#include + +#ifndef _TRACE_SIGNAL_DEF +#define _TRACE_SIGNAL_DEF +#include +#include +#undef LTTNG_FIELDS_SIGINFO +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) +#define LTTNG_FIELDS_SIGINFO(info) \ + ctf_integer(int, errno, \ + (info == SEND_SIG_NOINFO || info == SEND_SIG_PRIV) ? \ + 0 : \ + info->si_errno) \ + ctf_integer(int, code, \ + (info == SEND_SIG_NOINFO) ? \ + SI_USER : \ + ((info == SEND_SIG_PRIV) ? SI_KERNEL : info->si_code)) +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) */ +#define LTTNG_FIELDS_SIGINFO(info) \ + ctf_integer(int, errno, \ + (info == SEND_SIG_NOINFO || info == SEND_SIG_FORCED || info == SEND_SIG_PRIV) ? \ + 0 : \ + info->si_errno) \ + ctf_integer(int, code, \ + (info == SEND_SIG_NOINFO || info == SEND_SIG_FORCED) ? \ + SI_USER : \ + ((info == SEND_SIG_PRIV) ? SI_KERNEL : info->si_code)) +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) */ +#endif /* _TRACE_SIGNAL_DEF */ + +/** + * signal_generate - called when a signal is generated + * @sig: signal number + * @info: pointer to struct siginfo + * @task: pointer to struct task_struct + * + * Current process sends a 'sig' signal to 'task' process with + * 'info' siginfo. If 'info' is SEND_SIG_NOINFO or SEND_SIG_PRIV, + * 'info' is not a pointer and you can't access its field. Instead, + * SEND_SIG_NOINFO means that si_code is SI_USER, and SEND_SIG_PRIV + * means that si_code is SI_KERNEL. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(signal_generate, + + TP_PROTO(int sig, struct kernel_siginfo *info, struct task_struct *task, + int group, int result), + + TP_ARGS(sig, info, task, group, result), + + TP_FIELDS( + ctf_integer(int, sig, sig) + LTTNG_FIELDS_SIGINFO(info) + ctf_array_text(char, comm, task->comm, TASK_COMM_LEN) + ctf_integer(pid_t, pid, task->pid) + ctf_integer(int, group, group) + ctf_integer(int, result, result) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(signal_generate, + + TP_PROTO(int sig, struct siginfo *info, struct task_struct *task, + int group, int result), + + TP_ARGS(sig, info, task, group, result), + + TP_FIELDS( + ctf_integer(int, sig, sig) + LTTNG_FIELDS_SIGINFO(info) + ctf_array_text(char, comm, task->comm, TASK_COMM_LEN) + ctf_integer(pid_t, pid, task->pid) + ctf_integer(int, group, group) + ctf_integer(int, result, result) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(signal_generate, + + TP_PROTO(int sig, struct siginfo *info, struct task_struct *task), + + TP_ARGS(sig, info, task), + + TP_FIELDS( + ctf_integer(int, sig, sig) + LTTNG_FIELDS_SIGINFO(info) + ctf_array_text(char, comm, task->comm, TASK_COMM_LEN) + ctf_integer(pid_t, pid, task->pid) + ) +) +#endif + +/** + * signal_deliver - called when a signal is delivered + * @sig: signal number + * @info: pointer to struct siginfo + * @ka: pointer to struct k_sigaction + * + * A 'sig' signal is delivered to current process with 'info' siginfo, + * and it will be handled by 'ka'. ka->sa.sa_handler can be SIG_IGN or + * SIG_DFL. + * Note that some signals reported by signal_generate tracepoint can be + * lost, ignored or modified (by debugger) before hitting this tracepoint. + * This means, this can show which signals are actually delivered, but + * matching generated signals and delivered signals may not be correct. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) +LTTNG_TRACEPOINT_EVENT(signal_deliver, + + TP_PROTO(int sig, struct kernel_siginfo *info, struct k_sigaction *ka), + + TP_ARGS(sig, info, ka), + + TP_FIELDS( + ctf_integer(int, sig, sig) + LTTNG_FIELDS_SIGINFO(info) + ctf_integer(unsigned long, sa_handler, (unsigned long) ka->sa.sa_handler) + ctf_integer(unsigned long, sa_flags, ka->sa.sa_flags) + ) +) +#else +LTTNG_TRACEPOINT_EVENT(signal_deliver, + + TP_PROTO(int sig, struct siginfo *info, struct k_sigaction *ka), + + TP_ARGS(sig, info, ka), + + TP_FIELDS( + ctf_integer(int, sig, sig) + LTTNG_FIELDS_SIGINFO(info) + ctf_integer(unsigned long, sa_handler, (unsigned long) ka->sa.sa_handler) + ctf_integer(unsigned long, sa_flags, ka->sa.sa_flags) + ) +) +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(signal_queue_overflow, + + TP_PROTO(int sig, int group, struct siginfo *info), + + TP_ARGS(sig, group, info), + + TP_FIELDS( + ctf_integer(int, sig, sig) + ctf_integer(int, group, group) + LTTNG_FIELDS_SIGINFO(info) + ) +) + +/** + * signal_overflow_fail - called when signal queue is overflow + * @sig: signal number + * @group: signal to process group or not (bool) + * @info: pointer to struct siginfo + * + * Kernel fails to generate 'sig' signal with 'info' siginfo, because + * siginfo queue is overflow, and the signal is dropped. + * 'group' is not 0 if the signal will be sent to a process group. + * 'sig' is always one of RT signals. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(signal_queue_overflow, signal_overflow_fail, + + TP_PROTO(int sig, int group, struct siginfo *info), + + TP_ARGS(sig, group, info) +) + +/** + * signal_lose_info - called when siginfo is lost + * @sig: signal number + * @group: signal to process group or not (bool) + * @info: pointer to struct siginfo + * + * Kernel generates 'sig' signal but loses 'info' siginfo, because siginfo + * queue is overflow. + * 'group' is not 0 if the signal will be sent to a process group. + * 'sig' is always one of non-RT signals. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(signal_queue_overflow, signal_lose_info, + + TP_PROTO(int sig, int group, struct siginfo *info), + + TP_ARGS(sig, group, info) +) +#endif + +#endif /* LTTNG_TRACE_SIGNAL_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/skb.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/skb.h new file mode 100644 index 000000000000..6d3fd45c61f5 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/skb.h @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM skb + +#if !defined(LTTNG_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_SKB_H + +#include +#include +#include +#include + +/* + * Tracepoint for free an sk_buff: + */ +LTTNG_TRACEPOINT_EVENT_MAP(kfree_skb, + + skb_kfree, + + TP_PROTO(struct sk_buff *skb, void *location), + + TP_ARGS(skb, location), + + TP_FIELDS( + ctf_integer_hex(void *, skbaddr, skb) + ctf_integer_hex(void *, location, location) + ctf_integer_network(unsigned short, protocol, skb->protocol) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +LTTNG_TRACEPOINT_EVENT_MAP(consume_skb, + + skb_consume, + + TP_PROTO(struct sk_buff *skb), + + TP_ARGS(skb), + + TP_FIELDS( + ctf_integer_hex(void *, skbaddr, skb) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) +LTTNG_TRACEPOINT_EVENT(skb_copy_datagram_iovec, + + TP_PROTO(const struct sk_buff *skb, int len), + + TP_ARGS(skb, len), + + TP_FIELDS( + ctf_integer_hex(const void *, skbaddr, skb) + ctf_integer(int, len, len) + ) +) +#endif + +#endif /* LTTNG_TRACE_SKB_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sock.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sock.h new file mode 100644 index 000000000000..a1032b3390fa --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/sock.h @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM sock + +#if !defined(LTTNG_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_SOCK_H + +#include +#include +#include + +LTTNG_TRACEPOINT_EVENT(sock_rcvqueue_full, + + TP_PROTO(struct sock *sk, struct sk_buff *skb), + + TP_ARGS(sk, skb), + + TP_FIELDS( + ctf_integer(int, rmem_alloc, atomic_read(&sk->sk_rmem_alloc)) + ctf_integer(unsigned int, truesize, skb->truesize) + ctf_integer(int, sk_rcvbuf, sk->sk_rcvbuf) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) + +LTTNG_TRACEPOINT_EVENT(sock_exceed_buf_limit, + + TP_PROTO(struct sock *sk, struct proto *prot, long allocated, int kind), + + TP_ARGS(sk, prot, allocated, kind), + + TP_FIELDS( + ctf_string(name, prot->name) + ctf_array(long, sysctl_mem, prot->sysctl_mem, 3) + ctf_integer(long, allocated, allocated) + ctf_integer(int, sysctl_rmem, sk_get_rmem0(sk, prot)) + ctf_integer(int, rmem_alloc, atomic_read(&sk->sk_rmem_alloc)) + ctf_integer(int, sysctl_wmem, sk_get_wmem0(sk, prot)) + ctf_integer(int, wmem_alloc, refcount_read(&sk->sk_wmem_alloc)) + ctf_integer(int, wmem_queued, sk->sk_wmem_queued) + ctf_integer(int, kind, kind) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) + +LTTNG_TRACEPOINT_EVENT(sock_exceed_buf_limit, + + TP_PROTO(struct sock *sk, struct proto *prot, long allocated), + + TP_ARGS(sk, prot, allocated), + + TP_FIELDS( + ctf_string(name, prot->name) + ctf_array(long, sysctl_mem, prot->sysctl_mem, 3) + ctf_integer(long, allocated, allocated) + ctf_integer(int, sysctl_rmem, sk_get_rmem0(sk, prot)) + ctf_integer(int, rmem_alloc, atomic_read(&sk->sk_rmem_alloc)) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) */ + +LTTNG_TRACEPOINT_EVENT(sock_exceed_buf_limit, + + TP_PROTO(struct sock *sk, struct proto *prot, long allocated), + + TP_ARGS(sk, prot, allocated), + + TP_FIELDS( + ctf_string(name, prot->name) + ctf_array(long, sysctl_mem, prot->sysctl_mem, 3) + ctf_integer(long, allocated, allocated) + ctf_integer(int, sysctl_rmem, prot->sysctl_rmem[0]) + ctf_integer(int, rmem_alloc, atomic_read(&sk->sk_rmem_alloc)) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) */ + +#endif /* LTTNG_TRACE_SOCK_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/timer.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/timer.h new file mode 100644 index 000000000000..1a45d82b38b7 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/timer.h @@ -0,0 +1,397 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM timer + +#if !defined(LTTNG_TRACE_TIMER_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_TIMER_H + +#include + +#ifndef _TRACE_TIMER_DEF_ +#define _TRACE_TIMER_DEF_ +#include +#include +#include + +struct timer_list; + +#endif /* _TRACE_TIMER_DEF_ */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) +#define lttng_ktime_get_tv64(kt) (kt) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +#define lttng_ktime_get_tv64(kt) ((kt).tv64) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(timer_class, + + TP_PROTO(struct timer_list *timer), + + TP_ARGS(timer), + + TP_FIELDS( + ctf_integer_hex(void *, timer, timer) + ) +) + +/** + * timer_init - called when the timer is initialized + * @timer: pointer to struct timer_list + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(timer_class, timer_init, + + TP_PROTO(struct timer_list *timer), + + TP_ARGS(timer) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) || \ + LTTNG_RHEL_KERNEL_RANGE(3,10,0,957,0,0, 3,11,0,0,0,0)) +/** + * timer_start - called when the timer is started + * @timer: pointer to struct timer_list + * @expires: the timers expiry time + * @flags: the timers expiry time + */ +LTTNG_TRACEPOINT_EVENT(timer_start, + + TP_PROTO(struct timer_list *timer, unsigned long expires, + unsigned int flags), + + TP_ARGS(timer, expires, flags), + + TP_FIELDS( + ctf_integer_hex(void *, timer, timer) + ctf_integer_hex(void *, function, timer->function) + ctf_integer(unsigned long, expires, expires) + ctf_integer(unsigned long, now, jiffies) + ctf_integer(unsigned int, flags, flags) + ) +) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ +/** + * timer_start - called when the timer is started + * @timer: pointer to struct timer_list + * @expires: the timers expiry time + */ +LTTNG_TRACEPOINT_EVENT(timer_start, + + TP_PROTO(struct timer_list *timer, unsigned long expires), + + TP_ARGS(timer, expires), + + TP_FIELDS( + ctf_integer_hex(void *, timer, timer) + ctf_integer_hex(void *, function, timer->function) + ctf_integer(unsigned long, expires, expires) + ctf_integer(unsigned long, now, jiffies) + ) +) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0)) +/** + * timer_expire_entry - called immediately before the timer callback + * @timer: pointer to struct timer_list + * + * Allows to determine the timer latency. + */ +LTTNG_TRACEPOINT_EVENT(timer_expire_entry, + + TP_PROTO(struct timer_list *timer, unsigned long baseclk), + + TP_ARGS(timer, baseclk), + + TP_FIELDS( + ctf_integer_hex(void *, timer, timer) + ctf_integer(unsigned long, now, jiffies) + ctf_integer_hex(void *, function, timer->function) + ctf_integer(unsigned long, baseclk, baseclk) + ) +) +#else +/** + * timer_expire_entry - called immediately before the timer callback + * @timer: pointer to struct timer_list + * + * Allows to determine the timer latency. + */ +LTTNG_TRACEPOINT_EVENT(timer_expire_entry, + + TP_PROTO(struct timer_list *timer), + + TP_ARGS(timer), + + TP_FIELDS( + ctf_integer_hex(void *, timer, timer) + ctf_integer(unsigned long, now, jiffies) + ctf_integer_hex(void *, function, timer->function) + ) +) +#endif + +/** + * timer_expire_exit - called immediately after the timer callback returns + * @timer: pointer to struct timer_list + * + * When used in combination with the timer_expire_entry tracepoint we can + * determine the runtime of the timer callback function. + * + * NOTE: Do NOT derefernce timer in TP_fast_assign. The pointer might + * be invalid. We solely track the pointer. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(timer_class, timer_expire_exit, + + TP_PROTO(struct timer_list *timer), + + TP_ARGS(timer) +) + +/** + * timer_cancel - called when the timer is canceled + * @timer: pointer to struct timer_list + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(timer_class, timer_cancel, + + TP_PROTO(struct timer_list *timer), + + TP_ARGS(timer) +) + +/** + * hrtimer_init - called when the hrtimer is initialized + * @timer: pointer to struct hrtimer + * @clockid: the hrtimers clock + * @mode: the hrtimers mode + */ +LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_init, + + timer_hrtimer_init, + + TP_PROTO(struct hrtimer *hrtimer, clockid_t clockid, + enum hrtimer_mode mode), + + TP_ARGS(hrtimer, clockid, mode), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ctf_integer(clockid_t, clockid, clockid) + ctf_integer(enum hrtimer_mode, mode, mode) + ) +) + +/** + * hrtimer_start - called when the hrtimer is started + * @timer: pointer to struct hrtimer + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0) || \ + LTTNG_RT_KERNEL_RANGE(4,14,0,0, 4,15,0,0)) +LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, + + timer_hrtimer_start, + + TP_PROTO(struct hrtimer *hrtimer, enum hrtimer_mode mode), + + TP_ARGS(hrtimer, mode), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ctf_integer_hex(void *, function, hrtimer->function) + ctf_integer(s64, expires, + lttng_ktime_get_tv64(hrtimer_get_expires(hrtimer))) + ctf_integer(s64, softexpires, + lttng_ktime_get_tv64(hrtimer_get_softexpires(hrtimer))) + ctf_integer(enum hrtimer_mode, mode, mode) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_start, + + timer_hrtimer_start, + + TP_PROTO(struct hrtimer *hrtimer), + + TP_ARGS(hrtimer), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ctf_integer_hex(void *, function, hrtimer->function) + ctf_integer(s64, expires, + lttng_ktime_get_tv64(hrtimer_get_expires(hrtimer))) + ctf_integer(s64, softexpires, + lttng_ktime_get_tv64(hrtimer_get_softexpires(hrtimer))) + ) +) +#endif + +/** + * htimmer_expire_entry - called immediately before the hrtimer callback + * @timer: pointer to struct hrtimer + * @now: pointer to variable which contains current time of the + * timers base. + * + * Allows to determine the timer latency. + */ +LTTNG_TRACEPOINT_EVENT_MAP(hrtimer_expire_entry, + + timer_hrtimer_expire_entry, + + TP_PROTO(struct hrtimer *hrtimer, ktime_t *now), + + TP_ARGS(hrtimer, now), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ctf_integer(s64, now, lttng_ktime_get_tv64(*now)) + ctf_integer_hex(void *, function, hrtimer->function) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(timer_hrtimer_class, + + TP_PROTO(struct hrtimer *hrtimer), + + TP_ARGS(hrtimer), + + TP_FIELDS( + ctf_integer_hex(void *, hrtimer, hrtimer) + ) +) + +/** + * hrtimer_expire_exit - called immediately after the hrtimer callback returns + * @timer: pointer to struct hrtimer + * + * When used in combination with the hrtimer_expire_entry tracepoint we can + * determine the runtime of the callback function. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(timer_hrtimer_class, hrtimer_expire_exit, + + timer_hrtimer_expire_exit, + + TP_PROTO(struct hrtimer *hrtimer), + + TP_ARGS(hrtimer) +) + +/** + * hrtimer_cancel - called when the hrtimer is canceled + * @hrtimer: pointer to struct hrtimer + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(timer_hrtimer_class, hrtimer_cancel, + + timer_hrtimer_cancel, + + TP_PROTO(struct hrtimer *hrtimer), + + TP_ARGS(hrtimer) +) + +/** + * itimer_state - called when itimer is started or canceled + * @which: name of the interval timer + * @value: the itimers value, itimer is canceled if value->it_value is + * zero, otherwise it is started + * @expires: the itimers expiry time + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)) +LTTNG_TRACEPOINT_EVENT_MAP(itimer_state, + + timer_itimer_state, + + TP_PROTO(int which, const struct itimerspec64 *const value, + unsigned long long expires), + + TP_ARGS(which, value, expires), + + TP_FIELDS( + ctf_integer(int, which, which) + ctf_integer(unsigned long long, expires, expires) + ctf_integer(long, value_sec, value->it_value.tv_sec) + ctf_integer(long, value_nsec, value->it_value.tv_nsec) + ctf_integer(long, interval_sec, value->it_interval.tv_sec) + ctf_integer(long, interval_nsec, value->it_interval.tv_nsec) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT_MAP(itimer_state, + + timer_itimer_state, + + TP_PROTO(int which, const struct itimerval *const value, + unsigned long long expires), + + TP_ARGS(which, value, expires), + + TP_FIELDS( + ctf_integer(int, which, which) + ctf_integer(unsigned long long, expires, expires) + ctf_integer(long, value_sec, value->it_value.tv_sec) + ctf_integer(long, value_usec, value->it_value.tv_usec) + ctf_integer(long, interval_sec, value->it_interval.tv_sec) + ctf_integer(long, interval_usec, value->it_interval.tv_usec) + ) +) +#else /* if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +LTTNG_TRACEPOINT_EVENT_MAP(itimer_state, + + timer_itimer_state, + + TP_PROTO(int which, const struct itimerval *const value, + cputime_t expires), + + TP_ARGS(which, value, expires), + + TP_FIELDS( + ctf_integer(int, which, which) + ctf_integer(cputime_t, expires, expires) + ctf_integer(long, value_sec, value->it_value.tv_sec) + ctf_integer(long, value_usec, value->it_value.tv_usec) + ctf_integer(long, interval_sec, value->it_interval.tv_sec) + ctf_integer(long, interval_usec, value->it_interval.tv_usec) + ) +) +#endif /* #else (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +/** + * itimer_expire - called when itimer expires + * @which: type of the interval timer + * @pid: pid of the process which owns the timer + * @now: current time, used to calculate the latency of itimer + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +LTTNG_TRACEPOINT_EVENT_MAP(itimer_expire, + + timer_itimer_expire, + + TP_PROTO(int which, struct pid *pid, unsigned long long now), + + TP_ARGS(which, pid, now), + + TP_FIELDS( + ctf_integer(int , which, which) + ctf_integer(pid_t, pid, pid_nr(pid)) + ctf_integer(unsigned long long, now, now) + ) +) +#else /* if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +LTTNG_TRACEPOINT_EVENT_MAP(itimer_expire, + + timer_itimer_expire, + + TP_PROTO(int which, struct pid *pid, cputime_t now), + + TP_ARGS(which, pid, now), + + TP_FIELDS( + ctf_integer(int , which, which) + ctf_integer(pid_t, pid, pid_nr(pid)) + ctf_integer(cputime_t, now, now) + ) +) +#endif /* #else (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +#endif /* LTTNG_TRACE_TIMER_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/udp.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/udp.h new file mode 100644 index 000000000000..84a2e99622da --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/udp.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM udp + +#if !defined(LTTNG_TRACE_UDP_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_UDP_H + +#include +#include + +LTTNG_TRACEPOINT_EVENT(udp_fail_queue_rcv_skb, + + TP_PROTO(int rc, struct sock *sk), + + TP_ARGS(rc, sk), + + TP_FIELDS( + ctf_integer(int, rc, rc) + ctf_integer(__u16, lport, inet_sk(sk)->inet_num) + ) +) + +#endif /* LTTNG_TRACE_UDP_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/v4l2.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/v4l2.h new file mode 100644 index 000000000000..6b7c78fde36d --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/v4l2.h @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM v4l2 + +#if !defined(LTTNG_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_V4L2_H + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(v4l2_class, + + TP_PROTO(int minor, struct v4l2_buffer *buf), + + TP_ARGS(minor, buf), + + TP_FIELDS( + ctf_integer(int, minor, minor) + ctf_integer(u32, index, buf->index) + ctf_integer(u32, type, buf->type) + ctf_integer(u32, bytesused, buf->bytesused) + ctf_integer(u32, flags, buf->flags) + ctf_integer(u32, field, buf->field) + ctf_integer(s64, timestamp, v4l2_buffer_get_timestamp(buf)) + ctf_integer(u32, timecode_type, buf->timecode.type) + ctf_integer(u32, timecode_flags, buf->timecode.flags) + ctf_integer(u8, timecode_frames, buf->timecode.frames) + ctf_integer(u8, timecode_seconds, buf->timecode.seconds) + ctf_integer(u8, timecode_minutes, buf->timecode.minutes) + ctf_integer(u8, timecode_hours, buf->timecode.hours) + ctf_array(u8, timecode_userbits, buf->timecode.userbits, 4) + ctf_integer(u32, sequence, buf->sequence) + ) +) +#else +LTTNG_TRACEPOINT_EVENT_CLASS(v4l2_class, + + TP_PROTO(int minor, struct v4l2_buffer *buf), + + TP_ARGS(minor, buf), + + TP_FIELDS( + ctf_integer(int, minor, minor) + ctf_integer(u32, index, buf->index) + ctf_integer(u32, type, buf->type) + ctf_integer(u32, bytesused, buf->bytesused) + ctf_integer(u32, flags, buf->flags) + ctf_integer(u32, field, buf->field) + ctf_integer(s64, timestamp, timeval_to_ns(&buf->timestamp)) + ctf_integer(u32, timecode_type, buf->timecode.type) + ctf_integer(u32, timecode_flags, buf->timecode.flags) + ctf_integer(u8, timecode_frames, buf->timecode.frames) + ctf_integer(u8, timecode_seconds, buf->timecode.seconds) + ctf_integer(u8, timecode_minutes, buf->timecode.minutes) + ctf_integer(u8, timecode_hours, buf->timecode.hours) + ctf_array(u8, timecode_userbits, buf->timecode.userbits, 4) + ctf_integer(u32, sequence, buf->sequence) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_INSTANCE(v4l2_class, + v4l2_dqbuf, + + TP_PROTO(int minor, struct v4l2_buffer *buf), + + TP_ARGS(minor, buf) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(v4l2_class, + + v4l2_qbuf, + + TP_PROTO(int minor, struct v4l2_buffer *buf), + + TP_ARGS(minor, buf) +) + +#endif /* if !defined(LTTNG_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ) */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/workqueue.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/workqueue.h new file mode 100644 index 000000000000..0f5b9386f750 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/workqueue.h @@ -0,0 +1,193 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM workqueue + +#if !defined(LTTNG_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_WORKQUEUE_H + +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + +#ifndef _TRACE_WORKQUEUE_DEF_ +#define _TRACE_WORKQUEUE_DEF_ + +struct worker; +struct global_cwq; + +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(workqueue_work, + + TP_PROTO(struct work_struct *work), + + TP_ARGS(work), + + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +/** + * workqueue_queue_work - called when a work gets queued + * @req_cpu: the requested cpu + * @cwq: pointer to struct cpu_workqueue_struct + * @work: pointer to struct work_struct + * + * This event occurs when a work is queued immediately or once a + * delayed work is actually queued on a workqueue (ie: once the delay + * has been reached). + */ +LTTNG_TRACEPOINT_EVENT(workqueue_queue_work, + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq, + struct work_struct *work), + + TP_ARGS(req_cpu, pwq, work), +#else + TP_PROTO(unsigned int req_cpu, struct cpu_workqueue_struct *cwq, + struct work_struct *work), + + TP_ARGS(req_cpu, cwq, work), +#endif + + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, work->func) + ctf_integer(unsigned int, req_cpu, req_cpu) + ) +) + +/** + * workqueue_activate_work - called when a work gets activated + * @work: pointer to struct work_struct + * + * This event occurs when a queued work is put on the active queue, + * which happens immediately after queueing unless @max_active limit + * is reached. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue_work, workqueue_activate_work, + + TP_PROTO(struct work_struct *work), + + TP_ARGS(work) +) +#endif + +/** + * workqueue_execute_start - called immediately before the workqueue callback + * @work: pointer to struct work_struct + * + * Allows to track workqueue execution. + */ +LTTNG_TRACEPOINT_EVENT(workqueue_execute_start, + + TP_PROTO(struct work_struct *work), + + TP_ARGS(work), + + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, work->func) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +/** + * workqueue_execute_end - called immediately after the workqueue callback + * @work: pointer to struct work_struct + * @function: pointer to worker function + * + * Allows to track workqueue execution. + */ +LTTNG_TRACEPOINT_EVENT(workqueue_execute_end, + + TP_PROTO(struct work_struct *work, work_func_t function), + + TP_ARGS(work, function), + + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, function) + ) +) +#else +/** + * workqueue_execute_end - called immediately after the workqueue callback + * @work: pointer to struct work_struct + * + * Allows to track workqueue execution. + */ +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue_work, workqueue_execute_end, + + TP_PROTO(struct work_struct *work), + + TP_ARGS(work) +) +#endif + +#else + +LTTNG_TRACEPOINT_EVENT_CLASS(workqueue, + + TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), + + TP_ARGS(wq_thread, work), + + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ctf_integer_hex(work_func_t, func, work->func) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue, workqueue_insertion, + + TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), + + TP_ARGS(wq_thread, work) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue, workqueue_execution, + + TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), + + TP_ARGS(wq_thread, work) +) + +/* Trace the creation of one workqueue thread on a cpu */ +LTTNG_TRACEPOINT_EVENT(workqueue_creation, + + TP_PROTO(struct task_struct *wq_thread, int cpu), + + TP_ARGS(wq_thread, cpu), + + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ctf_integer(int, cpu, cpu) + ) +) + +LTTNG_TRACEPOINT_EVENT(workqueue_destruction, + + TP_PROTO(struct task_struct *wq_thread), + + TP_ARGS(wq_thread), + + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ) +) + +#endif + +#endif /* LTTNG_TRACE_WORKQUEUE_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/events/lttng-module/writeback.h b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/writeback.h new file mode 100644 index 000000000000..420cd20f468b --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/events/lttng-module/writeback.h @@ -0,0 +1,793 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM writeback + +#if !defined(LTTNG_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_WRITEBACK_H + +#include +#include +#include +#include +#include + +#ifndef _TRACE_WRITEBACK_DEF_ +#define _TRACE_WRITEBACK_DEF_ + +/* + * Vanilla kernels before 4.0 do not implement inode_to_bdi + * RHEL kernels before 3.10.0-327.10.1 do not implement inode_to_bdi + * RHEL kernel 3.10.0-327.10.1 has inode_to_bdi + * RHEL kernel 3.10.0-327.13.1 includes a partial merge of upstream + * commit a212b105b07d75b48b1a166378282e8a77fbf53d which inlines + * inode_to_bdi but not sb_is_blkdev_sb making it unusable by modules. + */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)) +static inline struct backing_dev_info *lttng_inode_to_bdi(struct inode *inode) +{ + struct super_block *sb; + + if (!inode) + return &noop_backing_dev_info; + + sb = inode->i_sb; + + if (strcmp(sb->s_type->name, "bdev") == 0) + return inode->i_mapping->backing_dev_info; + + return sb->s_bdi; +} +#else +static inline struct backing_dev_info *lttng_inode_to_bdi(struct inode *inode) +{ + return inode_to_bdi(inode); +} +#endif /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)) */ + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)) +#define show_inode_state(state) \ + __print_flags(state, "|", \ + {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \ + {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \ + {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \ + {I_NEW, "I_NEW"}, \ + {I_WILL_FREE, "I_WILL_FREE"}, \ + {I_FREEING, "I_FREEING"}, \ + {I_CLEAR, "I_CLEAR"}, \ + {I_SYNC, "I_SYNC"}, \ + {I_DIRTY_TIME, "I_DIRTY_TIME"}, \ + {I_REFERENCED, "I_REFERENCED"} \ + ) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) +#define show_inode_state(state) \ + __print_flags(state, "|", \ + {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \ + {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \ + {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \ + {I_NEW, "I_NEW"}, \ + {I_WILL_FREE, "I_WILL_FREE"}, \ + {I_FREEING, "I_FREEING"}, \ + {I_CLEAR, "I_CLEAR"}, \ + {I_SYNC, "I_SYNC"}, \ + {I_DIRTY_TIME, "I_DIRTY_TIME"}, \ + {I_DIRTY_TIME_EXPIRED, "I_DIRTY_TIME_EXPIRED"}, \ + {I_REFERENCED, "I_REFERENCED"} \ + ) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */ +#define show_inode_state(state) \ + __print_flags(state, "|", \ + {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \ + {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \ + {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \ + {I_NEW, "I_NEW"}, \ + {I_WILL_FREE, "I_WILL_FREE"}, \ + {I_FREEING, "I_FREEING"}, \ + {I_CLEAR, "I_CLEAR"}, \ + {I_SYNC, "I_SYNC"}, \ + {I_REFERENCED, "I_REFERENCED"} \ + ) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) + +LTTNG_TRACEPOINT_EVENT(writeback_dirty_page, + TP_PROTO(struct page *page, struct address_space *mapping), + TP_ARGS(page, mapping), + TP_FIELDS( + ctf_array_text(char, name, + mapping ? dev_name(lttng_inode_to_bdi(mapping->host)->dev) : "(unknown)", 32) + ctf_integer(unsigned long, ino, mapping ? mapping->host->i_ino : 0) + ctf_integer(pgoff_t, index, page->index) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template, + TP_PROTO(struct inode *inode, int flags), + TP_ARGS(inode, flags), + TP_FIELDS( + /* may be called for files on pseudo FSes w/ unregistered bdi */ + ctf_array_text(char, name, + lttng_inode_to_bdi(inode)->dev ? + dev_name(lttng_inode_to_bdi(inode)->dev) : "(unknown)", 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(unsigned long, state, inode->i_state) + ctf_integer(unsigned long, flags, flags) + ) +) +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_dirty_inode_template, name, \ + TP_PROTO(struct inode *inode, int flags), \ + TP_ARGS(inode, flags)) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode_start) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_mark_inode_dirty) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_write_inode_template, + TP_PROTO(struct inode *inode, struct writeback_control *wbc), + TP_ARGS(inode, wbc), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(lttng_inode_to_bdi(inode)->dev), 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(int, sync_mode, wbc->sync_mode) + ) +) + +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_write_inode_template, name, \ + TP_PROTO(struct inode *inode, struct writeback_control *wbc), \ + TP_ARGS(inode, wbc)) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode_start) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + +LTTNG_TRACEPOINT_EVENT(writeback_dirty_page, + TP_PROTO(struct page *page, struct address_space *mapping), + TP_ARGS(page, mapping), + TP_FIELDS( + ctf_array_text(char, name, + mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)", 32) + ctf_integer(unsigned long, ino, mapping ? mapping->host->i_ino : 0) + ctf_integer(pgoff_t, index, page->index) + ) +) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template, + TP_PROTO(struct inode *inode, int flags), + TP_ARGS(inode, flags), + TP_FIELDS( + /* may be called for files on pseudo FSes w/ unregistered bdi */ + ctf_array_text(char, name, + inode->i_mapping->backing_dev_info->dev ? + dev_name(inode->i_mapping->backing_dev_info->dev) + : "(unknown)", 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(unsigned long, flags, flags) + ) +) +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_dirty_inode_template, name, \ + TP_PROTO(struct inode *inode, int flags), \ + TP_ARGS(inode, flags)) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode_start) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_write_inode_template, + TP_PROTO(struct inode *inode, struct writeback_control *wbc), + TP_ARGS(inode, wbc), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(inode->i_mapping->backing_dev_info->dev), 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(int, sync_mode, wbc->sync_mode) + ) +) + +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_write_inode_template, name, \ + TP_PROTO(struct inode *inode, struct writeback_control *wbc), \ + TP_ARGS(inode, wbc)) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode_start) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode) + +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class, + TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), + TP_ARGS(wb, work), + TP_FIELDS( + ctf_array_text(char, name, wb->bdi->dev ? dev_name(wb->bdi->dev) : + "(unknown)", 32) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class, + TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), + TP_ARGS(bdi, work), + TP_FIELDS( + ctf_array_text(char, name, bdi->dev ? dev_name(bdi->dev) : + "(unknown)", 32) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class, + TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), + TP_ARGS(bdi, work), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(bdi->dev ? bdi->dev : + default_backing_dev_info.dev), 32) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_work_class, name, \ + TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), \ + TP_ARGS(wb, work)) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_work_class, name, \ + TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \ + TP_ARGS(bdi, work)) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_nothread) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_queue) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_exec) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_start) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_written) +LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_wait) +#endif + +LTTNG_TRACEPOINT_EVENT(writeback_pages_written, + TP_PROTO(long pages_written), + TP_ARGS(pages_written), + TP_FIELDS( + ctf_integer(long, pages, pages_written) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class, + TP_PROTO(struct bdi_writeback *wb), + TP_ARGS(wb), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(wb->bdi->dev), 32) + ) +) + +#undef DEFINE_WRITEBACK_EVENT +#define DEFINE_WRITEBACK_EVENT(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_class, name, \ + TP_PROTO(struct bdi_writeback *wb), \ + TP_ARGS(wb)) + +#define DEFINE_WRITEBACK_EVENT_MAP(name, map) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_class, name, map, \ + TP_PROTO(struct bdi_writeback *wb), \ + TP_ARGS(wb)) + +LTTNG_TRACEPOINT_EVENT(writeback_bdi_register, + TP_PROTO(struct backing_dev_info *bdi), + TP_ARGS(bdi), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(bdi->dev), 32) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class, + TP_PROTO(struct backing_dev_info *bdi), + TP_ARGS(bdi), + TP_FIELDS( + ctf_array_text(char, name, + dev_name(bdi->dev), 32) + ) +) + +#undef DEFINE_WRITEBACK_EVENT +#define DEFINE_WRITEBACK_EVENT(name) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_class, name, \ + TP_PROTO(struct backing_dev_info *bdi), \ + TP_ARGS(bdi)) + +#define DEFINE_WRITEBACK_EVENT_MAP(name, map) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_class, name, map, \ + TP_PROTO(struct backing_dev_info *bdi), \ + TP_ARGS(bdi)) + +DEFINE_WRITEBACK_EVENT(writeback_bdi_register) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +DEFINE_WRITEBACK_EVENT(writeback_nowork) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) +DEFINE_WRITEBACK_EVENT(writeback_wake_background) +#endif +DEFINE_WRITEBACK_EVENT(writeback_wake_thread) +DEFINE_WRITEBACK_EVENT(writeback_wake_forker_thread) +DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister) +DEFINE_WRITEBACK_EVENT(writeback_thread_start) +DEFINE_WRITEBACK_EVENT(writeback_thread_stop) +#if (LTTNG_KERNEL_RANGE(3,1,0, 3,2,0)) +DEFINE_WRITEBACK_EVENT_MAP(balance_dirty_start, writeback_balance_dirty_start) +DEFINE_WRITEBACK_EVENT_MAP(balance_dirty_wait, writeback_balance_dirty_wait) + +LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_written, + + writeback_balance_dirty_written, + + TP_PROTO(struct backing_dev_info *bdi, int written), + + TP_ARGS(bdi, written), + + TP_FIELDS( + ctf_array_text(char, name, dev_name(bdi->dev), 32) + ctf_integer(int, written, written) + ) +) +#endif + +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_wbc_class, + TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), + TP_ARGS(wbc, bdi), + TP_FIELDS( + ctf_array_text(char, name, dev_name(bdi->dev), 32) + ctf_integer(long, nr_to_write, wbc->nr_to_write) + ctf_integer(long, pages_skipped, wbc->pages_skipped) + ctf_integer(int, sync_mode, wbc->sync_mode) + ctf_integer(int, for_kupdate, wbc->for_kupdate) + ctf_integer(int, for_background, wbc->for_background) + ctf_integer(int, for_reclaim, wbc->for_reclaim) + ctf_integer(int, range_cyclic, wbc->range_cyclic) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + ctf_integer(int, more_io, wbc->more_io) + ctf_integer(unsigned long, older_than_this, + wbc->older_than_this ? *wbc->older_than_this : 0) +#endif + ctf_integer(long, range_start, (long) wbc->range_start) + ctf_integer(long, range_end, (long) wbc->range_end) + ) +) + +#undef DEFINE_WBC_EVENT +#define LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(name, map) \ +LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_wbc_class, name, map, \ + TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \ + TP_ARGS(wbc, bdi)) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_start, writeback_wbc_writeback_start) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_written, writeback_wbc_writeback_written) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_wait, writeback_wbc_writeback_wait) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_start, writeback_wbc_balance_dirty_start) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_written, writeback_wbc_balance_dirty_written) +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_wait, writeback_wbc_balance_dirty_wait) +#endif +LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) || \ + LTTNG_KERNEL_RANGE(5,8,6, 5,9,0) || \ + LTTNG_KERNEL_RANGE(5,4,62, 5,5,0) || \ + LTTNG_KERNEL_RANGE(4,19,143, 4,20,0) || \ + LTTNG_KERNEL_RANGE(4,14,196, 4,15,0) || \ + LTTNG_KERNEL_RANGE(4,9,235, 4,10,0) || \ + LTTNG_KERNEL_RANGE(4,4,235, 4,5,0) || \ + LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,119, 4,16,0,0)) +LTTNG_TRACEPOINT_EVENT(writeback_queue_io, + TP_PROTO(struct bdi_writeback *wb, + struct wb_writeback_work *work, + unsigned long dirtied_before, + int moved), + TP_ARGS(wb, work, dirtied_before, moved), + TP_FIELDS( + ctf_array_text(char, name, dev_name(wb->bdi->dev), 32) + ctf_integer(unsigned long, older, dirtied_before) + ctf_integer(int, moved, moved) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +LTTNG_TRACEPOINT_EVENT(writeback_queue_io, + TP_PROTO(struct bdi_writeback *wb, + struct wb_writeback_work *work, + int moved), + TP_ARGS(wb, work, moved), + TP_FIELDS( + ctf_array_text(char, name, dev_name(wb->bdi->dev), 32) + ctf_integer(int, moved, moved) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT(writeback_queue_io, + TP_PROTO(struct bdi_writeback *wb, + unsigned long *older_than_this, + int moved), + TP_ARGS(wb, older_than_this, moved), + TP_FIELDS( + ctf_array_text(char, name, dev_name(wb->bdi->dev), 32) + ctf_integer(unsigned long, older, + older_than_this ? *older_than_this : 0) + ctf_integer(long, age, + older_than_this ? + (jiffies - *older_than_this) * 1000 / HZ + : -1) + ctf_integer(int, moved, moved) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) +LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state, + + writeback_global_dirty_state, + + TP_PROTO(unsigned long background_thresh, + unsigned long dirty_thresh + ), + + TP_ARGS(background_thresh, + dirty_thresh + ), + + TP_FIELDS( + ctf_integer(unsigned long, nr_dirty, global_node_page_state(NR_FILE_DIRTY)) + ctf_integer(unsigned long, nr_writeback, global_node_page_state(NR_WRITEBACK)) + ctf_integer(unsigned long, nr_dirtied, global_node_page_state(NR_DIRTIED)) + ctf_integer(unsigned long, nr_written, global_node_page_state(NR_WRITTEN)) + ctf_integer(unsigned long, background_thresh, background_thresh) + ctf_integer(unsigned long, dirty_thresh, dirty_thresh) + ctf_integer(unsigned long, dirty_limit, global_dirty_limit) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) +LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state, + + writeback_global_dirty_state, + + TP_PROTO(unsigned long background_thresh, + unsigned long dirty_thresh + ), + + TP_ARGS(background_thresh, + dirty_thresh + ), + + TP_FIELDS( + ctf_integer(unsigned long, nr_dirty, global_node_page_state(NR_FILE_DIRTY)) + ctf_integer(unsigned long, nr_writeback, global_node_page_state(NR_WRITEBACK)) + ctf_integer(unsigned long, nr_unstable, global_node_page_state(NR_UNSTABLE_NFS)) + ctf_integer(unsigned long, nr_dirtied, global_node_page_state(NR_DIRTIED)) + ctf_integer(unsigned long, nr_written, global_node_page_state(NR_WRITTEN)) + ctf_integer(unsigned long, background_thresh, background_thresh) + ctf_integer(unsigned long, dirty_thresh, dirty_thresh) + ctf_integer(unsigned long, dirty_limit, global_dirty_limit) + ) +) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state, + + writeback_global_dirty_state, + + TP_PROTO(unsigned long background_thresh, + unsigned long dirty_thresh + ), + + TP_ARGS(background_thresh, + dirty_thresh + ), + + TP_FIELDS( + ctf_integer(unsigned long, nr_dirty, global_page_state(NR_FILE_DIRTY)) + ctf_integer(unsigned long, nr_writeback, global_page_state(NR_WRITEBACK)) + ctf_integer(unsigned long, nr_unstable, global_page_state(NR_UNSTABLE_NFS)) + ctf_integer(unsigned long, nr_dirtied, global_page_state(NR_DIRTIED)) + ctf_integer(unsigned long, nr_written, global_page_state(NR_WRITTEN)) + ctf_integer(unsigned long, background_thresh, background_thresh) + ctf_integer(unsigned long, dirty_thresh, dirty_thresh) + ctf_integer(unsigned long, dirty_limit, global_dirty_limit) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + +#define KBps(x) ((x) << (PAGE_SHIFT - 10)) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, + + writeback_bdi_dirty_ratelimit, + + TP_PROTO(struct bdi_writeback *wb, + unsigned long dirty_rate, + unsigned long task_ratelimit), + + TP_ARGS(wb, dirty_rate, task_ratelimit), + + TP_FIELDS( + ctf_array_text(char, bdi, dev_name(wb->bdi->dev), 32) + ctf_integer(unsigned long, write_bw, KBps(wb->bdi->wb.write_bandwidth)) + ctf_integer(unsigned long, avg_write_bw, KBps(wb->bdi->wb.avg_write_bandwidth)) + ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) + ctf_integer(unsigned long, dirty_ratelimit, KBps(wb->bdi->wb.dirty_ratelimit)) + ctf_integer(unsigned long, task_ratelimit, KBps(task_ratelimit)) + ctf_integer(unsigned long, balanced_dirty_ratelimit, + KBps(wb->bdi->wb.balanced_dirty_ratelimit)) + ) +) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, + + writeback_bdi_dirty_ratelimit, + + TP_PROTO(struct backing_dev_info *bdi, + unsigned long dirty_rate, + unsigned long task_ratelimit), + + TP_ARGS(bdi, dirty_rate, task_ratelimit), + + TP_FIELDS( + ctf_array_text(char, bdi, dev_name(bdi->dev), 32) + ctf_integer(unsigned long, write_bw, KBps(bdi->wb.write_bandwidth)) + ctf_integer(unsigned long, avg_write_bw, KBps(bdi->wb.avg_write_bandwidth)) + ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) + ctf_integer(unsigned long, dirty_ratelimit, KBps(bdi->wb.dirty_ratelimit)) + ctf_integer(unsigned long, task_ratelimit, KBps(task_ratelimit)) + ctf_integer(unsigned long, balanced_dirty_ratelimit, + KBps(bdi->wb.balanced_dirty_ratelimit)) + ) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, + + writeback_bdi_dirty_ratelimit, + + TP_PROTO(struct backing_dev_info *bdi, + unsigned long dirty_rate, + unsigned long task_ratelimit), + + TP_ARGS(bdi, dirty_rate, task_ratelimit), + + TP_FIELDS( + ctf_array_text(char, bdi, dev_name(bdi->dev), 32) + ctf_integer(unsigned long, write_bw, KBps(bdi->write_bandwidth)) + ctf_integer(unsigned long, avg_write_bw, KBps(bdi->avg_write_bandwidth)) + ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) + ctf_integer(unsigned long, dirty_ratelimit, KBps(bdi->dirty_ratelimit)) + ctf_integer(unsigned long, task_ratelimit, KBps(task_ratelimit)) + ctf_integer(unsigned long, balanced_dirty_ratelimit, + KBps(bdi->balanced_dirty_ratelimit)) + ) +) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + +LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages, + + writeback_balance_dirty_pages, + + TP_PROTO(struct bdi_writeback *wb, + unsigned long thresh, + unsigned long bg_thresh, + unsigned long dirty, + unsigned long bdi_thresh, + unsigned long bdi_dirty, + unsigned long dirty_ratelimit, + unsigned long task_ratelimit, + unsigned long dirtied, + unsigned long period, + long pause, + unsigned long start_time), + + TP_ARGS(wb, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty, + dirty_ratelimit, task_ratelimit, + dirtied, period, pause, start_time + ), + + TP_FIELDS( + ctf_array_text(char, bdi, dev_name(wb->bdi->dev), 32) + ctf_integer(unsigned long, limit, global_dirty_limit) + ctf_integer(unsigned long, setpoint, + (global_dirty_limit + (thresh + bg_thresh) / 2) / 2) + ctf_integer(unsigned long, dirty, dirty) + ctf_integer(unsigned long, bdi_setpoint, + ((global_dirty_limit + (thresh + bg_thresh) / 2) / 2) * + bdi_thresh / (thresh + 1)) + ctf_integer(unsigned long, bdi_dirty, bdi_dirty) + ctf_integer(unsigned long, dirty_ratelimit, + KBps(dirty_ratelimit)) + ctf_integer(unsigned long, task_ratelimit, + KBps(task_ratelimit)) + ctf_integer(unsigned int, dirtied, dirtied) + ctf_integer(unsigned int, dirtied_pause, + current->nr_dirtied_pause) + ctf_integer(unsigned long, paused, + (jiffies - start_time) * 1000 / HZ) + ctf_integer(long, pause, pause * 1000 / HZ) + ctf_integer(unsigned long, period, + period * 1000 / HZ) + ctf_integer(long, think, + current->dirty_paused_when == 0 ? 0 : + (long)(jiffies - current->dirty_paused_when) * 1000/HZ) + ) +) + +#else /* #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages, + + writeback_balance_dirty_pages, + + TP_PROTO(struct backing_dev_info *bdi, + unsigned long thresh, + unsigned long bg_thresh, + unsigned long dirty, + unsigned long bdi_thresh, + unsigned long bdi_dirty, + unsigned long dirty_ratelimit, + unsigned long task_ratelimit, + unsigned long dirtied, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + unsigned long period, +#endif + long pause, + unsigned long start_time), + + TP_ARGS(bdi, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty, + dirty_ratelimit, task_ratelimit, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + dirtied, period, pause, start_time +#else + dirtied, pause, start_time +#endif + ), + + TP_FIELDS( + ctf_array_text(char, bdi, dev_name(bdi->dev), 32) + ctf_integer(unsigned long, limit, global_dirty_limit) + ctf_integer(unsigned long, setpoint, + (global_dirty_limit + (thresh + bg_thresh) / 2) / 2) + ctf_integer(unsigned long, dirty, dirty) + ctf_integer(unsigned long, bdi_setpoint, + ((global_dirty_limit + (thresh + bg_thresh) / 2) / 2) * + bdi_thresh / (thresh + 1)) + ctf_integer(unsigned long, bdi_dirty, bdi_dirty) + ctf_integer(unsigned long, dirty_ratelimit, + KBps(dirty_ratelimit)) + ctf_integer(unsigned long, task_ratelimit, + KBps(task_ratelimit)) + ctf_integer(unsigned int, dirtied, dirtied) + ctf_integer(unsigned int, dirtied_pause, + current->nr_dirtied_pause) + ctf_integer(unsigned long, paused, + (jiffies - start_time) * 1000 / HZ) + ctf_integer(long, pause, pause * 1000 / HZ) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + ctf_integer(unsigned long, period, + period * 1000 / HZ) + ctf_integer(long, think, + current->dirty_paused_when == 0 ? 0 : + (long)(jiffies - current->dirty_paused_when) * 1000/HZ) +#endif + ) +) +#endif /* #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */ + +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT(writeback_sb_inodes_requeue, + + TP_PROTO(struct inode *inode), + TP_ARGS(inode), + + TP_FIELDS( + ctf_array_text(char, name, + dev_name(lttng_inode_to_bdi(inode)->dev), 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(unsigned long, state, inode->i_state) + ctf_integer(unsigned long, dirtied_when, inode->dirtied_when) + ) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_congest_waited_template, + + TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), + + TP_ARGS(usec_timeout, usec_delayed), + + TP_FIELDS( + ctf_integer(unsigned int, usec_timeout, usec_timeout) + ctf_integer(unsigned int, usec_delayed, usec_delayed) + ) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_congest_waited_template, writeback_congestion_wait, + + TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), + + TP_ARGS(usec_timeout, usec_delayed) +) + +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_congest_waited_template, writeback_wait_iff_congested, + + TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), + + TP_ARGS(usec_timeout, usec_delayed) +) +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +LTTNG_TRACEPOINT_EVENT_CLASS(writeback_single_inode_template, + + TP_PROTO(struct inode *inode, + struct writeback_control *wbc, + unsigned long nr_to_write + ), + + TP_ARGS(inode, wbc, nr_to_write), + + TP_FIELDS( + ctf_array_text(char, name, + dev_name(lttng_inode_to_bdi(inode)->dev), 32) + ctf_integer(unsigned long, ino, inode->i_ino) + ctf_integer(unsigned long, state, inode->i_state) + ctf_integer(unsigned long, dirtied_when, inode->dirtied_when) + ctf_integer(unsigned long, writeback_index, + inode->i_mapping->writeback_index) + ctf_integer(long, nr_to_write, nr_to_write) + ctf_integer(unsigned long, wrote, + nr_to_write - wbc->nr_to_write) + ) +) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_single_inode_template, writeback_single_inode_requeue, + TP_PROTO(struct inode *inode, + struct writeback_control *wbc, + unsigned long nr_to_write), + TP_ARGS(inode, wbc, nr_to_write) +) +#endif + +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_single_inode_template, writeback_single_inode, + TP_PROTO(struct inode *inode, + struct writeback_control *wbc, + unsigned long nr_to_write), + TP_ARGS(inode, wbc, nr_to_write) +) +#endif + +#endif /* LTTNG_TRACE_WRITEBACK_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.0.34/powerpc-32-syscalls-3.0.34 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.0.34/powerpc-32-syscalls-3.0.34 new file mode 100644 index 000000000000..f951c7ade826 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.0.34/powerpc-32-syscalls-3.0.34 @@ -0,0 +1,286 @@ +syscall sys_restart_syscall nr 0 nbargs 0 types: () args: () +syscall sys_exit nr 1 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 3 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 5 nbargs 3 types: (const char *, int, int) args: (filename, flags, mode) +syscall sys_close nr 6 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_waitpid nr 7 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_creat nr 8 nbargs 2 types: (const char *, int) args: (pathname, mode) +syscall sys_link nr 9 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 10 nbargs 1 types: (const char *) args: (pathname) +syscall sys_chdir nr 12 nbargs 1 types: (const char *) args: (filename) +syscall sys_time nr 13 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_mknod nr 14 nbargs 3 types: (const char *, int, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 15 nbargs 2 types: (const char *, mode_t) args: (filename, mode) +syscall sys_lchown nr 16 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_stat nr 18 nbargs 2 types: (const char *, struct __old_kernel_stat *) args: (filename, statbuf) +syscall sys_lseek nr 19 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, origin) +syscall sys_getpid nr 20 nbargs 0 types: () args: () +syscall sys_mount nr 21 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_oldumount nr 22 nbargs 1 types: (char *) args: (name) +syscall sys_setuid nr 23 nbargs 1 types: (uid_t) args: (uid) +syscall sys_getuid nr 24 nbargs 0 types: () args: () +syscall sys_stime nr 25 nbargs 1 types: (time_t *) args: (tptr) +syscall sys_ptrace nr 26 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_alarm nr 27 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_fstat nr 28 nbargs 2 types: (unsigned int, struct __old_kernel_stat *) args: (fd, statbuf) +syscall sys_pause nr 29 nbargs 0 types: () args: () +syscall sys_utime nr 30 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_access nr 33 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 34 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 36 nbargs 0 types: () args: () +syscall sys_kill nr 37 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 38 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 39 nbargs 2 types: (const char *, int) args: (pathname, mode) +syscall sys_rmdir nr 40 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 41 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_pipe nr 42 nbargs 1 types: (int *) args: (fildes) +syscall sys_times nr 43 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 45 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid nr 46 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getgid nr 47 nbargs 0 types: () args: () +syscall sys_signal nr 48 nbargs 2 types: (int, __sighandler_t) args: (sig, handler) +syscall sys_geteuid nr 49 nbargs 0 types: () args: () +syscall sys_getegid nr 50 nbargs 0 types: () args: () +syscall sys_acct nr 51 nbargs 1 types: (const char *) args: (name) +syscall sys_umount nr 52 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 54 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 55 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 57 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_olduname nr 59 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_umask nr 60 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 61 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 62 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 63 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 64 nbargs 0 types: () args: () +syscall sys_getpgrp nr 65 nbargs 0 types: () args: () +syscall sys_setsid nr 66 nbargs 0 types: () args: () +syscall sys_sgetmask nr 68 nbargs 0 types: () args: () +syscall sys_ssetmask nr 69 nbargs 1 types: (int) args: (newmask) +syscall sys_setreuid nr 70 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 71 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_sigpending nr 73 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 74 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 75 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_old_getrlimit nr 76 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 77 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 78 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 79 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups nr 80 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 81 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_symlink nr 83 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_lstat nr 84 nbargs 2 types: (const char *, struct __old_kernel_stat *) args: (filename, statbuf) +syscall sys_readlink nr 85 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_uselib nr 86 nbargs 1 types: (const char *) args: (library) +syscall sys_swapon nr 87 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_reboot nr 88 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_old_readdir nr 89 nbargs 3 types: (unsigned int, struct old_linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_munmap nr 91 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 92 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 93 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 94 nbargs 2 types: (unsigned int, mode_t) args: (fd, mode) +syscall sys_fchown nr 95 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_getpriority nr 96 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 97 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 99 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 100 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_socketcall nr 102 nbargs 2 types: (int, unsigned long *) args: (call, args) +syscall sys_syslog nr 103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 104 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 105 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 106 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 107 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 108 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_uname nr 109 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_vhangup nr 111 nbargs 0 types: () args: () +syscall sys_wait4 nr 114 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_swapoff nr 115 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_sysinfo nr 116 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_ipc nr 117 nbargs 6 types: (unsigned int, int, unsigned long, unsigned long, void *, long) args: (call, first, second, third, ptr, fifth) +syscall sys_fsync nr 118 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 121 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 122 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 124 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 125 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 126 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 128 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 129 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_getpgid nr 132 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 133 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_sysfs nr 135 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_personality nr 136 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid nr 138 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 139 nbargs 1 types: (gid_t) args: (gid) +syscall sys_llseek nr 140 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, origin) +syscall sys_getdents nr 141 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 142 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 143 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 144 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 145 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 146 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_getsid nr 147 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 148 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 149 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 150 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 151 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 152 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 153 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 154 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 155 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 156 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 157 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 158 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 159 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 160 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 161 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 162 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 163 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_setresuid nr 164 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 165 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruid, euid, suid) +syscall sys_poll nr 167 nbargs 3 types: (struct pollfd *, unsigned int, long) args: (ufds, nfds, timeout_msecs) +syscall sys_nfsservctl nr 168 nbargs 3 types: (int, struct nfsctl_arg *, void *) args: (cmd, arg, res) +syscall sys_setresgid nr 169 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 170 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgid, egid, sgid) +syscall sys_prctl nr 171 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_rt_sigaction nr 173 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 174 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 175 nbargs 2 types: (sigset_t *, size_t) args: (set, sigsetsize) +syscall sys_rt_sigtimedwait nr 176 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 177 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 178 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_chown nr 181 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_getcwd nr 182 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_capget nr 183 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 184 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_sendfile nr 186 nbargs 4 types: (int, int, off_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_getrlimit nr 190 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_stat64 nr 195 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_lstat64 nr 196 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_fstat64 nr 197 nbargs 2 types: (unsigned long, struct stat64 *) args: (fd, statbuf) +syscall sys_pciconfig_read nr 198 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, void *) args: (bus, dfn, off, len, buf) +syscall sys_pciconfig_write nr 199 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, void *) args: (bus, dfn, off, len, buf) +syscall sys_getdents64 nr 202 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_pivot_root nr 203 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_fcntl64 nr 204 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_madvise nr 205 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_mincore nr 206 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_gettid nr 207 nbargs 0 types: () args: () +syscall sys_tkill nr 208 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_setxattr nr 209 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 210 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 211 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 212 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 213 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 214 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 215 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 216 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 217 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 218 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 219 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 220 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_futex nr 221 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_sched_setaffinity nr 222 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 223 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sendfile64 nr 226 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_io_setup nr 227 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 228 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 229 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 230 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 231 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_set_tid_address nr 232 nbargs 1 types: (int *) args: (tidptr) +syscall sys_exit_group nr 234 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 236 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 237 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 238 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 239 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_timer_create nr 240 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 241 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 242 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 243 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 244 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 245 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 246 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 247 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 248 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_tgkill nr 250 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 251 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_statfs64 nr 252 nbargs 3 types: (const char *, size_t, struct statfs64 *) args: (pathname, sz, buf) +syscall sys_fstatfs64 nr 253 nbargs 3 types: (unsigned int, size_t, struct statfs64 *) args: (fd, sz, buf) +syscall sys_mq_open nr 262 nbargs 4 types: (const char *, int, mode_t, struct mq_attr *) args: (u_name, oflag, mode, u_attr) +syscall sys_mq_unlink nr 263 nbargs 1 types: (const char *) args: (u_name) +syscall sys_mq_timedsend nr 264 nbargs 5 types: (mqd_t, const char *, size_t, unsigned int, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout) +syscall sys_mq_timedreceive nr 265 nbargs 5 types: (mqd_t, char *, size_t, unsigned int *, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout) +syscall sys_mq_notify nr 266 nbargs 2 types: (mqd_t, const struct sigevent *) args: (mqdes, u_notification) +syscall sys_mq_getsetattr nr 267 nbargs 3 types: (mqd_t, const struct mq_attr *, struct mq_attr *) args: (mqdes, u_mqstat, u_omqstat) +syscall sys_add_key nr 269 nbargs 5 types: (const char *, const char *, const void *, size_t, key_serial_t) args: (_type, _description, _payload, plen, ringid) +syscall sys_request_key nr 270 nbargs 4 types: (const char *, const char *, const char *, key_serial_t) args: (_type, _description, _callout_info, destringid) +syscall sys_keyctl nr 271 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_waitid nr 272 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_ioprio_set nr 273 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 274 nbargs 2 types: (int, int) args: (which, who) +syscall sys_inotify_init nr 275 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 276 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 277 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_pselect6 nr 280 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 281 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 282 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_splice nr 283 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 284 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_vmsplice nr 285 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_openat nr 286 nbargs 4 types: (int, const char *, int, int) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 287 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, mode) +syscall sys_mknodat nr 288 nbargs 4 types: (int, const char *, int, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 289 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 290 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_fstatat64 nr 291 nbargs 4 types: (int, const char *, struct stat64 *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 292 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 293 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 294 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 295 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 296 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 297 nbargs 3 types: (int, const char *, mode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 298 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_get_robust_list nr 299 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_set_robust_list nr 300 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_getcpu nr 302 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_epoll_pwait nr 303 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_utimensat nr 304 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 305 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_timerfd_create nr 306 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_eventfd nr 307 nbargs 1 types: (unsigned int) args: (count) +syscall sys_timerfd_settime nr 311 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_timerfd_gettime nr 312 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_signalfd4 nr 313 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 314 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 315 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 316 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 317 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 318 nbargs 1 types: (int) args: (flags) +syscall sys_perf_event_open nr 319 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_preadv nr 320 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 321 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 322 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_prlimit64 nr 325 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_socket nr 326 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_bind nr 327 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_connect nr 328 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_listen nr 329 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_accept nr 330 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_getsockname nr 331 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getpeername nr 332 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_socketpair nr 333 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_send nr 334 nbargs 4 types: (int, void *, size_t, unsigned) args: (fd, buff, len, flags) +syscall sys_sendto nr 335 nbargs 6 types: (int, void *, size_t, unsigned, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_recvfrom nr 337 nbargs 6 types: (int, void *, size_t, unsigned, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_shutdown nr 338 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_setsockopt nr 339 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_getsockopt nr 340 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_sendmsg nr 341 nbargs 3 types: (int, struct msghdr *, unsigned) args: (fd, msg, flags) +syscall sys_recvmsg nr 342 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_recvmmsg nr 343 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_accept4 nr 344 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_clock_adjtime nr 347 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 348 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 349 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 350 nbargs 2 types: (int, int) args: (fd, nstype) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.1.0-rc6/x86-32-syscalls-3.1.0-rc6 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.1.0-rc6/x86-32-syscalls-3.1.0-rc6 new file mode 100644 index 000000000000..130c1e3ee44e --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.1.0-rc6/x86-32-syscalls-3.1.0-rc6 @@ -0,0 +1,291 @@ +syscall sys_restart_syscall nr 0 nbargs 0 types: () args: () +syscall sys_exit nr 1 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 3 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 5 nbargs 3 types: (const char *, int, int) args: (filename, flags, mode) +syscall sys_close nr 6 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_waitpid nr 7 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_creat nr 8 nbargs 2 types: (const char *, int) args: (pathname, mode) +syscall sys_link nr 9 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 10 nbargs 1 types: (const char *) args: (pathname) +syscall sys_chdir nr 12 nbargs 1 types: (const char *) args: (filename) +syscall sys_time nr 13 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_mknod nr 14 nbargs 3 types: (const char *, int, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 15 nbargs 2 types: (const char *, mode_t) args: (filename, mode) +syscall sys_lchown16 nr 16 nbargs 3 types: (const char *, old_uid_t, old_gid_t) args: (filename, user, group) +syscall sys_stat nr 18 nbargs 2 types: (const char *, struct __old_kernel_stat *) args: (filename, statbuf) +syscall sys_lseek nr 19 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, origin) +syscall sys_getpid nr 20 nbargs 0 types: () args: () +syscall sys_mount nr 21 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_oldumount nr 22 nbargs 1 types: (char *) args: (name) +syscall sys_setuid16 nr 23 nbargs 1 types: (old_uid_t) args: (uid) +syscall sys_getuid16 nr 24 nbargs 0 types: () args: () +syscall sys_stime nr 25 nbargs 1 types: (time_t *) args: (tptr) +syscall sys_ptrace nr 26 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_alarm nr 27 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_fstat nr 28 nbargs 2 types: (unsigned int, struct __old_kernel_stat *) args: (fd, statbuf) +syscall sys_pause nr 29 nbargs 0 types: () args: () +syscall sys_utime nr 30 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_access nr 33 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 34 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 36 nbargs 0 types: () args: () +syscall sys_kill nr 37 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 38 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 39 nbargs 2 types: (const char *, int) args: (pathname, mode) +syscall sys_rmdir nr 40 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 41 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_pipe nr 42 nbargs 1 types: (int *) args: (fildes) +syscall sys_times nr 43 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 45 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid16 nr 46 nbargs 1 types: (old_gid_t) args: (gid) +syscall sys_getgid16 nr 47 nbargs 0 types: () args: () +syscall sys_signal nr 48 nbargs 2 types: (int, __sighandler_t) args: (sig, handler) +syscall sys_geteuid16 nr 49 nbargs 0 types: () args: () +syscall sys_getegid16 nr 50 nbargs 0 types: () args: () +syscall sys_acct nr 51 nbargs 1 types: (const char *) args: (name) +syscall sys_umount nr 52 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 54 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 55 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 57 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_olduname nr 59 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_umask nr 60 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 61 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 62 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 63 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 64 nbargs 0 types: () args: () +syscall sys_getpgrp nr 65 nbargs 0 types: () args: () +syscall sys_setsid nr 66 nbargs 0 types: () args: () +syscall sys_sgetmask nr 68 nbargs 0 types: () args: () +syscall sys_ssetmask nr 69 nbargs 1 types: (int) args: (newmask) +syscall sys_setreuid16 nr 70 nbargs 2 types: (old_uid_t, old_uid_t) args: (ruid, euid) +syscall sys_setregid16 nr 71 nbargs 2 types: (old_gid_t, old_gid_t) args: (rgid, egid) +syscall sys_sigpending nr 73 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 74 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 75 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_old_getrlimit nr 76 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 77 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 78 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 79 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups16 nr 80 nbargs 2 types: (int, old_gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups16 nr 81 nbargs 2 types: (int, old_gid_t *) args: (gidsetsize, grouplist) +syscall sys_old_select nr 82 nbargs 1 types: (struct sel_arg_struct *) args: (arg) +syscall sys_symlink nr 83 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_lstat nr 84 nbargs 2 types: (const char *, struct __old_kernel_stat *) args: (filename, statbuf) +syscall sys_readlink nr 85 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_uselib nr 86 nbargs 1 types: (const char *) args: (library) +syscall sys_swapon nr 87 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_reboot nr 88 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_old_readdir nr 89 nbargs 3 types: (unsigned int, struct old_linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_old_mmap nr 90 nbargs 1 types: (struct mmap_arg_struct *) args: (arg) +syscall sys_munmap nr 91 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 92 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 93 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 94 nbargs 2 types: (unsigned int, mode_t) args: (fd, mode) +syscall sys_fchown16 nr 95 nbargs 3 types: (unsigned int, old_uid_t, old_gid_t) args: (fd, user, group) +syscall sys_getpriority nr 96 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 97 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 99 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 100 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_socketcall nr 102 nbargs 2 types: (int, unsigned long *) args: (call, args) +syscall sys_syslog nr 103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 104 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 105 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 106 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 107 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 108 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_uname nr 109 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_vhangup nr 111 nbargs 0 types: () args: () +syscall sys_wait4 nr 114 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_swapoff nr 115 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_sysinfo nr 116 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_ipc nr 117 nbargs 6 types: (unsigned int, int, unsigned long, unsigned long, void *, long) args: (call, first, second, third, ptr, fifth) +syscall sys_fsync nr 118 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 121 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 122 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 124 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 125 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 126 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 128 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 129 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_quotactl nr 131 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_getpgid nr 132 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 133 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_sysfs nr 135 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_personality nr 136 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid16 nr 138 nbargs 1 types: (old_uid_t) args: (uid) +syscall sys_setfsgid16 nr 139 nbargs 1 types: (old_gid_t) args: (gid) +syscall sys_llseek nr 140 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, origin) +syscall sys_getdents nr 141 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 142 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 143 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 144 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 145 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 146 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_getsid nr 147 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 148 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 149 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 150 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 151 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 152 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 153 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 154 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 155 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 156 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 157 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 158 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 159 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 160 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 161 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 162 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 163 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_setresuid16 nr 164 nbargs 3 types: (old_uid_t, old_uid_t, old_uid_t) args: (ruid, euid, suid) +syscall sys_getresuid16 nr 165 nbargs 3 types: (old_uid_t *, old_uid_t *, old_uid_t *) args: (ruid, euid, suid) +syscall sys_poll nr 168 nbargs 3 types: (struct pollfd *, unsigned int, long) args: (ufds, nfds, timeout_msecs) +syscall sys_setresgid16 nr 170 nbargs 3 types: (old_gid_t, old_gid_t, old_gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid16 nr 171 nbargs 3 types: (old_gid_t *, old_gid_t *, old_gid_t *) args: (rgid, egid, sgid) +syscall sys_prctl nr 172 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_rt_sigaction nr 174 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 175 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 176 nbargs 2 types: (sigset_t *, size_t) args: (set, sigsetsize) +syscall sys_rt_sigtimedwait nr 177 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 178 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 179 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_chown16 nr 182 nbargs 3 types: (const char *, old_uid_t, old_gid_t) args: (filename, user, group) +syscall sys_getcwd nr 183 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_capget nr 184 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 185 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_sendfile nr 187 nbargs 4 types: (int, int, off_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_getrlimit nr 191 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_mmap_pgoff nr 192 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, len, prot, flags, fd, pgoff) +syscall sys_stat64 nr 195 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_lstat64 nr 196 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_fstat64 nr 197 nbargs 2 types: (unsigned long, struct stat64 *) args: (fd, statbuf) +syscall sys_lchown nr 198 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_getuid nr 199 nbargs 0 types: () args: () +syscall sys_getgid nr 200 nbargs 0 types: () args: () +syscall sys_geteuid nr 201 nbargs 0 types: () args: () +syscall sys_getegid nr 202 nbargs 0 types: () args: () +syscall sys_setreuid nr 203 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 204 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_getgroups nr 205 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 206 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_fchown nr 207 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_setresuid nr 208 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 209 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruid, euid, suid) +syscall sys_setresgid nr 210 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 211 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgid, egid, sgid) +syscall sys_chown nr 212 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_setuid nr 213 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setgid nr 214 nbargs 1 types: (gid_t) args: (gid) +syscall sys_setfsuid nr 215 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 216 nbargs 1 types: (gid_t) args: (gid) +syscall sys_pivot_root nr 217 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_mincore nr 218 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 219 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_getdents64 nr 220 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_fcntl64 nr 221 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_gettid nr 224 nbargs 0 types: () args: () +syscall sys_setxattr nr 226 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 227 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 228 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 229 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 230 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 231 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 232 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 233 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 234 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 235 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 236 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 237 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 238 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_sendfile64 nr 239 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_futex nr 240 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_sched_setaffinity nr 241 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 242 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_io_setup nr 245 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 246 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 247 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 248 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 249 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_exit_group nr 252 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 254 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 255 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 256 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 257 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_set_tid_address nr 258 nbargs 1 types: (int *) args: (tidptr) +syscall sys_timer_create nr 259 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 260 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 261 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 262 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 263 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 264 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 265 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 266 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 267 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_statfs64 nr 268 nbargs 3 types: (const char *, size_t, struct statfs64 *) args: (pathname, sz, buf) +syscall sys_fstatfs64 nr 269 nbargs 3 types: (unsigned int, size_t, struct statfs64 *) args: (fd, sz, buf) +syscall sys_tgkill nr 270 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 271 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_mq_open nr 277 nbargs 4 types: (const char *, int, mode_t, struct mq_attr *) args: (u_name, oflag, mode, u_attr) +syscall sys_mq_unlink nr 278 nbargs 1 types: (const char *) args: (u_name) +syscall sys_mq_timedsend nr 279 nbargs 5 types: (mqd_t, const char *, size_t, unsigned int, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout) +syscall sys_mq_timedreceive nr 280 nbargs 5 types: (mqd_t, char *, size_t, unsigned int *, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout) +syscall sys_mq_notify nr 281 nbargs 2 types: (mqd_t, const struct sigevent *) args: (mqdes, u_notification) +syscall sys_mq_getsetattr nr 282 nbargs 3 types: (mqd_t, const struct mq_attr *, struct mq_attr *) args: (mqdes, u_mqstat, u_omqstat) +syscall sys_kexec_load nr 283 nbargs 4 types: (unsigned long, unsigned long, struct kexec_segment *, unsigned long) args: (entry, nr_segments, segments, flags) +syscall sys_waitid nr 284 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_add_key nr 286 nbargs 5 types: (const char *, const char *, const void *, size_t, key_serial_t) args: (_type, _description, _payload, plen, ringid) +syscall sys_request_key nr 287 nbargs 4 types: (const char *, const char *, const char *, key_serial_t) args: (_type, _description, _callout_info, destringid) +syscall sys_keyctl nr 288 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_ioprio_set nr 289 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 290 nbargs 2 types: (int, int) args: (which, who) +syscall sys_inotify_init nr 291 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 292 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 293 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_openat nr 295 nbargs 4 types: (int, const char *, int, int) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 296 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, mode) +syscall sys_mknodat nr 297 nbargs 4 types: (int, const char *, int, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 298 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 299 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_fstatat64 nr 300 nbargs 4 types: (int, const char *, struct stat64 *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 301 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 302 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 303 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 304 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 305 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 306 nbargs 3 types: (int, const char *, mode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 307 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_pselect6 nr 308 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 309 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 310 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_set_robust_list nr 311 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 312 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_splice nr 313 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 315 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_vmsplice nr 316 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_getcpu nr 318 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_epoll_pwait nr 319 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_utimensat nr 320 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 321 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_timerfd_create nr 322 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_eventfd nr 323 nbargs 1 types: (unsigned int) args: (count) +syscall sys_timerfd_settime nr 325 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_timerfd_gettime nr 326 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_signalfd4 nr 327 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 328 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 329 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 330 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 331 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 332 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 333 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 334 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 335 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 336 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_recvmmsg nr 337 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_fanotify_init nr 338 nbargs 2 types: (unsigned int, unsigned int) args: (flags, event_f_flags) +syscall sys_prlimit64 nr 340 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_clock_adjtime nr 343 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 344 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 345 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 346 nbargs 2 types: (int, int) args: (fd, nstype) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.10.0-rc7/x86-64-syscalls-3.10.0-rc7 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.10.0-rc7/x86-64-syscalls-3.10.0-rc7 new file mode 100644 index 000000000000..5db1a4f1dca5 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.10.0-rc7/x86-64-syscalls-3.10.0-rc7 @@ -0,0 +1,289 @@ +syscall sys_read nr 0 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 1 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 2 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 3 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_newstat nr 4 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 5 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_newlstat nr 6 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_poll nr 7 nbargs 3 types: (struct pollfd *, unsigned int, int) args: (ufds, nfds, timeout_msecs) +syscall sys_lseek nr 8 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, whence) +syscall sys_mmap nr 9 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, len, prot, flags, fd, off) +syscall sys_mprotect nr 10 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_munmap nr 11 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_brk nr 12 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_rt_sigaction nr 13 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 14 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_ioctl nr 16 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_pread64 nr 17 nbargs 4 types: (unsigned int, char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_pwrite64 nr 18 nbargs 4 types: (unsigned int, const char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_readv nr 19 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 20 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_access nr 21 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_pipe nr 22 nbargs 1 types: (int *) args: (fildes) +syscall sys_select nr 23 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_sched_yield nr 24 nbargs 0 types: () args: () +syscall sys_mremap nr 25 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_msync nr 26 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_mincore nr 27 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 28 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_shmget nr 29 nbargs 3 types: (key_t, size_t, int) args: (key, size, shmflg) +syscall sys_shmat nr 30 nbargs 3 types: (int, char *, int) args: (shmid, shmaddr, shmflg) +syscall sys_shmctl nr 31 nbargs 3 types: (int, int, struct shmid_ds *) args: (shmid, cmd, buf) +syscall sys_dup nr 32 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_dup2 nr 33 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_pause nr 34 nbargs 0 types: () args: () +syscall sys_nanosleep nr 35 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_getitimer nr 36 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_alarm nr 37 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_setitimer nr 38 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getpid nr 39 nbargs 0 types: () args: () +syscall sys_sendfile64 nr 40 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_socket nr 41 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_connect nr 42 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_accept nr 43 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_sendto nr 44 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_recvfrom nr 45 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_sendmsg nr 46 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_recvmsg nr 47 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_shutdown nr 48 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_bind nr 49 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_listen nr 50 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_getsockname nr 51 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getpeername nr 52 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_socketpair nr 53 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_setsockopt nr 54 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_getsockopt nr 55 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_exit nr 60 nbargs 1 types: (int) args: (error_code) +syscall sys_wait4 nr 61 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_kill nr 62 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_newuname nr 63 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_semget nr 64 nbargs 3 types: (key_t, int, int) args: (key, nsems, semflg) +syscall sys_semop nr 65 nbargs 3 types: (int, struct sembuf *, unsigned) args: (semid, tsops, nsops) +syscall sys_semctl nr 66 nbargs 4 types: (int, int, int, unsigned long) args: (semid, semnum, cmd, arg) +syscall sys_shmdt nr 67 nbargs 1 types: (char *) args: (shmaddr) +syscall sys_msgget nr 68 nbargs 2 types: (key_t, int) args: (key, msgflg) +syscall sys_msgsnd nr 69 nbargs 4 types: (int, struct msgbuf *, size_t, int) args: (msqid, msgp, msgsz, msgflg) +syscall sys_msgrcv nr 70 nbargs 5 types: (int, struct msgbuf *, size_t, long, int) args: (msqid, msgp, msgsz, msgtyp, msgflg) +syscall sys_msgctl nr 71 nbargs 3 types: (int, int, struct msqid_ds *) args: (msqid, cmd, buf) +syscall sys_fcntl nr 72 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_flock nr 73 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_fsync nr 74 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_fdatasync nr 75 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_truncate nr 76 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 77 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_getdents nr 78 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_getcwd nr 79 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_chdir nr 80 nbargs 1 types: (const char *) args: (filename) +syscall sys_fchdir nr 81 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_rename nr 82 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 83 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 84 nbargs 1 types: (const char *) args: (pathname) +syscall sys_creat nr 85 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 86 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 87 nbargs 1 types: (const char *) args: (pathname) +syscall sys_symlink nr 88 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 89 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_chmod nr 90 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_fchmod nr 91 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_chown nr 92 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_fchown nr 93 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_lchown nr 94 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_umask nr 95 nbargs 1 types: (int) args: (mask) +syscall sys_gettimeofday nr 96 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getrlimit nr 97 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 98 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_sysinfo nr 99 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_times nr 100 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_ptrace nr 101 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_getuid nr 102 nbargs 0 types: () args: () +syscall sys_syslog nr 103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_getgid nr 104 nbargs 0 types: () args: () +syscall sys_setuid nr 105 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setgid nr 106 nbargs 1 types: (gid_t) args: (gid) +syscall sys_geteuid nr 107 nbargs 0 types: () args: () +syscall sys_getegid nr 108 nbargs 0 types: () args: () +syscall sys_setpgid nr 109 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_getppid nr 110 nbargs 0 types: () args: () +syscall sys_getpgrp nr 111 nbargs 0 types: () args: () +syscall sys_setsid nr 112 nbargs 0 types: () args: () +syscall sys_setreuid nr 113 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 114 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_getgroups nr 115 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 116 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setresuid nr 117 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 118 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruidp, euidp, suidp) +syscall sys_setresgid nr 119 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 120 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgidp, egidp, sgidp) +syscall sys_getpgid nr 121 nbargs 1 types: (pid_t) args: (pid) +syscall sys_setfsuid nr 122 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 123 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getsid nr 124 nbargs 1 types: (pid_t) args: (pid) +syscall sys_capget nr 125 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 126 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_rt_sigpending nr 127 nbargs 2 types: (sigset_t *, size_t) args: (uset, sigsetsize) +syscall sys_rt_sigtimedwait nr 128 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 129 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 130 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_sigaltstack nr 131 nbargs 2 types: (const stack_t *, stack_t *) args: (uss, uoss) +syscall sys_utime nr 132 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_mknod nr 133 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_personality nr 135 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_ustat nr 136 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_statfs nr 137 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 138 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_sysfs nr 139 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_getpriority nr 140 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 141 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_sched_setparam nr 142 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 143 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 144 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 145 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_get_priority_max nr 146 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 147 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 148 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_mlock nr 149 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 150 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 151 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 152 nbargs 0 types: () args: () +syscall sys_vhangup nr 153 nbargs 0 types: () args: () +syscall sys_pivot_root nr 155 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_sysctl nr 156 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_prctl nr 157 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_adjtimex nr 159 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_setrlimit nr 160 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_chroot nr 161 nbargs 1 types: (const char *) args: (filename) +syscall sys_sync nr 162 nbargs 0 types: () args: () +syscall sys_acct nr 163 nbargs 1 types: (const char *) args: (name) +syscall sys_settimeofday nr 164 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_mount nr 165 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_umount nr 166 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_swapon nr 167 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_swapoff nr 168 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_reboot nr 169 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_sethostname nr 170 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setdomainname nr 171 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_init_module nr 175 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 176 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_quotactl nr 179 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_gettid nr 186 nbargs 0 types: () args: () +syscall sys_readahead nr 187 nbargs 3 types: (int, loff_t, size_t) args: (fd, offset, count) +syscall sys_setxattr nr 188 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 189 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 190 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 191 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 192 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 193 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 194 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 195 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 196 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 197 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 198 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 199 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 200 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_time nr 201 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_futex nr 202 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_sched_setaffinity nr 203 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 204 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_io_setup nr 206 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 207 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 208 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 209 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 210 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_lookup_dcookie nr 212 nbargs 3 types: (u64, char *, size_t) args: (cookie64, buf, len) +syscall sys_epoll_create nr 213 nbargs 1 types: (int) args: (size) +syscall sys_remap_file_pages nr 216 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_getdents64 nr 217 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_set_tid_address nr 218 nbargs 1 types: (int *) args: (tidptr) +syscall sys_restart_syscall nr 219 nbargs 0 types: () args: () +syscall sys_semtimedop nr 220 nbargs 4 types: (int, struct sembuf *, unsigned, const struct timespec *) args: (semid, tsops, nsops, timeout) +syscall sys_fadvise64 nr 221 nbargs 4 types: (int, loff_t, size_t, int) args: (fd, offset, len, advice) +syscall sys_timer_create nr 222 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 223 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 224 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 225 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 226 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 227 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 228 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 229 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 230 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_exit_group nr 231 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_wait nr 232 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_epoll_ctl nr 233 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_tgkill nr 234 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 235 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_mbind nr 237 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long *, unsigned long, unsigned) args: (start, len, mode, nmask, maxnode, flags) +syscall sys_set_mempolicy nr 238 nbargs 3 types: (int, unsigned long *, unsigned long) args: (mode, nmask, maxnode) +syscall sys_get_mempolicy nr 239 nbargs 5 types: (int *, unsigned long *, unsigned long, unsigned long, unsigned long) args: (policy, nmask, maxnode, addr, flags) +syscall sys_mq_open nr 240 nbargs 4 types: (const char *, int, umode_t, struct mq_attr *) args: (u_name, oflag, mode, u_attr) +syscall sys_mq_unlink nr 241 nbargs 1 types: (const char *) args: (u_name) +syscall sys_mq_timedsend nr 242 nbargs 5 types: (mqd_t, const char *, size_t, unsigned int, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout) +syscall sys_mq_timedreceive nr 243 nbargs 5 types: (mqd_t, char *, size_t, unsigned int *, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout) +syscall sys_mq_notify nr 244 nbargs 2 types: (mqd_t, const struct sigevent *) args: (mqdes, u_notification) +syscall sys_mq_getsetattr nr 245 nbargs 3 types: (mqd_t, const struct mq_attr *, struct mq_attr *) args: (mqdes, u_mqstat, u_omqstat) +syscall sys_kexec_load nr 246 nbargs 4 types: (unsigned long, unsigned long, struct kexec_segment *, unsigned long) args: (entry, nr_segments, segments, flags) +syscall sys_waitid nr 247 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_add_key nr 248 nbargs 5 types: (const char *, const char *, const void *, size_t, key_serial_t) args: (_type, _description, _payload, plen, ringid) +syscall sys_request_key nr 249 nbargs 4 types: (const char *, const char *, const char *, key_serial_t) args: (_type, _description, _callout_info, destringid) +syscall sys_keyctl nr 250 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_ioprio_set nr 251 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 252 nbargs 2 types: (int, int) args: (which, who) +syscall sys_inotify_init nr 253 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 254 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 255 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_migrate_pages nr 256 nbargs 4 types: (pid_t, unsigned long, const unsigned long *, const unsigned long *) args: (pid, maxnode, old_nodes, new_nodes) +syscall sys_openat nr 257 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 258 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_mknodat nr 259 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 260 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 261 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_newfstatat nr 262 nbargs 4 types: (int, const char *, struct stat *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 263 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 264 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 265 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 266 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 267 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 268 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 269 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_pselect6 nr 270 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 271 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 272 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_set_robust_list nr 273 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 274 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_splice nr 275 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 276 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_sync_file_range nr 277 nbargs 4 types: (int, loff_t, loff_t, unsigned int) args: (fd, offset, nbytes, flags) +syscall sys_vmsplice nr 278 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_move_pages nr 279 nbargs 6 types: (pid_t, unsigned long, const void * *, const int *, int *, int) args: (pid, nr_pages, pages, nodes, status, flags) +syscall sys_utimensat nr 280 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_epoll_pwait nr 281 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_signalfd nr 282 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_timerfd_create nr 283 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_eventfd nr 284 nbargs 1 types: (unsigned int) args: (count) +syscall sys_fallocate nr 285 nbargs 4 types: (int, int, loff_t, loff_t) args: (fd, mode, offset, len) +syscall sys_timerfd_settime nr 286 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_timerfd_gettime nr 287 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_accept4 nr 288 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_signalfd4 nr 289 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 290 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 291 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 292 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 293 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 294 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 295 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 296 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 297 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 298 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_recvmmsg nr 299 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_fanotify_init nr 300 nbargs 2 types: (unsigned int, unsigned int) args: (flags, event_f_flags) +syscall sys_fanotify_mark nr 301 nbargs 5 types: (int, unsigned int, __u64, int, const char *) args: (fanotify_fd, flags, mask, dfd, pathname) +syscall sys_prlimit64 nr 302 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_name_to_handle_at nr 303 nbargs 5 types: (int, const char *, struct file_handle *, int *, int) args: (dfd, name, handle, mnt_id, flag) +syscall sys_open_by_handle_at nr 304 nbargs 3 types: (int, struct file_handle *, int) args: (mountdirfd, handle, flags) +syscall sys_clock_adjtime nr 305 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 306 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 307 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 308 nbargs 2 types: (int, int) args: (fd, nstype) +syscall sys_getcpu nr 309 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_process_vm_readv nr 310 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_process_vm_writev nr 311 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_finit_module nr 313 nbargs 3 types: (int, const char *, int) args: (fd, uargs, flags) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.13.0/mips-32-syscalls-3.13.0 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.13.0/mips-32-syscalls-3.13.0 new file mode 100644 index 000000000000..e815a9892124 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.13.0/mips-32-syscalls-3.13.0 @@ -0,0 +1,283 @@ +syscall sys_exit nr 4001 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 4003 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4004 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 4005 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 4006 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_waitpid nr 4007 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_creat nr 4008 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 4009 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 4010 nbargs 1 types: (const char *) args: (pathname) +syscall sys_execve nr 4011 nbargs 3 types: (const char *, const char *const *, const char *const *) args: (filename, argv, envp) +syscall sys_chdir nr 4012 nbargs 1 types: (const char *) args: (filename) +syscall sys_time nr 4013 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_mknod nr 4014 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 4015 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_lchown nr 4016 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_lseek nr 4019 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, whence) +syscall sys_getpid nr 4020 nbargs 0 types: () args: () +syscall sys_mount nr 4021 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_oldumount nr 4022 nbargs 1 types: (char *) args: (name) +syscall sys_setuid nr 4023 nbargs 1 types: (uid_t) args: (uid) +syscall sys_getuid nr 4024 nbargs 0 types: () args: () +syscall sys_stime nr 4025 nbargs 1 types: (time_t *) args: (tptr) +syscall sys_ptrace nr 4026 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_alarm nr 4027 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_pause nr 4029 nbargs 0 types: () args: () +syscall sys_utime nr 4030 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_access nr 4033 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 4034 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 4036 nbargs 0 types: () args: () +syscall sys_kill nr 4037 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 4038 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 4039 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 4040 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 4041 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_times nr 4043 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 4045 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid nr 4046 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getgid nr 4047 nbargs 0 types: () args: () +syscall sys_geteuid nr 4049 nbargs 0 types: () args: () +syscall sys_getegid nr 4050 nbargs 0 types: () args: () +syscall sys_umount nr 4052 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 4054 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 4055 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 4057 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_olduname nr 4059 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_umask nr 4060 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 4061 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 4062 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 4063 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 4064 nbargs 0 types: () args: () +syscall sys_getpgrp nr 4065 nbargs 0 types: () args: () +syscall sys_setsid nr 4066 nbargs 0 types: () args: () +syscall sys_sigaction nr 4067 nbargs 3 types: (int, const struct sigaction *, struct sigaction *) args: (sig, act, oact) +syscall sys_sgetmask nr 4068 nbargs 0 types: () args: () +syscall sys_ssetmask nr 4069 nbargs 1 types: (int) args: (newmask) +syscall sys_setreuid nr 4070 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 4071 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_sigsuspend nr 4072 nbargs 1 types: (sigset_t *) args: (uset) +syscall sys_sigpending nr 4073 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 4074 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 4075 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrlimit nr 4076 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 4077 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 4078 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 4079 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups nr 4080 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 4081 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_symlink nr 4083 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 4085 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_uselib nr 4086 nbargs 1 types: (const char *) args: (library) +syscall sys_reboot nr 4088 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_old_readdir nr 4089 nbargs 3 types: (unsigned int, struct old_linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_mips_mmap nr 4090 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, off_t) args: (addr, len, prot, flags, fd, offset) +syscall sys_munmap nr 4091 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 4092 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 4093 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 4094 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_fchown nr 4095 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_getpriority nr 4096 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 4097 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 4099 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 4100 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_socketcall nr 4102 nbargs 2 types: (int, unsigned long *) args: (call, args) +syscall sys_syslog nr 4103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 4104 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 4105 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 4106 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 4107 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 4108 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_uname nr 4109 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_vhangup nr 4111 nbargs 0 types: () args: () +syscall sys_wait4 nr 4114 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_sysinfo nr 4116 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_ipc nr 4117 nbargs 6 types: (unsigned int, int, unsigned long, unsigned long, void *, long) args: (call, first, second, third, ptr, fifth) +syscall sys_fsync nr 4118 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 4121 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 4122 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 4124 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 4125 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 4126 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 4128 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 4129 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_getpgid nr 4132 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 4133 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 4134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_sysfs nr 4135 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_personality nr 4136 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid nr 4138 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 4139 nbargs 1 types: (gid_t) args: (gid) +syscall sys_llseek nr 4140 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, whence) +syscall sys_getdents nr 4141 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 4142 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 4143 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 4144 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 4145 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 4146 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_cacheflush nr 4147 nbargs 3 types: (unsigned long, unsigned long, unsigned int) args: (addr, bytes, cache) +syscall sys_cachectl nr 4148 nbargs 3 types: (char *, int, int) args: (addr, nbytes, op) +syscall sys_sysmips nr 4149 nbargs 3 types: (long, long, long) args: (cmd, arg1, arg2) +syscall sys_getsid nr 4151 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 4152 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 4153 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 4154 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 4155 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 4156 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 4157 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 4158 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 4159 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 4160 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 4161 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 4162 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 4163 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 4164 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 4165 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 4166 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 4167 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_accept nr 4168 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_bind nr 4169 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_connect nr 4170 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_getpeername nr 4171 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getsockname nr 4172 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getsockopt nr 4173 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_listen nr 4174 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_recvfrom nr 4176 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_recvmsg nr 4177 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_send nr 4178 nbargs 4 types: (int, void *, size_t, unsigned int) args: (fd, buff, len, flags) +syscall sys_sendmsg nr 4179 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_sendto nr 4180 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_setsockopt nr 4181 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_shutdown nr 4182 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_socket nr 4183 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_socketpair nr 4184 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_setresuid nr 4185 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 4186 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruidp, euidp, suidp) +syscall sys_poll nr 4188 nbargs 3 types: (struct pollfd *, unsigned int, int) args: (ufds, nfds, timeout_msecs) +syscall sys_setresgid nr 4190 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 4191 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgidp, egidp, sgidp) +syscall sys_prctl nr 4192 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_rt_sigaction nr 4194 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 4195 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 4196 nbargs 2 types: (sigset_t *, size_t) args: (uset, sigsetsize) +syscall sys_rt_sigtimedwait nr 4197 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 4198 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 4199 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_pread64 nr 4200 nbargs 4 types: (unsigned int, char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_pwrite64 nr 4201 nbargs 4 types: (unsigned int, const char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_chown nr 4202 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_getcwd nr 4203 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_capget nr 4204 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 4205 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_sigaltstack nr 4206 nbargs 2 types: (const stack_t *, stack_t *) args: (uss, uoss) +syscall sys_sendfile nr 4207 nbargs 4 types: (int, int, off_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_mips_mmap2 nr 4210 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, len, prot, flags, fd, pgoff) +syscall sys_truncate64 nr 4211 nbargs 2 types: (const char *, loff_t) args: (path, length) +syscall sys_ftruncate64 nr 4212 nbargs 2 types: (unsigned int, loff_t) args: (fd, length) +syscall sys_stat64 nr 4213 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_lstat64 nr 4214 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_fstat64 nr 4215 nbargs 2 types: (unsigned long, struct stat64 *) args: (fd, statbuf) +syscall sys_pivot_root nr 4216 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_mincore nr 4217 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 4218 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_getdents64 nr 4219 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_fcntl64 nr 4220 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_gettid nr 4222 nbargs 0 types: () args: () +syscall sys_readahead nr 4223 nbargs 3 types: (int, loff_t, size_t) args: (fd, offset, count) +syscall sys_setxattr nr 4224 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 4225 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 4226 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 4227 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 4228 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 4229 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 4230 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 4231 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 4232 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 4233 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 4234 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 4235 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 4236 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_sendfile64 nr 4237 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_futex nr 4238 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_io_setup nr 4241 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 4242 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 4243 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 4244 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 4245 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_exit_group nr 4246 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 4248 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 4249 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 4250 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 4251 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_set_tid_address nr 4252 nbargs 1 types: (int *) args: (tidptr) +syscall sys_restart_syscall nr 4253 nbargs 0 types: () args: () +syscall sys_fadvise64_64 nr 4254 nbargs 4 types: (int, loff_t, loff_t, int) args: (fd, offset, len, advice) +syscall sys_statfs64 nr 4255 nbargs 3 types: (const char *, size_t, struct statfs64 *) args: (pathname, sz, buf) +syscall sys_fstatfs64 nr 4256 nbargs 3 types: (unsigned int, size_t, struct statfs64 *) args: (fd, sz, buf) +syscall sys_timer_create nr 4257 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 4258 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 4259 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 4260 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 4261 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 4262 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 4263 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 4264 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 4265 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_tgkill nr 4266 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 4267 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_waitid nr 4278 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_set_thread_area nr 4283 nbargs 1 types: (unsigned long) args: (addr) +syscall sys_inotify_init nr 4284 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 4285 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 4286 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_openat nr 4288 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 4289 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_mknodat nr 4290 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 4291 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 4292 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_fstatat64 nr 4293 nbargs 4 types: (int, const char *, struct stat64 *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 4294 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 4295 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 4296 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 4297 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 4298 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 4299 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 4300 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_pselect6 nr 4301 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 4302 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 4303 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_splice nr 4304 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_sync_file_range nr 4305 nbargs 4 types: (int, loff_t, loff_t, unsigned int) args: (fd, offset, nbytes, flags) +syscall sys_tee nr 4306 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_vmsplice nr 4307 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_set_robust_list nr 4309 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 4310 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_getcpu nr 4312 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_epoll_pwait nr 4313 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_ioprio_set nr 4314 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 4315 nbargs 2 types: (int, int) args: (which, who) +syscall sys_utimensat nr 4316 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 4317 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_eventfd nr 4319 nbargs 1 types: (unsigned int) args: (count) +syscall sys_fallocate nr 4320 nbargs 4 types: (int, int, loff_t, loff_t) args: (fd, mode, offset, len) +syscall sys_timerfd_create nr 4321 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_timerfd_gettime nr 4322 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_timerfd_settime nr 4323 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_signalfd4 nr 4324 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 4325 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 4326 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 4327 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 4328 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 4329 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 4330 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 4331 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 4332 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 4333 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_accept4 nr 4334 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_recvmmsg nr 4335 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_prlimit64 nr 4338 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_name_to_handle_at nr 4339 nbargs 5 types: (int, const char *, struct file_handle *, int *, int) args: (dfd, name, handle, mnt_id, flag) +syscall sys_open_by_handle_at nr 4340 nbargs 3 types: (int, struct file_handle *, int) args: (mountdirfd, handle, flags) +syscall sys_clock_adjtime nr 4341 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 4342 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 4343 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 4344 nbargs 2 types: (int, int) args: (fd, nstype) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.18.0/mips-32-syscalls-3.18.0 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.18.0/mips-32-syscalls-3.18.0 new file mode 100644 index 000000000000..d0b35a674852 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.18.0/mips-32-syscalls-3.18.0 @@ -0,0 +1,287 @@ +syscall sys_exit nr 4001 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 4003 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4004 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 4005 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 4006 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_waitpid nr 4007 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_creat nr 4008 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 4009 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 4010 nbargs 1 types: (const char *) args: (pathname) +syscall sys_execve nr 4011 nbargs 3 types: (const char *, const char *const *, const char *const *) args: (filename, argv, envp) +syscall sys_chdir nr 4012 nbargs 1 types: (const char *) args: (filename) +syscall sys_time nr 4013 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_mknod nr 4014 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 4015 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_lchown nr 4016 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_lseek nr 4019 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, whence) +syscall sys_getpid nr 4020 nbargs 0 types: () args: () +syscall sys_mount nr 4021 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_oldumount nr 4022 nbargs 1 types: (char *) args: (name) +syscall sys_setuid nr 4023 nbargs 1 types: (uid_t) args: (uid) +syscall sys_getuid nr 4024 nbargs 0 types: () args: () +syscall sys_stime nr 4025 nbargs 1 types: (time_t *) args: (tptr) +syscall sys_ptrace nr 4026 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_alarm nr 4027 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_pause nr 4029 nbargs 0 types: () args: () +syscall sys_utime nr 4030 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_access nr 4033 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 4034 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 4036 nbargs 0 types: () args: () +syscall sys_kill nr 4037 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 4038 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 4039 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 4040 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 4041 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_times nr 4043 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 4045 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid nr 4046 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getgid nr 4047 nbargs 0 types: () args: () +syscall sys_geteuid nr 4049 nbargs 0 types: () args: () +syscall sys_getegid nr 4050 nbargs 0 types: () args: () +syscall sys_umount nr 4052 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 4054 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 4055 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 4057 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_olduname nr 4059 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_umask nr 4060 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 4061 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 4062 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 4063 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 4064 nbargs 0 types: () args: () +syscall sys_getpgrp nr 4065 nbargs 0 types: () args: () +syscall sys_setsid nr 4066 nbargs 0 types: () args: () +syscall sys_sigaction nr 4067 nbargs 3 types: (int, const struct sigaction *, struct sigaction *) args: (sig, act, oact) +syscall sys_setreuid nr 4070 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 4071 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_sigsuspend nr 4072 nbargs 1 types: (sigset_t *) args: (uset) +syscall sys_sigpending nr 4073 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 4074 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 4075 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrlimit nr 4076 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 4077 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 4078 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 4079 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups nr 4080 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 4081 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_symlink nr 4083 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 4085 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_reboot nr 4088 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_old_readdir nr 4089 nbargs 3 types: (unsigned int, struct old_linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_mmap nr 4090 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, off_t) args: (addr, len, prot, flags, fd, offset) +syscall sys_munmap nr 4091 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 4092 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 4093 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 4094 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_fchown nr 4095 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_getpriority nr 4096 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 4097 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 4099 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 4100 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_socketcall nr 4102 nbargs 2 types: (int, unsigned long *) args: (call, args) +syscall sys_syslog nr 4103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 4104 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 4105 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 4106 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 4107 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 4108 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_uname nr 4109 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_vhangup nr 4111 nbargs 0 types: () args: () +syscall sys_wait4 nr 4114 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_sysinfo nr 4116 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_ipc nr 4117 nbargs 6 types: (unsigned int, int, unsigned long, unsigned long, void *, long) args: (call, first, second, third, ptr, fifth) +syscall sys_fsync nr 4118 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 4121 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 4122 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 4124 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 4125 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 4126 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 4128 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 4129 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_getpgid nr 4132 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 4133 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 4134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_personality nr 4136 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid nr 4138 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 4139 nbargs 1 types: (gid_t) args: (gid) +syscall sys_llseek nr 4140 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, whence) +syscall sys_getdents nr 4141 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 4142 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 4143 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 4144 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 4145 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 4146 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_cacheflush nr 4147 nbargs 3 types: (unsigned long, unsigned long, unsigned int) args: (addr, bytes, cache) +syscall sys_cachectl nr 4148 nbargs 3 types: (char *, int, int) args: (addr, nbytes, op) +syscall sys_sysmips nr 4149 nbargs 3 types: (long, long, long) args: (cmd, arg1, arg2) +syscall sys_getsid nr 4151 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 4152 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 4153 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 4154 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 4155 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 4156 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 4157 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 4158 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 4159 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 4160 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 4161 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 4162 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 4163 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 4164 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 4165 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 4166 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 4167 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_accept nr 4168 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_bind nr 4169 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_connect nr 4170 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_getpeername nr 4171 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getsockname nr 4172 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getsockopt nr 4173 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_listen nr 4174 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_recv nr 4175 nbargs 4 types: (int, void *, size_t, unsigned int) args: (fd, ubuf, size, flags) +syscall sys_recvfrom nr 4176 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_recvmsg nr 4177 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_send nr 4178 nbargs 4 types: (int, void *, size_t, unsigned int) args: (fd, buff, len, flags) +syscall sys_sendmsg nr 4179 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_sendto nr 4180 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_setsockopt nr 4181 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_shutdown nr 4182 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_socket nr 4183 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_socketpair nr 4184 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_setresuid nr 4185 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 4186 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruidp, euidp, suidp) +syscall sys_poll nr 4188 nbargs 3 types: (struct pollfd *, unsigned int, int) args: (ufds, nfds, timeout_msecs) +syscall sys_setresgid nr 4190 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 4191 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgidp, egidp, sgidp) +syscall sys_prctl nr 4192 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_rt_sigaction nr 4194 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 4195 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 4196 nbargs 2 types: (sigset_t *, size_t) args: (uset, sigsetsize) +syscall sys_rt_sigtimedwait nr 4197 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 4198 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 4199 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_pread64 nr 4200 nbargs 4 types: (unsigned int, char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_pwrite64 nr 4201 nbargs 4 types: (unsigned int, const char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_chown nr 4202 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_getcwd nr 4203 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_capget nr 4204 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 4205 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_sigaltstack nr 4206 nbargs 2 types: (const stack_t *, stack_t *) args: (uss, uoss) +syscall sys_sendfile nr 4207 nbargs 4 types: (int, int, off_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_mips_mmap2 nr 4210 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, len, prot, flags, fd, pgoff) +syscall sys_truncate64 nr 4211 nbargs 2 types: (const char *, loff_t) args: (path, length) +syscall sys_ftruncate64 nr 4212 nbargs 2 types: (unsigned int, loff_t) args: (fd, length) +syscall sys_stat64 nr 4213 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_lstat64 nr 4214 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_fstat64 nr 4215 nbargs 2 types: (unsigned long, struct stat64 *) args: (fd, statbuf) +syscall sys_pivot_root nr 4216 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_mincore nr 4217 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 4218 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_getdents64 nr 4219 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_fcntl64 nr 4220 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_gettid nr 4222 nbargs 0 types: () args: () +syscall sys_readahead nr 4223 nbargs 3 types: (int, loff_t, size_t) args: (fd, offset, count) +syscall sys_setxattr nr 4224 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 4225 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 4226 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 4227 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 4228 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 4229 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 4230 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 4231 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 4232 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 4233 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 4234 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 4235 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 4236 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_sendfile64 nr 4237 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_futex nr 4238 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_io_setup nr 4241 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 4242 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 4243 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 4244 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 4245 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_exit_group nr 4246 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 4248 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 4249 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 4250 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 4251 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_set_tid_address nr 4252 nbargs 1 types: (int *) args: (tidptr) +syscall sys_restart_syscall nr 4253 nbargs 0 types: () args: () +syscall sys_fadvise64_64 nr 4254 nbargs 4 types: (int, loff_t, loff_t, int) args: (fd, offset, len, advice) +syscall sys_statfs64 nr 4255 nbargs 3 types: (const char *, size_t, struct statfs64 *) args: (pathname, sz, buf) +syscall sys_fstatfs64 nr 4256 nbargs 3 types: (unsigned int, size_t, struct statfs64 *) args: (fd, sz, buf) +syscall sys_timer_create nr 4257 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 4258 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 4259 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 4260 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 4261 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 4262 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 4263 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 4264 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 4265 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_tgkill nr 4266 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 4267 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_waitid nr 4278 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_set_thread_area nr 4283 nbargs 1 types: (unsigned long) args: (addr) +syscall sys_inotify_init nr 4284 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 4285 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 4286 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_openat nr 4288 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 4289 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_mknodat nr 4290 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 4291 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 4292 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_fstatat64 nr 4293 nbargs 4 types: (int, const char *, struct stat64 *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 4294 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 4295 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 4296 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 4297 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 4298 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 4299 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 4300 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_pselect6 nr 4301 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 4302 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 4303 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_splice nr 4304 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_sync_file_range nr 4305 nbargs 4 types: (int, loff_t, loff_t, unsigned int) args: (fd, offset, nbytes, flags) +syscall sys_tee nr 4306 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_vmsplice nr 4307 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_set_robust_list nr 4309 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 4310 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_getcpu nr 4312 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_epoll_pwait nr 4313 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_ioprio_set nr 4314 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 4315 nbargs 2 types: (int, int) args: (which, who) +syscall sys_utimensat nr 4316 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 4317 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_eventfd nr 4319 nbargs 1 types: (unsigned int) args: (count) +syscall sys_fallocate nr 4320 nbargs 4 types: (int, int, loff_t, loff_t) args: (fd, mode, offset, len) +syscall sys_timerfd_create nr 4321 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_timerfd_gettime nr 4322 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_timerfd_settime nr 4323 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_signalfd4 nr 4324 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 4325 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 4326 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 4327 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 4328 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 4329 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 4330 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 4331 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 4332 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 4333 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_accept4 nr 4334 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_recvmmsg nr 4335 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_prlimit64 nr 4338 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_name_to_handle_at nr 4339 nbargs 5 types: (int, const char *, struct file_handle *, int *, int) args: (dfd, name, handle, mnt_id, flag) +syscall sys_open_by_handle_at nr 4340 nbargs 3 types: (int, struct file_handle *, int) args: (mountdirfd, handle, flags) +syscall sys_clock_adjtime nr 4341 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 4342 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 4343 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 4344 nbargs 2 types: (int, int) args: (fd, nstype) +syscall sys_finit_module nr 4348 nbargs 3 types: (int, const char *, int) args: (fd, uargs, flags) +syscall sys_sched_setattr nr 4349 nbargs 3 types: (pid_t, struct sched_attr *, unsigned int) args: (pid, uattr, flags) +syscall sys_sched_getattr nr 4350 nbargs 4 types: (pid_t, struct sched_attr *, unsigned int, unsigned int) args: (pid, uattr, size, flags) +syscall sys_renameat2 nr 4351 nbargs 5 types: (int, const char *, int, const char *, unsigned int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_seccomp nr 4352 nbargs 3 types: (unsigned int, unsigned int, const char *) args: (op, flags, uargs) +syscall sys_getrandom nr 4353 nbargs 3 types: (char *, size_t, unsigned int) args: (buf, count, flags) +syscall sys_memfd_create nr 4354 nbargs 2 types: (const char *, unsigned int) args: (uname, flags) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.4.25/arm-32-syscalls-3.4.25 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.4.25/arm-32-syscalls-3.4.25 new file mode 100644 index 000000000000..65c3973d3783 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.4.25/arm-32-syscalls-3.4.25 @@ -0,0 +1,299 @@ +syscall sys_restart_syscall nr 0 nbargs 0 types: () args: () +syscall sys_exit nr 1 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 3 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 5 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 6 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_creat nr 8 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 9 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 10 nbargs 1 types: (const char *) args: (pathname) +syscall sys_chdir nr 12 nbargs 1 types: (const char *) args: (filename) +syscall sys_mknod nr 14 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 15 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_lchown16 nr 16 nbargs 3 types: (const char *, old_uid_t, old_gid_t) args: (filename, user, group) +syscall sys_lseek nr 19 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, origin) +syscall sys_getpid nr 20 nbargs 0 types: () args: () +syscall sys_mount nr 21 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_setuid16 nr 23 nbargs 1 types: (old_uid_t) args: (uid) +syscall sys_getuid16 nr 24 nbargs 0 types: () args: () +syscall sys_ptrace nr 26 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_pause nr 29 nbargs 0 types: () args: () +syscall sys_access nr 33 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 34 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 36 nbargs 0 types: () args: () +syscall sys_kill nr 37 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 38 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 39 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 40 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 41 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_pipe nr 42 nbargs 1 types: (int *) args: (fildes) +syscall sys_times nr 43 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 45 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid16 nr 46 nbargs 1 types: (old_gid_t) args: (gid) +syscall sys_getgid16 nr 47 nbargs 0 types: () args: () +syscall sys_geteuid16 nr 49 nbargs 0 types: () args: () +syscall sys_getegid16 nr 50 nbargs 0 types: () args: () +syscall sys_acct nr 51 nbargs 1 types: (const char *) args: (name) +syscall sys_umount nr 52 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 54 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 55 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 57 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_umask nr 60 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 61 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 62 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 63 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 64 nbargs 0 types: () args: () +syscall sys_getpgrp nr 65 nbargs 0 types: () args: () +syscall sys_setsid nr 66 nbargs 0 types: () args: () +syscall sys_setreuid16 nr 70 nbargs 2 types: (old_uid_t, old_uid_t) args: (ruid, euid) +syscall sys_setregid16 nr 71 nbargs 2 types: (old_gid_t, old_gid_t) args: (rgid, egid) +syscall sys_sigpending nr 73 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 74 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 75 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 77 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 78 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 79 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups16 nr 80 nbargs 2 types: (int, old_gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups16 nr 81 nbargs 2 types: (int, old_gid_t *) args: (gidsetsize, grouplist) +syscall sys_symlink nr 83 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 85 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_uselib nr 86 nbargs 1 types: (const char *) args: (library) +syscall sys_swapon nr 87 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_reboot nr 88 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_munmap nr 91 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 92 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 93 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 94 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_fchown16 nr 95 nbargs 3 types: (unsigned int, old_uid_t, old_gid_t) args: (fd, user, group) +syscall sys_getpriority nr 96 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 97 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 99 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 100 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_syslog nr 103 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 104 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 105 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 106 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 107 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 108 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_vhangup nr 111 nbargs 0 types: () args: () +syscall sys_wait4 nr 114 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_swapoff nr 115 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_sysinfo nr 116 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_fsync nr 118 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 121 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 122 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 124 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 125 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 126 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 128 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 129 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_quotactl nr 131 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_getpgid nr 132 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 133 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_sysfs nr 135 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_personality nr 136 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid16 nr 138 nbargs 1 types: (old_uid_t) args: (uid) +syscall sys_setfsgid16 nr 139 nbargs 1 types: (old_gid_t) args: (gid) +syscall sys_llseek nr 140 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, origin) +syscall sys_getdents nr 141 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 142 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 143 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 144 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 145 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 146 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_getsid nr 147 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 148 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 149 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 150 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 151 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 152 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 153 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 154 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 155 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 156 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 157 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 158 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 159 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 160 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 161 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 162 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 163 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_setresuid16 nr 164 nbargs 3 types: (old_uid_t, old_uid_t, old_uid_t) args: (ruid, euid, suid) +syscall sys_getresuid16 nr 165 nbargs 3 types: (old_uid_t *, old_uid_t *, old_uid_t *) args: (ruid, euid, suid) +syscall sys_poll nr 168 nbargs 3 types: (struct pollfd *, unsigned int, int) args: (ufds, nfds, timeout_msecs) +syscall sys_setresgid16 nr 170 nbargs 3 types: (old_gid_t, old_gid_t, old_gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid16 nr 171 nbargs 3 types: (old_gid_t *, old_gid_t *, old_gid_t *) args: (rgid, egid, sgid) +syscall sys_prctl nr 172 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_rt_sigaction nr 174 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 175 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 176 nbargs 2 types: (sigset_t *, size_t) args: (set, sigsetsize) +syscall sys_rt_sigtimedwait nr 177 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 178 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_rt_sigsuspend nr 179 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_chown16 nr 182 nbargs 3 types: (const char *, old_uid_t, old_gid_t) args: (filename, user, group) +syscall sys_getcwd nr 183 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_capget nr 184 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 185 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_sendfile nr 187 nbargs 4 types: (int, int, off_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_getrlimit nr 191 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_stat64 nr 195 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_lstat64 nr 196 nbargs 2 types: (const char *, struct stat64 *) args: (filename, statbuf) +syscall sys_fstat64 nr 197 nbargs 2 types: (unsigned long, struct stat64 *) args: (fd, statbuf) +syscall sys_lchown nr 198 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_getuid nr 199 nbargs 0 types: () args: () +syscall sys_getgid nr 200 nbargs 0 types: () args: () +syscall sys_geteuid nr 201 nbargs 0 types: () args: () +syscall sys_getegid nr 202 nbargs 0 types: () args: () +syscall sys_setreuid nr 203 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 204 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_getgroups nr 205 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 206 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_fchown nr 207 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_setresuid nr 208 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 209 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruid, euid, suid) +syscall sys_setresgid nr 210 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 211 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgid, egid, sgid) +syscall sys_chown nr 212 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_setuid nr 213 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setgid nr 214 nbargs 1 types: (gid_t) args: (gid) +syscall sys_setfsuid nr 215 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 216 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getdents64 nr 217 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_pivot_root nr 218 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_mincore nr 219 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 220 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_fcntl64 nr 221 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_gettid nr 224 nbargs 0 types: () args: () +syscall sys_setxattr nr 226 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 227 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 228 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 229 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 230 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 231 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 232 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 233 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 234 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 235 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 236 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 237 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 238 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_sendfile64 nr 239 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_futex nr 240 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_sched_setaffinity nr 241 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 242 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_io_setup nr 243 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 244 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_getevents nr 245 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 246 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 247 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_exit_group nr 248 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 250 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 251 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 252 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 253 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_set_tid_address nr 256 nbargs 1 types: (int *) args: (tidptr) +syscall sys_timer_create nr 257 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 258 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 259 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 260 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 261 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 262 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 263 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 264 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 265 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_tgkill nr 268 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_utimes nr 269 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_mq_open nr 274 nbargs 4 types: (const char *, int, umode_t, struct mq_attr *) args: (u_name, oflag, mode, u_attr) +syscall sys_mq_unlink nr 275 nbargs 1 types: (const char *) args: (u_name) +syscall sys_mq_timedsend nr 276 nbargs 5 types: (mqd_t, const char *, size_t, unsigned int, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout) +syscall sys_mq_timedreceive nr 277 nbargs 5 types: (mqd_t, char *, size_t, unsigned int *, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout) +syscall sys_mq_notify nr 278 nbargs 2 types: (mqd_t, const struct sigevent *) args: (mqdes, u_notification) +syscall sys_mq_getsetattr nr 279 nbargs 3 types: (mqd_t, const struct mq_attr *, struct mq_attr *) args: (mqdes, u_mqstat, u_omqstat) +syscall sys_waitid nr 280 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_socket nr 281 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_bind nr 282 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_connect nr 283 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_listen nr 284 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_accept nr 285 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_getsockname nr 286 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getpeername nr 287 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_socketpair nr 288 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_send nr 289 nbargs 4 types: (int, void *, size_t, unsigned) args: (fd, buff, len, flags) +syscall sys_sendto nr 290 nbargs 6 types: (int, void *, size_t, unsigned, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_recvfrom nr 292 nbargs 6 types: (int, void *, size_t, unsigned, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_shutdown nr 293 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_setsockopt nr 294 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_getsockopt nr 295 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_sendmsg nr 296 nbargs 3 types: (int, struct msghdr *, unsigned) args: (fd, msg, flags) +syscall sys_recvmsg nr 297 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_semop nr 298 nbargs 3 types: (int, struct sembuf *, unsigned) args: (semid, tsops, nsops) +syscall sys_semget nr 299 nbargs 3 types: (key_t, int, int) args: (key, nsems, semflg) +syscall sys_msgsnd nr 301 nbargs 4 types: (int, struct msgbuf *, size_t, int) args: (msqid, msgp, msgsz, msgflg) +syscall sys_msgrcv nr 302 nbargs 5 types: (int, struct msgbuf *, size_t, long, int) args: (msqid, msgp, msgsz, msgtyp, msgflg) +syscall sys_msgget nr 303 nbargs 2 types: (key_t, int) args: (key, msgflg) +syscall sys_msgctl nr 304 nbargs 3 types: (int, int, struct msqid_ds *) args: (msqid, cmd, buf) +syscall sys_shmat nr 305 nbargs 3 types: (int, char *, int) args: (shmid, shmaddr, shmflg) +syscall sys_shmdt nr 306 nbargs 1 types: (char *) args: (shmaddr) +syscall sys_shmget nr 307 nbargs 3 types: (key_t, size_t, int) args: (key, size, shmflg) +syscall sys_shmctl nr 308 nbargs 3 types: (int, int, struct shmid_ds *) args: (shmid, cmd, buf) +syscall sys_add_key nr 309 nbargs 5 types: (const char *, const char *, const void *, size_t, key_serial_t) args: (_type, _description, _payload, plen, ringid) +syscall sys_request_key nr 310 nbargs 4 types: (const char *, const char *, const char *, key_serial_t) args: (_type, _description, _callout_info, destringid) +syscall sys_keyctl nr 311 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_semtimedop nr 312 nbargs 4 types: (int, struct sembuf *, unsigned, const struct timespec *) args: (semid, tsops, nsops, timeout) +syscall sys_ioprio_set nr 314 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 315 nbargs 2 types: (int, int) args: (which, who) +syscall sys_inotify_init nr 316 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 317 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 318 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_openat nr 322 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 323 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_mknodat nr 324 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 325 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_futimesat nr 326 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_fstatat64 nr 327 nbargs 4 types: (int, const char *, struct stat64 *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 328 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 329 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 330 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 331 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 332 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 333 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 334 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_pselect6 nr 335 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 336 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_unshare nr 337 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_set_robust_list nr 338 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 339 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_splice nr 340 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 342 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_vmsplice nr 343 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_getcpu nr 345 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_epoll_pwait nr 346 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_utimensat nr 348 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 349 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_timerfd_create nr 350 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_eventfd nr 351 nbargs 1 types: (unsigned int) args: (count) +syscall sys_timerfd_settime nr 353 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_timerfd_gettime nr 354 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_signalfd4 nr 355 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 356 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 357 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 358 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 359 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 360 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 361 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 362 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_rt_tgsigqueueinfo nr 363 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 364 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_recvmmsg nr 365 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_accept4 nr 366 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_fanotify_init nr 367 nbargs 2 types: (unsigned int, unsigned int) args: (flags, event_f_flags) +syscall sys_prlimit64 nr 369 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_name_to_handle_at nr 370 nbargs 5 types: (int, const char *, struct file_handle *, int *, int) args: (dfd, name, handle, mnt_id, flag) +syscall sys_open_by_handle_at nr 371 nbargs 3 types: (int, struct file_handle *, int) args: (mountdirfd, handle, flags) +syscall sys_clock_adjtime nr 372 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 373 nbargs 1 types: (int) args: (fd) +syscall sys_sendmmsg nr 374 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_setns nr 375 nbargs 2 types: (int, int) args: (fd, nstype) +syscall sys_process_vm_readv nr 376 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_process_vm_writev nr 377 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-32-syscalls-3.5.0 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-32-syscalls-3.5.0 new file mode 100644 index 000000000000..5b62cc7b4f14 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-32-syscalls-3.5.0 @@ -0,0 +1,141 @@ +syscall sys_exit nr 4003 nbargs 1 types: (int) args: (error_code) +syscall sys_read nr 4007 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 4009 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 4011 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 4013 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_waitpid nr 4015 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_creat nr 4017 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 4019 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 4021 nbargs 1 types: (const char *) args: (pathname) +syscall sys_chdir nr 4025 nbargs 1 types: (const char *) args: (filename) +syscall sys_time nr 4027 nbargs 1 types: (time_t *) args: (tloc) +syscall sys_mknod nr 4029 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_chmod nr 4031 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_lchown nr 4033 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_lseek nr 4039 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, origin) +syscall sys_getpid nr 4041 nbargs 0 types: () args: () +syscall sys_mount nr 4043 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_oldumount nr 4045 nbargs 1 types: (char *) args: (name) +syscall sys_setuid nr 4047 nbargs 1 types: (uid_t) args: (uid) +syscall sys_getuid nr 4049 nbargs 0 types: () args: () +syscall sys_stime nr 4051 nbargs 1 types: (time_t *) args: (tptr) +syscall sys_ptrace nr 4053 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_alarm nr 4055 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_pause nr 4059 nbargs 0 types: () args: () +syscall sys_utime nr 4061 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_access nr 4067 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_nice nr 4069 nbargs 1 types: (int) args: (increment) +syscall sys_sync nr 4073 nbargs 0 types: () args: () +syscall sys_kill nr 4075 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_rename nr 4077 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 4079 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 4081 nbargs 1 types: (const char *) args: (pathname) +syscall sys_dup nr 4083 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_times nr 4087 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_brk nr 4091 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_setgid nr 4093 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getgid nr 4095 nbargs 0 types: () args: () +syscall sys_geteuid nr 4099 nbargs 0 types: () args: () +syscall sys_getegid nr 4101 nbargs 0 types: () args: () +syscall sys_umount nr 4105 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_ioctl nr 4109 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_fcntl nr 4111 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_setpgid nr 4115 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_olduname nr 4119 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_umask nr 4121 nbargs 1 types: (int) args: (mask) +syscall sys_chroot nr 4123 nbargs 1 types: (const char *) args: (filename) +syscall sys_ustat nr 4125 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_dup2 nr 4127 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_getppid nr 4129 nbargs 0 types: () args: () +syscall sys_getpgrp nr 4131 nbargs 0 types: () args: () +syscall sys_setsid nr 4133 nbargs 0 types: () args: () +syscall sys_sigaction nr 4135 nbargs 3 types: (int, const struct sigaction *, struct sigaction *) args: (sig, act, oact) +syscall sys_sgetmask nr 4137 nbargs 0 types: () args: () +syscall sys_ssetmask nr 4139 nbargs 1 types: (int) args: (newmask) +syscall sys_setreuid nr 4141 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 4143 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_sigpending nr 4147 nbargs 1 types: (old_sigset_t *) args: (set) +syscall sys_sethostname nr 4149 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setrlimit nr 4151 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrlimit nr 4153 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 4155 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_gettimeofday nr 4157 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 4159 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getgroups nr 4161 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 4163 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_symlink nr 4167 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 4171 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_uselib nr 4173 nbargs 1 types: (const char *) args: (library) +syscall sys_swapon nr 4175 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_reboot nr 4177 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_old_readdir nr 4179 nbargs 3 types: (unsigned int, struct old_linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_mips_mmap nr 4181 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, off_t) args: (addr, len, prot, flags, fd, offset) +syscall sys_munmap nr 4183 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_truncate nr 4185 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 4187 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fchmod nr 4189 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_fchown nr 4191 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_getpriority nr 4193 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 4195 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_statfs nr 4199 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 4201 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_socketcall nr 4205 nbargs 2 types: (int, unsigned long *) args: (call, args) +syscall sys_syslog nr 4207 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_setitimer nr 4209 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_getitimer nr 4211 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_newstat nr 4213 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newlstat nr 4215 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 4217 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_uname nr 4219 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_vhangup nr 4223 nbargs 0 types: () args: () +syscall sys_wait4 nr 4229 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_swapoff nr 4231 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_sysinfo nr 4233 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_ipc nr 4235 nbargs 6 types: (unsigned int, int, unsigned long, unsigned long, void *, long) args: (call, first, second, third, ptr, fifth) +syscall sys_fsync nr 4237 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_setdomainname nr 4243 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_newuname nr 4245 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_adjtimex nr 4249 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_mprotect nr 4251 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_sigprocmask nr 4253 nbargs 3 types: (int, old_sigset_t *, old_sigset_t *) args: (how, nset, oset) +syscall sys_init_module nr 4257 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 4259 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_quotactl nr 4263 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_getpgid nr 4265 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fchdir nr 4267 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_bdflush nr 4269 nbargs 2 types: (int, long) args: (func, data) +syscall sys_sysfs nr 4271 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_personality nr 4273 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_setfsuid nr 4277 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 4279 nbargs 1 types: (gid_t) args: (gid) +syscall sys_llseek nr 4281 nbargs 5 types: (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, origin) +syscall sys_getdents nr 4283 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_select nr 4285 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_flock nr 4287 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_msync nr 4289 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_readv nr 4291 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 4293 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_cacheflush nr 4295 nbargs 3 types: (unsigned long, unsigned long, unsigned int) args: (addr, bytes, cache) +syscall sys_cachectl nr 4297 nbargs 3 types: (char *, int, int) args: (addr, nbytes, op) +syscall sys_getsid nr 4303 nbargs 1 types: (pid_t) args: (pid) +syscall sys_fdatasync nr 4305 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sysctl nr 4307 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_mlock nr 4309 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 4311 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 4313 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 4315 nbargs 0 types: () args: () +syscall sys_sched_setparam nr 4317 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 4319 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 4321 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 4323 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_yield nr 4325 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 4327 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 4329 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 4331 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_nanosleep nr 4333 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_mremap nr 4335 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_accept nr 4337 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_bind nr 4339 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_connect nr 4341 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_getpeername nr 4343 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getsockname nr 4345 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-64-syscalls-3.5.0 b/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-64-syscalls-3.5.0 new file mode 100644 index 000000000000..7753e06ede92 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/3.5.0/mips-64-syscalls-3.5.0 @@ -0,0 +1,289 @@ +syscall sys_waitpid nr 4007 nbargs 3 types: (pid_t, int *, int) args: (pid, stat_addr, options) +syscall sys_oldumount nr 4022 nbargs 1 types: (char *) args: (name) +syscall sys_nice nr 4034 nbargs 1 types: (int) args: (increment) +syscall sys_olduname nr 4059 nbargs 1 types: (struct oldold_utsname *) args: (name) +syscall sys_32_sigaction nr 4067 nbargs 3 types: (long, const struct sigaction32 *, struct sigaction32 *) args: (sig, act, oact) +syscall sys_sgetmask nr 4068 nbargs 0 types: () args: () +syscall sys_ssetmask nr 4069 nbargs 1 types: (int) args: (newmask) +syscall sys_uselib nr 4086 nbargs 1 types: (const char *) args: (library) +syscall sys_uname nr 4109 nbargs 1 types: (struct old_utsname *) args: (name) +syscall sys_32_ipc nr 4117 nbargs 6 types: (u32, long, long, long, unsigned long, unsigned long) args: (call, first, second, third, ptr, fifth) +syscall sys_bdflush nr 4134 nbargs 2 types: (int, long) args: (func, data) +syscall sys_32_llseek nr 4140 nbargs 5 types: (unsigned int, unsigned int, unsigned int, loff_t *, unsigned int) args: (fd, offset_high, offset_low, result, origin) +syscall sys_send nr 4178 nbargs 4 types: (int, void *, size_t, unsigned int) args: (fd, buff, len, flags) +syscall sys_32_pread nr 4200 nbargs 6 types: (unsigned long, char *, size_t, unsigned long, unsigned long, unsigned long) args: (fd, buf, count, unused, a4, a5) +syscall sys_32_pwrite nr 4201 nbargs 6 types: (unsigned int, const char *, size_t, u32, u64, u64) args: (fd, buf, count, unused, a4, a5) +syscall sys_mips_mmap2 nr 4210 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, len, prot, flags, fd, pgoff) +syscall sys_32_truncate64 nr 4211 nbargs 4 types: (const char *, unsigned long, unsigned long, unsigned long) args: (path, __dummy, a2, a3) +syscall sys_32_ftruncate64 nr 4212 nbargs 4 types: (unsigned long, unsigned long, unsigned long, unsigned long) args: (fd, __dummy, a2, a3) +syscall sys_32_waitid nr 4278 nbargs 5 types: (int, compat_pid_t, compat_siginfo_t *, int, struct compat_rusage *) args: (which, pid, uinfo, options, uru) +syscall sys_32_fanotify_mark nr 4337 nbargs 6 types: (int, unsigned int, u64, u64, int, const char *) args: (fanotify_fd, flags, a3, a4, dfd, pathname) +syscall sys_rt_sigaction nr 5013 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 5014 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_ioctl nr 5015 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_readv nr 5018 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 5019 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_select nr 5022 nbargs 5 types: (int, fd_set *, fd_set *, fd_set *, struct timeval *) args: (n, inp, outp, exp, tvp) +syscall sys_shmctl nr 5030 nbargs 3 types: (int, int, struct shmid_ds *) args: (shmid, cmd, buf) +syscall sys_nanosleep nr 5034 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_getitimer nr 5035 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_setitimer nr 5036 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_recvfrom nr 5044 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_sendmsg nr 5045 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_recvmsg nr 5046 nbargs 3 types: (int, struct msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_setsockopt nr 5053 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_wait4 nr 5059 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_msgsnd nr 5067 nbargs 4 types: (int, struct msgbuf *, size_t, int) args: (msqid, msgp, msgsz, msgflg) +syscall sys_msgrcv nr 5068 nbargs 5 types: (int, struct msgbuf *, size_t, long, int) args: (msqid, msgp, msgsz, msgtyp, msgflg) +syscall sys_msgctl nr 5069 nbargs 3 types: (int, int, struct msqid_ds *) args: (msqid, cmd, buf) +syscall sys_fcntl nr 5070 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_getdents nr 5076 nbargs 3 types: (unsigned int, struct linux_dirent *, unsigned int) args: (fd, dirent, count) +syscall sys_gettimeofday nr 5094 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_getrlimit nr 5095 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 5096 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_sysinfo nr 5097 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_times nr 5098 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_ptrace nr 5099 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_rt_sigpending nr 5125 nbargs 2 types: (sigset_t *, size_t) args: (set, sigsetsize) +syscall sys_rt_sigtimedwait nr 5126 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 5127 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_utime nr 5130 nbargs 2 types: (char *, struct utimbuf *) args: (filename, times) +syscall sys_personality nr 5132 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_ustat nr 5133 nbargs 2 types: (unsigned, struct ustat *) args: (dev, ubuf) +syscall sys_statfs nr 5134 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 5135 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_sched_rr_get_interval nr 5145 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_sysctl nr 5152 nbargs 1 types: (struct __sysctl_args *) args: (args) +syscall sys_adjtimex nr 5154 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_setrlimit nr 5155 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_settimeofday nr 5159 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_mount nr 5160 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_futex nr 5194 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_sched_setaffinity nr 5195 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 5196 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_io_setup nr 5200 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_getevents nr 5202 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_io_submit nr 5203 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_semtimedop nr 5214 nbargs 4 types: (int, struct sembuf *, unsigned, const struct timespec *) args: (semid, tsops, nsops, timeout) +syscall sys_timer_create nr 5216 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_settime nr 5217 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_gettime nr 5218 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_clock_settime nr 5221 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 5222 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 5223 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 5224 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_utimes nr 5226 nbargs 2 types: (char *, struct timeval *) args: (filename, utimes) +syscall sys_waitid nr 5237 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_futimesat nr 5251 nbargs 3 types: (int, const char *, struct timeval *) args: (dfd, filename, utimes) +syscall sys_pselect6 nr 5260 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 5261 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_vmsplice nr 5266 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_set_robust_list nr 5268 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 5269 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_epoll_pwait nr 5272 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_utimensat nr 5275 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_signalfd nr 5276 nbargs 3 types: (int, sigset_t *, size_t) args: (ufd, user_mask, sizemask) +syscall sys_timerfd_gettime nr 5281 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_timerfd_settime nr 5282 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_rt_tgsigqueueinfo nr 5291 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_recvmmsg nr 5294 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_clock_adjtime nr 5300 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_sendmmsg nr 5302 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_process_vm_readv nr 5304 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_process_vm_writev nr 5305 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_read nr 6000 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 6001 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_open nr 6002 nbargs 3 types: (const char *, int, umode_t) args: (filename, flags, mode) +syscall sys_close nr 6003 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_newstat nr 6004 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_newfstat nr 6005 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_newlstat nr 6006 nbargs 2 types: (const char *, struct stat *) args: (filename, statbuf) +syscall sys_poll nr 6007 nbargs 3 types: (struct pollfd *, unsigned int, int) args: (ufds, nfds, timeout_msecs) +syscall sys_lseek nr 6008 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, origin) +syscall sys_mips_mmap nr 6009 nbargs 6 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, off_t) args: (addr, len, prot, flags, fd, offset) +syscall sys_mprotect nr 6010 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_munmap nr 6011 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_brk nr 6012 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_32_rt_sigaction nr 6013 nbargs 4 types: (int, const struct sigaction32 *, struct sigaction32 *, unsigned int) args: (sig, act, oact, sigsetsize) +syscall sys_32_rt_sigprocmask nr 6014 nbargs 4 types: (int, compat_sigset_t *, compat_sigset_t *, unsigned int) args: (how, set, oset, sigsetsize) +syscall sys_access nr 6020 nbargs 2 types: (const char *, int) args: (filename, mode) +syscall sys_sched_yield nr 6023 nbargs 0 types: () args: () +syscall sys_mremap nr 6024 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_msync nr 6025 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_mincore nr 6026 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 6027 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_shmget nr 6028 nbargs 3 types: (key_t, size_t, int) args: (key, size, shmflg) +syscall sys_shmat nr 6029 nbargs 3 types: (int, char *, int) args: (shmid, shmaddr, shmflg) +syscall sys_dup nr 6031 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_dup2 nr 6032 nbargs 2 types: (unsigned int, unsigned int) args: (oldfd, newfd) +syscall sys_pause nr 6033 nbargs 0 types: () args: () +syscall sys_alarm nr 6037 nbargs 1 types: (unsigned int) args: (seconds) +syscall sys_getpid nr 6038 nbargs 0 types: () args: () +syscall sys_32_sendfile nr 6039 nbargs 4 types: (long, long, compat_off_t *, s32) args: (out_fd, in_fd, offset, count) +syscall sys_socket nr 6040 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_connect nr 6041 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_accept nr 6042 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_sendto nr 6043 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_shutdown nr 6047 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_bind nr 6048 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_listen nr 6049 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_getsockname nr 6050 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getpeername nr 6051 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_socketpair nr 6052 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_getsockopt nr 6054 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_exit nr 6058 nbargs 1 types: (int) args: (error_code) +syscall sys_kill nr 6060 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_newuname nr 6061 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_semget nr 6062 nbargs 3 types: (key_t, int, int) args: (key, nsems, semflg) +syscall sys_semop nr 6063 nbargs 3 types: (int, struct sembuf *, unsigned) args: (semid, tsops, nsops) +syscall sys_n32_semctl nr 6064 nbargs 4 types: (int, int, int, u32) args: (semid, semnum, cmd, arg) +syscall sys_shmdt nr 6065 nbargs 1 types: (char *) args: (shmaddr) +syscall sys_msgget nr 6066 nbargs 2 types: (key_t, int) args: (key, msgflg) +syscall sys_n32_msgsnd nr 6067 nbargs 4 types: (int, u32, unsigned int, int) args: (msqid, msgp, msgsz, msgflg) +syscall sys_n32_msgrcv nr 6068 nbargs 5 types: (int, u32, size_t, int, int) args: (msqid, msgp, msgsz, msgtyp, msgflg) +syscall sys_flock nr 6071 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_fsync nr 6072 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_fdatasync nr 6073 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_truncate nr 6074 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 6075 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_getcwd nr 6077 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_chdir nr 6078 nbargs 1 types: (const char *) args: (filename) +syscall sys_fchdir nr 6079 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_rename nr 6080 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_mkdir nr 6081 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_rmdir nr 6082 nbargs 1 types: (const char *) args: (pathname) +syscall sys_creat nr 6083 nbargs 2 types: (const char *, umode_t) args: (pathname, mode) +syscall sys_link nr 6084 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_unlink nr 6085 nbargs 1 types: (const char *) args: (pathname) +syscall sys_symlink nr 6086 nbargs 2 types: (const char *, const char *) args: (oldname, newname) +syscall sys_readlink nr 6087 nbargs 3 types: (const char *, char *, int) args: (path, buf, bufsiz) +syscall sys_chmod nr 6088 nbargs 2 types: (const char *, umode_t) args: (filename, mode) +syscall sys_fchmod nr 6089 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_chown nr 6090 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_fchown nr 6091 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_lchown nr 6092 nbargs 3 types: (const char *, uid_t, gid_t) args: (filename, user, group) +syscall sys_umask nr 6093 nbargs 1 types: (int) args: (mask) +syscall sys_getuid nr 6100 nbargs 0 types: () args: () +syscall sys_syslog nr 6101 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_getgid nr 6102 nbargs 0 types: () args: () +syscall sys_setuid nr 6103 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setgid nr 6104 nbargs 1 types: (gid_t) args: (gid) +syscall sys_geteuid nr 6105 nbargs 0 types: () args: () +syscall sys_getegid nr 6106 nbargs 0 types: () args: () +syscall sys_setpgid nr 6107 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_getppid nr 6108 nbargs 0 types: () args: () +syscall sys_getpgrp nr 6109 nbargs 0 types: () args: () +syscall sys_setsid nr 6110 nbargs 0 types: () args: () +syscall sys_setreuid nr 6111 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setregid nr 6112 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_getgroups nr 6113 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 6114 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setresuid nr 6115 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 6116 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruidp, euidp, suidp) +syscall sys_setresgid nr 6117 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 6118 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgidp, egidp, sgidp) +syscall sys_getpgid nr 6119 nbargs 1 types: (pid_t) args: (pid) +syscall sys_setfsuid nr 6120 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 6121 nbargs 1 types: (gid_t) args: (gid) +syscall sys_getsid nr 6122 nbargs 1 types: (pid_t) args: (pid) +syscall sys_capget nr 6123 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 6124 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_32_rt_sigpending nr 6125 nbargs 2 types: (compat_sigset_t *, unsigned int) args: (uset, sigsetsize) +syscall sys_32_rt_sigqueueinfo nr 6127 nbargs 3 types: (int, int, compat_siginfo_t *) args: (pid, sig, uinfo) +syscall sys_mknod nr 6131 nbargs 3 types: (const char *, umode_t, unsigned) args: (filename, mode, dev) +syscall sys_32_personality nr 6132 nbargs 1 types: (unsigned long) args: (personality) +syscall sys_sysfs nr 6136 nbargs 3 types: (int, unsigned long, unsigned long) args: (option, arg1, arg2) +syscall sys_getpriority nr 6137 nbargs 2 types: (int, int) args: (which, who) +syscall sys_setpriority nr 6138 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_sched_setparam nr 6139 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_getparam nr 6140 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 6141 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 6142 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_get_priority_max nr 6143 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 6144 nbargs 1 types: (int) args: (policy) +syscall sys_32_sched_rr_get_interval nr 6145 nbargs 2 types: (compat_pid_t, struct compat_timespec *) args: (pid, interval) +syscall sys_mlock nr 6146 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 6147 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 6148 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 6149 nbargs 0 types: () args: () +syscall sys_vhangup nr 6150 nbargs 0 types: () args: () +syscall sys_pivot_root nr 6151 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_prctl nr 6153 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_chroot nr 6156 nbargs 1 types: (const char *) args: (filename) +syscall sys_sync nr 6157 nbargs 0 types: () args: () +syscall sys_umount nr 6161 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_swapon nr 6162 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_swapoff nr 6163 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_reboot nr 6164 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_sethostname nr 6165 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setdomainname nr 6166 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_init_module nr 6168 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 6169 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_quotactl nr 6172 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_gettid nr 6178 nbargs 0 types: () args: () +syscall sys_setxattr nr 6180 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 6181 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 6182 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 6183 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 6184 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 6185 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 6186 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 6187 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 6188 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 6189 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 6190 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 6191 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_tkill nr 6192 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_32_futex nr 6194 nbargs 6 types: (u32 *, int, u32, struct compat_timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_cacheflush nr 6197 nbargs 3 types: (unsigned long, unsigned long, unsigned int) args: (addr, bytes, cache) +syscall sys_cachectl nr 6198 nbargs 3 types: (char *, int, int) args: (addr, nbytes, op) +syscall sys_io_destroy nr 6201 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_cancel nr 6204 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_exit_group nr 6205 nbargs 1 types: (int) args: (error_code) +syscall sys_epoll_create nr 6207 nbargs 1 types: (int) args: (size) +syscall sys_epoll_ctl nr 6208 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_wait nr 6209 nbargs 4 types: (int, struct epoll_event *, int, int) args: (epfd, events, maxevents, timeout) +syscall sys_remap_file_pages nr 6210 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_set_tid_address nr 6213 nbargs 1 types: (int *) args: (tidptr) +syscall sys_restart_syscall nr 6214 nbargs 0 types: () args: () +syscall sys_sendfile64 nr 6219 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_timer_getoverrun nr 6223 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_delete nr 6224 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_tgkill nr 6229 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_set_thread_area nr 6246 nbargs 1 types: (unsigned long) args: (addr) +syscall sys_inotify_init nr 6247 nbargs 0 types: () args: () +syscall sys_inotify_add_watch nr 6248 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 6249 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_openat nr 6251 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_mkdirat nr 6252 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_mknodat nr 6253 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_fchownat nr 6254 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_newfstatat nr 6256 nbargs 4 types: (int, const char *, struct stat *, int) args: (dfd, filename, statbuf, flag) +syscall sys_unlinkat nr 6257 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_renameat nr 6258 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_linkat nr 6259 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_symlinkat nr 6260 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_readlinkat nr 6261 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_fchmodat nr 6262 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_faccessat nr 6263 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_unshare nr 6266 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_splice nr 6267 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 6269 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_getcpu nr 6275 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_ioprio_set nr 6277 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 6278 nbargs 2 types: (int, int) args: (which, who) +syscall sys_eventfd nr 6282 nbargs 1 types: (unsigned int) args: (count) +syscall sys_timerfd_create nr 6284 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_signalfd4 nr 6287 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_eventfd2 nr 6288 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 6289 nbargs 1 types: (int) args: (flags) +syscall sys_dup3 nr 6290 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_pipe2 nr 6291 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_inotify_init1 nr 6292 nbargs 1 types: (int) args: (flags) +syscall sys_preadv nr 6293 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 6294 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_accept4 nr 6297 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_getdents64 nr 6299 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_prlimit64 nr 6302 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_syncfs nr 6306 nbargs 1 types: (int) args: (fd) +syscall sys_setns nr 6308 nbargs 2 types: (int, int) args: (fd, nstype) diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/4.4.0/arm-64-syscalls-4.4.0 b/ltt/lttng-2.11.0/instrumentation/syscalls/4.4.0/arm-64-syscalls-4.4.0 new file mode 100644 index 000000000000..99360cee00a0 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/4.4.0/arm-64-syscalls-4.4.0 @@ -0,0 +1,256 @@ +syscall sys_io_setup nr 0 nbargs 2 types: (unsigned, aio_context_t *) args: (nr_events, ctxp) +syscall sys_io_destroy nr 1 nbargs 1 types: (aio_context_t) args: (ctx) +syscall sys_io_submit nr 2 nbargs 3 types: (aio_context_t, long, struct iocb * *) args: (ctx_id, nr, iocbpp) +syscall sys_io_cancel nr 3 nbargs 3 types: (aio_context_t, struct iocb *, struct io_event *) args: (ctx_id, iocb, result) +syscall sys_io_getevents nr 4 nbargs 5 types: (aio_context_t, long, long, struct io_event *, struct timespec *) args: (ctx_id, min_nr, nr, events, timeout) +syscall sys_setxattr nr 5 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_lsetxattr nr 6 nbargs 5 types: (const char *, const char *, const void *, size_t, int) args: (pathname, name, value, size, flags) +syscall sys_fsetxattr nr 7 nbargs 5 types: (int, const char *, const void *, size_t, int) args: (fd, name, value, size, flags) +syscall sys_getxattr nr 8 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_lgetxattr nr 9 nbargs 4 types: (const char *, const char *, void *, size_t) args: (pathname, name, value, size) +syscall sys_fgetxattr nr 10 nbargs 4 types: (int, const char *, void *, size_t) args: (fd, name, value, size) +syscall sys_listxattr nr 11 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_llistxattr nr 12 nbargs 3 types: (const char *, char *, size_t) args: (pathname, list, size) +syscall sys_flistxattr nr 13 nbargs 3 types: (int, char *, size_t) args: (fd, list, size) +syscall sys_removexattr nr 14 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_lremovexattr nr 15 nbargs 2 types: (const char *, const char *) args: (pathname, name) +syscall sys_fremovexattr nr 16 nbargs 2 types: (int, const char *) args: (fd, name) +syscall sys_getcwd nr 17 nbargs 2 types: (char *, unsigned long) args: (buf, size) +syscall sys_lookup_dcookie nr 18 nbargs 3 types: (u64, char *, size_t) args: (cookie64, buf, len) +syscall sys_eventfd2 nr 19 nbargs 2 types: (unsigned int, int) args: (count, flags) +syscall sys_epoll_create1 nr 20 nbargs 1 types: (int) args: (flags) +syscall sys_epoll_ctl nr 21 nbargs 4 types: (int, int, int, struct epoll_event *) args: (epfd, op, fd, event) +syscall sys_epoll_pwait nr 22 nbargs 6 types: (int, struct epoll_event *, int, int, const sigset_t *, size_t) args: (epfd, events, maxevents, timeout, sigmask, sigsetsize) +syscall sys_dup nr 23 nbargs 1 types: (unsigned int) args: (fildes) +syscall sys_dup3 nr 24 nbargs 3 types: (unsigned int, unsigned int, int) args: (oldfd, newfd, flags) +syscall sys_fcntl nr 25 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_inotify_init1 nr 26 nbargs 1 types: (int) args: (flags) +syscall sys_inotify_add_watch nr 27 nbargs 3 types: (int, const char *, u32) args: (fd, pathname, mask) +syscall sys_inotify_rm_watch nr 28 nbargs 2 types: (int, __s32) args: (fd, wd) +syscall sys_ioctl nr 29 nbargs 3 types: (unsigned int, unsigned int, unsigned long) args: (fd, cmd, arg) +syscall sys_ioprio_set nr 30 nbargs 3 types: (int, int, int) args: (which, who, ioprio) +syscall sys_ioprio_get nr 31 nbargs 2 types: (int, int) args: (which, who) +syscall sys_flock nr 32 nbargs 2 types: (unsigned int, unsigned int) args: (fd, cmd) +syscall sys_mknodat nr 33 nbargs 4 types: (int, const char *, umode_t, unsigned) args: (dfd, filename, mode, dev) +syscall sys_mkdirat nr 34 nbargs 3 types: (int, const char *, umode_t) args: (dfd, pathname, mode) +syscall sys_unlinkat nr 35 nbargs 3 types: (int, const char *, int) args: (dfd, pathname, flag) +syscall sys_symlinkat nr 36 nbargs 3 types: (const char *, int, const char *) args: (oldname, newdfd, newname) +syscall sys_linkat nr 37 nbargs 5 types: (int, const char *, int, const char *, int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_renameat nr 38 nbargs 4 types: (int, const char *, int, const char *) args: (olddfd, oldname, newdfd, newname) +syscall sys_umount nr 39 nbargs 2 types: (char *, int) args: (name, flags) +syscall sys_mount nr 40 nbargs 5 types: (char *, char *, char *, unsigned long, void *) args: (dev_name, dir_name, type, flags, data) +syscall sys_pivot_root nr 41 nbargs 2 types: (const char *, const char *) args: (new_root, put_old) +syscall sys_statfs nr 43 nbargs 2 types: (const char *, struct statfs *) args: (pathname, buf) +syscall sys_fstatfs nr 44 nbargs 2 types: (unsigned int, struct statfs *) args: (fd, buf) +syscall sys_truncate nr 45 nbargs 2 types: (const char *, long) args: (path, length) +syscall sys_ftruncate nr 46 nbargs 2 types: (unsigned int, unsigned long) args: (fd, length) +syscall sys_fallocate nr 47 nbargs 4 types: (int, int, loff_t, loff_t) args: (fd, mode, offset, len) +syscall sys_faccessat nr 48 nbargs 3 types: (int, const char *, int) args: (dfd, filename, mode) +syscall sys_chdir nr 49 nbargs 1 types: (const char *) args: (filename) +syscall sys_fchdir nr 50 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_chroot nr 51 nbargs 1 types: (const char *) args: (filename) +syscall sys_fchmod nr 52 nbargs 2 types: (unsigned int, umode_t) args: (fd, mode) +syscall sys_fchmodat nr 53 nbargs 3 types: (int, const char *, umode_t) args: (dfd, filename, mode) +syscall sys_fchownat nr 54 nbargs 5 types: (int, const char *, uid_t, gid_t, int) args: (dfd, filename, user, group, flag) +syscall sys_fchown nr 55 nbargs 3 types: (unsigned int, uid_t, gid_t) args: (fd, user, group) +syscall sys_openat nr 56 nbargs 4 types: (int, const char *, int, umode_t) args: (dfd, filename, flags, mode) +syscall sys_close nr 57 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_vhangup nr 58 nbargs 0 types: () args: () +syscall sys_pipe2 nr 59 nbargs 2 types: (int *, int) args: (fildes, flags) +syscall sys_quotactl nr 60 nbargs 4 types: (unsigned int, const char *, qid_t, void *) args: (cmd, special, id, addr) +syscall sys_getdents64 nr 61 nbargs 3 types: (unsigned int, struct linux_dirent64 *, unsigned int) args: (fd, dirent, count) +syscall sys_lseek nr 62 nbargs 3 types: (unsigned int, off_t, unsigned int) args: (fd, offset, whence) +syscall sys_read nr 63 nbargs 3 types: (unsigned int, char *, size_t) args: (fd, buf, count) +syscall sys_write nr 64 nbargs 3 types: (unsigned int, const char *, size_t) args: (fd, buf, count) +syscall sys_readv nr 65 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_writev nr 66 nbargs 3 types: (unsigned long, const struct iovec *, unsigned long) args: (fd, vec, vlen) +syscall sys_pread64 nr 67 nbargs 4 types: (unsigned int, char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_pwrite64 nr 68 nbargs 4 types: (unsigned int, const char *, size_t, loff_t) args: (fd, buf, count, pos) +syscall sys_preadv nr 69 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_pwritev nr 70 nbargs 5 types: (unsigned long, const struct iovec *, unsigned long, unsigned long, unsigned long) args: (fd, vec, vlen, pos_l, pos_h) +syscall sys_sendfile64 nr 71 nbargs 4 types: (int, int, loff_t *, size_t) args: (out_fd, in_fd, offset, count) +syscall sys_pselect6 nr 72 nbargs 6 types: (int, fd_set *, fd_set *, fd_set *, struct timespec *, void *) args: (n, inp, outp, exp, tsp, sig) +syscall sys_ppoll nr 73 nbargs 5 types: (struct pollfd *, unsigned int, struct timespec *, const sigset_t *, size_t) args: (ufds, nfds, tsp, sigmask, sigsetsize) +syscall sys_signalfd4 nr 74 nbargs 4 types: (int, sigset_t *, size_t, int) args: (ufd, user_mask, sizemask, flags) +syscall sys_vmsplice nr 75 nbargs 4 types: (int, const struct iovec *, unsigned long, unsigned int) args: (fd, iov, nr_segs, flags) +syscall sys_splice nr 76 nbargs 6 types: (int, loff_t *, int, loff_t *, size_t, unsigned int) args: (fd_in, off_in, fd_out, off_out, len, flags) +syscall sys_tee nr 77 nbargs 4 types: (int, int, size_t, unsigned int) args: (fdin, fdout, len, flags) +syscall sys_readlinkat nr 78 nbargs 4 types: (int, const char *, char *, int) args: (dfd, pathname, buf, bufsiz) +syscall sys_newfstatat nr 79 nbargs 4 types: (int, const char *, struct stat *, int) args: (dfd, filename, statbuf, flag) +syscall sys_newfstat nr 80 nbargs 2 types: (unsigned int, struct stat *) args: (fd, statbuf) +syscall sys_sync nr 81 nbargs 0 types: () args: () +syscall sys_fsync nr 82 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_fdatasync nr 83 nbargs 1 types: (unsigned int) args: (fd) +syscall sys_sync_file_range nr 84 nbargs 4 types: (int, loff_t, loff_t, unsigned int) args: (fd, offset, nbytes, flags) +syscall sys_timerfd_create nr 85 nbargs 2 types: (int, int) args: (clockid, flags) +syscall sys_timerfd_settime nr 86 nbargs 4 types: (int, int, const struct itimerspec *, struct itimerspec *) args: (ufd, flags, utmr, otmr) +syscall sys_timerfd_gettime nr 87 nbargs 2 types: (int, struct itimerspec *) args: (ufd, otmr) +syscall sys_utimensat nr 88 nbargs 4 types: (int, const char *, struct timespec *, int) args: (dfd, filename, utimes, flags) +syscall sys_acct nr 89 nbargs 1 types: (const char *) args: (name) +syscall sys_capget nr 90 nbargs 2 types: (cap_user_header_t, cap_user_data_t) args: (header, dataptr) +syscall sys_capset nr 91 nbargs 2 types: (cap_user_header_t, const cap_user_data_t) args: (header, data) +syscall sys_personality nr 92 nbargs 1 types: (unsigned int) args: (personality) +syscall sys_exit nr 93 nbargs 1 types: (int) args: (error_code) +syscall sys_exit_group nr 94 nbargs 1 types: (int) args: (error_code) +syscall sys_waitid nr 95 nbargs 5 types: (int, pid_t, struct siginfo *, int, struct rusage *) args: (which, upid, infop, options, ru) +syscall sys_set_tid_address nr 96 nbargs 1 types: (int *) args: (tidptr) +syscall sys_unshare nr 97 nbargs 1 types: (unsigned long) args: (unshare_flags) +syscall sys_futex nr 98 nbargs 6 types: (u32 *, int, u32, struct timespec *, u32 *, u32) args: (uaddr, op, val, utime, uaddr2, val3) +syscall sys_set_robust_list nr 99 nbargs 2 types: (struct robust_list_head *, size_t) args: (head, len) +syscall sys_get_robust_list nr 100 nbargs 3 types: (int, struct robust_list_head * *, size_t *) args: (pid, head_ptr, len_ptr) +syscall sys_nanosleep nr 101 nbargs 2 types: (struct timespec *, struct timespec *) args: (rqtp, rmtp) +syscall sys_getitimer nr 102 nbargs 2 types: (int, struct itimerval *) args: (which, value) +syscall sys_setitimer nr 103 nbargs 3 types: (int, struct itimerval *, struct itimerval *) args: (which, value, ovalue) +syscall sys_init_module nr 105 nbargs 3 types: (void *, unsigned long, const char *) args: (umod, len, uargs) +syscall sys_delete_module nr 106 nbargs 2 types: (const char *, unsigned int) args: (name_user, flags) +syscall sys_timer_create nr 107 nbargs 3 types: (const clockid_t, struct sigevent *, timer_t *) args: (which_clock, timer_event_spec, created_timer_id) +syscall sys_timer_gettime nr 108 nbargs 2 types: (timer_t, struct itimerspec *) args: (timer_id, setting) +syscall sys_timer_getoverrun nr 109 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_timer_settime nr 110 nbargs 4 types: (timer_t, int, const struct itimerspec *, struct itimerspec *) args: (timer_id, flags, new_setting, old_setting) +syscall sys_timer_delete nr 111 nbargs 1 types: (timer_t) args: (timer_id) +syscall sys_clock_settime nr 112 nbargs 2 types: (const clockid_t, const struct timespec *) args: (which_clock, tp) +syscall sys_clock_gettime nr 113 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_getres nr 114 nbargs 2 types: (const clockid_t, struct timespec *) args: (which_clock, tp) +syscall sys_clock_nanosleep nr 115 nbargs 4 types: (const clockid_t, int, const struct timespec *, struct timespec *) args: (which_clock, flags, rqtp, rmtp) +syscall sys_syslog nr 116 nbargs 3 types: (int, char *, int) args: (type, buf, len) +syscall sys_ptrace nr 117 nbargs 4 types: (long, long, unsigned long, unsigned long) args: (request, pid, addr, data) +syscall sys_sched_setparam nr 118 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setscheduler nr 119 nbargs 3 types: (pid_t, int, struct sched_param *) args: (pid, policy, param) +syscall sys_sched_getscheduler nr 120 nbargs 1 types: (pid_t) args: (pid) +syscall sys_sched_getparam nr 121 nbargs 2 types: (pid_t, struct sched_param *) args: (pid, param) +syscall sys_sched_setaffinity nr 122 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_getaffinity nr 123 nbargs 3 types: (pid_t, unsigned int, unsigned long *) args: (pid, len, user_mask_ptr) +syscall sys_sched_yield nr 124 nbargs 0 types: () args: () +syscall sys_sched_get_priority_max nr 125 nbargs 1 types: (int) args: (policy) +syscall sys_sched_get_priority_min nr 126 nbargs 1 types: (int) args: (policy) +syscall sys_sched_rr_get_interval nr 127 nbargs 2 types: (pid_t, struct timespec *) args: (pid, interval) +syscall sys_restart_syscall nr 128 nbargs 0 types: () args: () +syscall sys_kill nr 129 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_tkill nr 130 nbargs 2 types: (pid_t, int) args: (pid, sig) +syscall sys_tgkill nr 131 nbargs 3 types: (pid_t, pid_t, int) args: (tgid, pid, sig) +syscall sys_sigaltstack nr 132 nbargs 2 types: (const stack_t *, stack_t *) args: (uss, uoss) +syscall sys_rt_sigsuspend nr 133 nbargs 2 types: (sigset_t *, size_t) args: (unewset, sigsetsize) +syscall sys_rt_sigaction nr 134 nbargs 4 types: (int, const struct sigaction *, struct sigaction *, size_t) args: (sig, act, oact, sigsetsize) +syscall sys_rt_sigprocmask nr 135 nbargs 4 types: (int, sigset_t *, sigset_t *, size_t) args: (how, nset, oset, sigsetsize) +syscall sys_rt_sigpending nr 136 nbargs 2 types: (sigset_t *, size_t) args: (uset, sigsetsize) +syscall sys_rt_sigtimedwait nr 137 nbargs 4 types: (const sigset_t *, siginfo_t *, const struct timespec *, size_t) args: (uthese, uinfo, uts, sigsetsize) +syscall sys_rt_sigqueueinfo nr 138 nbargs 3 types: (pid_t, int, siginfo_t *) args: (pid, sig, uinfo) +syscall sys_setpriority nr 140 nbargs 3 types: (int, int, int) args: (which, who, niceval) +syscall sys_getpriority nr 141 nbargs 2 types: (int, int) args: (which, who) +syscall sys_reboot nr 142 nbargs 4 types: (int, int, unsigned int, void *) args: (magic1, magic2, cmd, arg) +syscall sys_setregid nr 143 nbargs 2 types: (gid_t, gid_t) args: (rgid, egid) +syscall sys_setgid nr 144 nbargs 1 types: (gid_t) args: (gid) +syscall sys_setreuid nr 145 nbargs 2 types: (uid_t, uid_t) args: (ruid, euid) +syscall sys_setuid nr 146 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setresuid nr 147 nbargs 3 types: (uid_t, uid_t, uid_t) args: (ruid, euid, suid) +syscall sys_getresuid nr 148 nbargs 3 types: (uid_t *, uid_t *, uid_t *) args: (ruidp, euidp, suidp) +syscall sys_setresgid nr 149 nbargs 3 types: (gid_t, gid_t, gid_t) args: (rgid, egid, sgid) +syscall sys_getresgid nr 150 nbargs 3 types: (gid_t *, gid_t *, gid_t *) args: (rgidp, egidp, sgidp) +syscall sys_setfsuid nr 151 nbargs 1 types: (uid_t) args: (uid) +syscall sys_setfsgid nr 152 nbargs 1 types: (gid_t) args: (gid) +syscall sys_times nr 153 nbargs 1 types: (struct tms *) args: (tbuf) +syscall sys_setpgid nr 154 nbargs 2 types: (pid_t, pid_t) args: (pid, pgid) +syscall sys_getpgid nr 155 nbargs 1 types: (pid_t) args: (pid) +syscall sys_getsid nr 156 nbargs 1 types: (pid_t) args: (pid) +syscall sys_setsid nr 157 nbargs 0 types: () args: () +syscall sys_getgroups nr 158 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_setgroups nr 159 nbargs 2 types: (int, gid_t *) args: (gidsetsize, grouplist) +syscall sys_newuname nr 160 nbargs 1 types: (struct new_utsname *) args: (name) +syscall sys_sethostname nr 161 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_setdomainname nr 162 nbargs 2 types: (char *, int) args: (name, len) +syscall sys_getrlimit nr 163 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_setrlimit nr 164 nbargs 2 types: (unsigned int, struct rlimit *) args: (resource, rlim) +syscall sys_getrusage nr 165 nbargs 2 types: (int, struct rusage *) args: (who, ru) +syscall sys_umask nr 166 nbargs 1 types: (int) args: (mask) +syscall sys_prctl nr 167 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_getcpu nr 168 nbargs 3 types: (unsigned *, unsigned *, struct getcpu_cache *) args: (cpup, nodep, unused) +syscall sys_gettimeofday nr 169 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_settimeofday nr 170 nbargs 2 types: (struct timeval *, struct timezone *) args: (tv, tz) +syscall sys_adjtimex nr 171 nbargs 1 types: (struct timex *) args: (txc_p) +syscall sys_getpid nr 172 nbargs 0 types: () args: () +syscall sys_getppid nr 173 nbargs 0 types: () args: () +syscall sys_getuid nr 174 nbargs 0 types: () args: () +syscall sys_geteuid nr 175 nbargs 0 types: () args: () +syscall sys_getgid nr 176 nbargs 0 types: () args: () +syscall sys_getegid nr 177 nbargs 0 types: () args: () +syscall sys_gettid nr 178 nbargs 0 types: () args: () +syscall sys_sysinfo nr 179 nbargs 1 types: (struct sysinfo *) args: (info) +syscall sys_mq_open nr 180 nbargs 4 types: (const char *, int, umode_t, struct mq_attr *) args: (u_name, oflag, mode, u_attr) +syscall sys_mq_unlink nr 181 nbargs 1 types: (const char *) args: (u_name) +syscall sys_mq_timedsend nr 182 nbargs 5 types: (mqd_t, const char *, size_t, unsigned int, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout) +syscall sys_mq_timedreceive nr 183 nbargs 5 types: (mqd_t, char *, size_t, unsigned int *, const struct timespec *) args: (mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout) +syscall sys_mq_notify nr 184 nbargs 2 types: (mqd_t, const struct sigevent *) args: (mqdes, u_notification) +syscall sys_mq_getsetattr nr 185 nbargs 3 types: (mqd_t, const struct mq_attr *, struct mq_attr *) args: (mqdes, u_mqstat, u_omqstat) +syscall sys_msgget nr 186 nbargs 2 types: (key_t, int) args: (key, msgflg) +syscall sys_msgctl nr 187 nbargs 3 types: (int, int, struct msqid_ds *) args: (msqid, cmd, buf) +syscall sys_msgrcv nr 188 nbargs 5 types: (int, struct msgbuf *, size_t, long, int) args: (msqid, msgp, msgsz, msgtyp, msgflg) +syscall sys_msgsnd nr 189 nbargs 4 types: (int, struct msgbuf *, size_t, int) args: (msqid, msgp, msgsz, msgflg) +syscall sys_semget nr 190 nbargs 3 types: (key_t, int, int) args: (key, nsems, semflg) +syscall sys_semctl nr 191 nbargs 4 types: (int, int, int, unsigned long) args: (semid, semnum, cmd, arg) +syscall sys_semtimedop nr 192 nbargs 4 types: (int, struct sembuf *, unsigned, const struct timespec *) args: (semid, tsops, nsops, timeout) +syscall sys_semop nr 193 nbargs 3 types: (int, struct sembuf *, unsigned) args: (semid, tsops, nsops) +syscall sys_shmget nr 194 nbargs 3 types: (key_t, size_t, int) args: (key, size, shmflg) +syscall sys_shmctl nr 195 nbargs 3 types: (int, int, struct shmid_ds *) args: (shmid, cmd, buf) +syscall sys_shmat nr 196 nbargs 3 types: (int, char *, int) args: (shmid, shmaddr, shmflg) +syscall sys_shmdt nr 197 nbargs 1 types: (char *) args: (shmaddr) +syscall sys_socket nr 198 nbargs 3 types: (int, int, int) args: (family, type, protocol) +syscall sys_socketpair nr 199 nbargs 4 types: (int, int, int, int *) args: (family, type, protocol, usockvec) +syscall sys_bind nr 200 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, umyaddr, addrlen) +syscall sys_listen nr 201 nbargs 2 types: (int, int) args: (fd, backlog) +syscall sys_accept nr 202 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, upeer_sockaddr, upeer_addrlen) +syscall sys_connect nr 203 nbargs 3 types: (int, struct sockaddr *, int) args: (fd, uservaddr, addrlen) +syscall sys_getsockname nr 204 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_getpeername nr 205 nbargs 3 types: (int, struct sockaddr *, int *) args: (fd, usockaddr, usockaddr_len) +syscall sys_sendto nr 206 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int) args: (fd, buff, len, flags, addr, addr_len) +syscall sys_recvfrom nr 207 nbargs 6 types: (int, void *, size_t, unsigned int, struct sockaddr *, int *) args: (fd, ubuf, size, flags, addr, addr_len) +syscall sys_setsockopt nr 208 nbargs 5 types: (int, int, int, char *, int) args: (fd, level, optname, optval, optlen) +syscall sys_getsockopt nr 209 nbargs 5 types: (int, int, int, char *, int *) args: (fd, level, optname, optval, optlen) +syscall sys_shutdown nr 210 nbargs 2 types: (int, int) args: (fd, how) +syscall sys_sendmsg nr 211 nbargs 3 types: (int, struct user_msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_recvmsg nr 212 nbargs 3 types: (int, struct user_msghdr *, unsigned int) args: (fd, msg, flags) +syscall sys_readahead nr 213 nbargs 3 types: (int, loff_t, size_t) args: (fd, offset, count) +syscall sys_brk nr 214 nbargs 1 types: (unsigned long) args: (brk) +syscall sys_munmap nr 215 nbargs 2 types: (unsigned long, size_t) args: (addr, len) +syscall sys_mremap nr 216 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (addr, old_len, new_len, flags, new_addr) +syscall sys_add_key nr 217 nbargs 5 types: (const char *, const char *, const void *, size_t, key_serial_t) args: (_type, _description, _payload, plen, ringid) +syscall sys_request_key nr 218 nbargs 4 types: (const char *, const char *, const char *, key_serial_t) args: (_type, _description, _callout_info, destringid) +syscall sys_keyctl nr 219 nbargs 5 types: (int, unsigned long, unsigned long, unsigned long, unsigned long) args: (option, arg2, arg3, arg4, arg5) +syscall sys_execve nr 221 nbargs 3 types: (const char *, const char *const *, const char *const *) args: (filename, argv, envp) +syscall sys_fadvise64_64 nr 223 nbargs 4 types: (int, loff_t, loff_t, int) args: (fd, offset, len, advice) +syscall sys_swapon nr 224 nbargs 2 types: (const char *, int) args: (specialfile, swap_flags) +syscall sys_swapoff nr 225 nbargs 1 types: (const char *) args: (specialfile) +syscall sys_mprotect nr 226 nbargs 3 types: (unsigned long, size_t, unsigned long) args: (start, len, prot) +syscall sys_msync nr 227 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) +syscall sys_mlock nr 228 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_munlock nr 229 nbargs 2 types: (unsigned long, size_t) args: (start, len) +syscall sys_mlockall nr 230 nbargs 1 types: (int) args: (flags) +syscall sys_munlockall nr 231 nbargs 0 types: () args: () +syscall sys_mincore nr 232 nbargs 3 types: (unsigned long, size_t, unsigned char *) args: (start, len, vec) +syscall sys_madvise nr 233 nbargs 3 types: (unsigned long, size_t, int) args: (start, len_in, behavior) +syscall sys_remap_file_pages nr 234 nbargs 5 types: (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) args: (start, size, prot, pgoff, flags) +syscall sys_rt_tgsigqueueinfo nr 240 nbargs 4 types: (pid_t, pid_t, int, siginfo_t *) args: (tgid, pid, sig, uinfo) +syscall sys_perf_event_open nr 241 nbargs 5 types: (struct perf_event_attr *, pid_t, int, int, unsigned long) args: (attr_uptr, pid, cpu, group_fd, flags) +syscall sys_accept4 nr 242 nbargs 4 types: (int, struct sockaddr *, int *, int) args: (fd, upeer_sockaddr, upeer_addrlen, flags) +syscall sys_recvmmsg nr 243 nbargs 5 types: (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *) args: (fd, mmsg, vlen, flags, timeout) +syscall sys_wait4 nr 260 nbargs 4 types: (pid_t, int *, int, struct rusage *) args: (upid, stat_addr, options, ru) +syscall sys_prlimit64 nr 261 nbargs 4 types: (pid_t, unsigned int, const struct rlimit64 *, struct rlimit64 *) args: (pid, resource, new_rlim, old_rlim) +syscall sys_fanotify_init nr 262 nbargs 2 types: (unsigned int, unsigned int) args: (flags, event_f_flags) +syscall sys_fanotify_mark nr 263 nbargs 5 types: (int, unsigned int, __u64, int, const char *) args: (fanotify_fd, flags, mask, dfd, pathname) +syscall sys_name_to_handle_at nr 264 nbargs 5 types: (int, const char *, struct file_handle *, int *, int) args: (dfd, name, handle, mnt_id, flag) +syscall sys_open_by_handle_at nr 265 nbargs 3 types: (int, struct file_handle *, int) args: (mountdirfd, handle, flags) +syscall sys_clock_adjtime nr 266 nbargs 2 types: (const clockid_t, struct timex *) args: (which_clock, utx) +syscall sys_syncfs nr 267 nbargs 1 types: (int) args: (fd) +syscall sys_setns nr 268 nbargs 2 types: (int, int) args: (fd, nstype) +syscall sys_sendmmsg nr 269 nbargs 4 types: (int, struct mmsghdr *, unsigned int, unsigned int) args: (fd, mmsg, vlen, flags) +syscall sys_process_vm_readv nr 270 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_process_vm_writev nr 271 nbargs 6 types: (pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long) args: (pid, lvec, liovcnt, rvec, riovcnt, flags) +syscall sys_finit_module nr 273 nbargs 3 types: (int, const char *, int) args: (fd, uargs, flags) +syscall sys_sched_setattr nr 274 nbargs 3 types: (pid_t, struct sched_attr *, unsigned int) args: (pid, uattr, flags) +syscall sys_sched_getattr nr 275 nbargs 4 types: (pid_t, struct sched_attr *, unsigned int, unsigned int) args: (pid, uattr, size, flags) +syscall sys_renameat2 nr 276 nbargs 5 types: (int, const char *, int, const char *, unsigned int) args: (olddfd, oldname, newdfd, newname, flags) +syscall sys_seccomp nr 277 nbargs 3 types: (unsigned int, unsigned int, const char *) args: (op, flags, uargs) +syscall sys_getrandom nr 278 nbargs 3 types: (char *, size_t, unsigned int) args: (buf, count, flags) +syscall sys_memfd_create nr 279 nbargs 2 types: (const char *, unsigned int) args: (uname, flags) +syscall sys_execveat nr 281 nbargs 5 types: (int, const char *, const char *const *, const char *const *, int) args: (fd, filename, argv, envp, flags) +syscall sys_membarrier nr 283 nbargs 2 types: (int, int) args: (cmd, flags) +syscall sys_mlock2 nr 284 nbargs 3 types: (unsigned long, size_t, int) args: (start, len, flags) \ No newline at end of file diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/README b/ltt/lttng-2.11.0/instrumentation/syscalls/README new file mode 100644 index 000000000000..a2a66fa038ae --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/README @@ -0,0 +1,34 @@ +LTTng system call tracing + +1) lttng-syscall-extractor + +You need to build a kernel with CONFIG_FTRACE_SYSCALLS=y and +CONFIG_KALLSYMS_ALL=y for extraction. Apply the linker patch to get your +kernel to keep the system call metadata after boot. Then build and load +the LTTng syscall extractor module. The module will fail to load (this +is expected). See the dmesg output for system call metadata. + +2) Generate system call TRACE_EVENT(). + +Take the dmesg metadata and feed it to lttng-syscalls-generate-headers.sh +(do not include the ending SUCCESS line), e.g., from the +instrumentation/syscalls directory. See the script header for usage example. +It should be run for both the integers and pointers types. + +After these are created, we just need to follow the new system call additions, +no need to regenerate the whole thing, since system calls are only appended to. + +3) Override headers + +You need to provide override headers (even if they don't contain +overrides) for each architecture. Those are meant to contain manual +overrides for specific system calls for cases where the script do not +generate the correct typing for specific system calls. + +4) Integrating the new architecture, updating architecture header + +Edit instrumentation/syscalls/headers/syscalls_integers.h and +syscalls_pointers.h. Add the new architecture +(e.g. CONFIG_X86_64) to the newly-generated headers +(e.g. changing the current x86-64-syscalls-3.10.0-rc7_.h into +x86-64-syscalls-3.13.7_.h), then rebuild lttng-modules. diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers.h new file mode 100644 index 000000000000..ca71d8690f0c --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers.h @@ -0,0 +1,1213 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "arm-32-syscalls-3.4.25_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_32_getuid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid16) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_32_getgid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid16) +#endif +#ifndef OVERRIDE_32_geteuid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid16) +#endif +#ifndef OVERRIDE_32_getegid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid16) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid16 +SC_LTTNG_TRACEPOINT_EVENT(getuid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid16 +SC_LTTNG_TRACEPOINT_EVENT(getgid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid16 +SC_LTTNG_TRACEPOINT_EVENT(geteuid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid16 +SC_LTTNG_TRACEPOINT_EVENT(getegid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_setuid16 +SC_LTTNG_TRACEPOINT_EVENT(setuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_32_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_32_setgid16 +SC_LTTNG_TRACEPOINT_EVENT(setgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_32_setfsuid16 +SC_LTTNG_TRACEPOINT_EVENT(setfsuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid16 +SC_LTTNG_TRACEPOINT_EVENT(setfsgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_32_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_32_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_32_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_32_setreuid16 +SC_LTTNG_TRACEPOINT_EVENT(setreuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t ruid, old_uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, ruid, ruid)) sc_inout(ctf_integer(old_uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid16 +SC_LTTNG_TRACEPOINT_EVENT(setregid16, + TP_PROTO(sc_exit(long ret,) old_gid_t rgid, old_gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, rgid, rgid)) sc_inout(ctf_integer(old_gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_32_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_32_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_32_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_32_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_32_msgget +SC_LTTNG_TRACEPOINT_EVENT(msgget, + TP_PROTO(sc_exit(long ret,) key_t key, int msgflg), + TP_ARGS(sc_exit(ret,) key, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_32_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_32_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fanotify_init +SC_LTTNG_TRACEPOINT_EVENT(fanotify_init, + TP_PROTO(sc_exit(long ret,) unsigned int flags, unsigned int event_f_flags), + TP_ARGS(sc_exit(ret,) flags, event_f_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(unsigned int, event_f_flags, event_f_flags))) +) +#endif +#ifndef OVERRIDE_32_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_32_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fchown16 +SC_LTTNG_TRACEPOINT_EVENT(fchown16, + TP_PROTO(sc_exit(long ret,) unsigned int fd, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_32_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_32_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_setresuid16 +SC_LTTNG_TRACEPOINT_EVENT(setresuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t ruid, old_uid_t euid, old_uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, ruid, ruid)) sc_inout(ctf_integer(old_uid_t, euid, euid)) sc_inout(ctf_integer(old_uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid16 +SC_LTTNG_TRACEPOINT_EVENT(setresgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t rgid, old_gid_t egid, old_gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, rgid, rgid)) sc_inout(ctf_integer(old_gid_t, egid, egid)) sc_inout(ctf_integer(old_gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_32_fcntl64 +SC_LTTNG_TRACEPOINT_EVENT(fcntl64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_32_semget +SC_LTTNG_TRACEPOINT_EVENT(semget, + TP_PROTO(sc_exit(long ret,) key_t key, int nsems, int semflg), + TP_ARGS(sc_exit(ret,) key, nsems, semflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, nsems, nsems)) sc_in(ctf_integer(int, semflg, semflg))) +) +#endif +#ifndef OVERRIDE_32_shmget +SC_LTTNG_TRACEPOINT_EVENT(shmget, + TP_PROTO(sc_exit(long ret,) key_t key, size_t size, int shmflg), + TP_ARGS(sc_exit(ret,) key, size, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_32_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_32_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_32_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_32_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_keyctl +SC_LTTNG_TRACEPOINT_EVENT(keyctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_inout(ctf_integer(unsigned long, arg3, arg3)) sc_inout(ctf_integer(unsigned long, arg4, arg4)) sc_inout(ctf_integer(unsigned long, arg5, arg5))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "arm-32-syscalls-3.4.25_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid16, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid16, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid16, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid16, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 199, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 200, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 201, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 202, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 224, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 316, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid16 +TRACE_SYSCALL_TABLE(getuid16, getuid16, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(pause, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(sync, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid16 +TRACE_SYSCALL_TABLE(getgid16, getgid16, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid16 +TRACE_SYSCALL_TABLE(geteuid16, geteuid16, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid16 +TRACE_SYSCALL_TABLE(getegid16, getegid16, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 199, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 200, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 201, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 202, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 224, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 316, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_exit +TRACE_SYSCALL_TABLE(exit, exit, 1, 1) +#endif +#ifndef OVERRIDE_TABLE_32_close +TRACE_SYSCALL_TABLE(close, close, 6, 1) +#endif +#ifndef OVERRIDE_TABLE_32_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 19, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid16 +TRACE_SYSCALL_TABLE(setuid16, setuid16, 23, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 26, 4) +#endif +#ifndef OVERRIDE_TABLE_32_nice +TRACE_SYSCALL_TABLE(nice, nice, 34, 1) +#endif +#ifndef OVERRIDE_TABLE_32_kill +TRACE_SYSCALL_TABLE(kill, kill, 37, 2) +#endif +#ifndef OVERRIDE_TABLE_32_dup +TRACE_SYSCALL_TABLE(dup, dup, 41, 1) +#endif +#ifndef OVERRIDE_TABLE_32_brk +TRACE_SYSCALL_TABLE(brk, brk, 45, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid16 +TRACE_SYSCALL_TABLE(setgid16, setgid16, 46, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 54, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 55, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 57, 2) +#endif +#ifndef OVERRIDE_TABLE_32_umask +TRACE_SYSCALL_TABLE(umask, umask, 60, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 63, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid16 +TRACE_SYSCALL_TABLE(setreuid16, setreuid16, 70, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid16 +TRACE_SYSCALL_TABLE(setregid16, setregid16, 71, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 91, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 93, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 94, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown16 +TRACE_SYSCALL_TABLE(fchown16, fchown16, 95, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 96, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 97, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 118, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 125, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 132, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 133, 1) +#endif +#ifndef OVERRIDE_TABLE_32_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 134, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 135, 3) +#endif +#ifndef OVERRIDE_TABLE_32_personality +TRACE_SYSCALL_TABLE(personality, personality, 136, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid16 +TRACE_SYSCALL_TABLE(setfsuid16, setfsuid16, 138, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid16 +TRACE_SYSCALL_TABLE(setfsgid16, setfsgid16, 139, 1) +#endif +#ifndef OVERRIDE_TABLE_32_flock +TRACE_SYSCALL_TABLE(flock, flock, 143, 2) +#endif +#ifndef OVERRIDE_TABLE_32_msync +TRACE_SYSCALL_TABLE(msync, msync, 144, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 147, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 148, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 150, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 151, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 152, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 157, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 159, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 160, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 163, 5) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid16 +TRACE_SYSCALL_TABLE(setresuid16, setresuid16, 164, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid16 +TRACE_SYSCALL_TABLE(setresgid16, setresgid16, 170, 3) +#endif +#ifndef OVERRIDE_TABLE_32_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 172, 5) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 203, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 204, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 207, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 208, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 210, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 213, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 214, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 215, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 216, 1) +#endif +#ifndef OVERRIDE_TABLE_32_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 220, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl64 +TRACE_SYSCALL_TABLE(fcntl64, fcntl64, 221, 3) +#endif +#ifndef OVERRIDE_TABLE_32_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 238, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 244, 1) +#endif +#ifndef OVERRIDE_TABLE_32_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 248, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 250, 1) +#endif +#ifndef OVERRIDE_TABLE_32_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 253, 5) +#endif +#ifndef OVERRIDE_TABLE_32_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 260, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 261, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 268, 3) +#endif +#ifndef OVERRIDE_TABLE_32_socket +TRACE_SYSCALL_TABLE(socket, socket, 281, 3) +#endif +#ifndef OVERRIDE_TABLE_32_listen +TRACE_SYSCALL_TABLE(listen, listen, 284, 2) +#endif +#ifndef OVERRIDE_TABLE_32_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 293, 2) +#endif +#ifndef OVERRIDE_TABLE_32_semget +TRACE_SYSCALL_TABLE(semget, semget, 299, 3) +#endif +#ifndef OVERRIDE_TABLE_32_msgget +TRACE_SYSCALL_TABLE(msgget, msgget, 303, 2) +#endif +#ifndef OVERRIDE_TABLE_32_shmget +TRACE_SYSCALL_TABLE(shmget, shmget, 307, 3) +#endif +#ifndef OVERRIDE_TABLE_32_keyctl +TRACE_SYSCALL_TABLE(keyctl, keyctl, 311, 5) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 314, 3) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 315, 2) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 318, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 337, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tee +TRACE_SYSCALL_TABLE(tee, tee, 342, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 350, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 351, 1) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 356, 2) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 357, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 358, 3) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 360, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fanotify_init +TRACE_SYSCALL_TABLE(fanotify_init, fanotify_init, 367, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 373, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setns +TRACE_SYSCALL_TABLE(setns, setns, 375, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers_override.h new file mode 100644 index 000000000000..e6b52878b67f --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_integers_override.h @@ -0,0 +1,141 @@ +#ifndef CONFIG_UID16 + +#define OVERRIDE_32_getuid16 +#define OVERRIDE_32_getgid16 +#define OVERRIDE_32_geteuid16 +#define OVERRIDE_32_getegid16 +#define OVERRIDE_32_setuid16 +#define OVERRIDE_32_setgid16 +#define OVERRIDE_32_setfsuid16 +#define OVERRIDE_32_setfsgid16 +#define OVERRIDE_32_setreuid16 +#define OVERRIDE_32_setregid16 +#define OVERRIDE_32_fchown16 +#define OVERRIDE_32_setresuid16 +#define OVERRIDE_32_setresgid16 + +#define OVERRIDE_TABLE_32_getuid16 +#define OVERRIDE_TABLE_32_getgid16 +#define OVERRIDE_TABLE_32_geteuid16 +#define OVERRIDE_TABLE_32_getegid16 +#define OVERRIDE_TABLE_32_setuid16 +#define OVERRIDE_TABLE_32_setgid16 +#define OVERRIDE_TABLE_32_setreuid16 +#define OVERRIDE_TABLE_32_setregid16 +#define OVERRIDE_TABLE_32_fchown16 +#define OVERRIDE_TABLE_32_setfsuid16 +#define OVERRIDE_TABLE_32_setfsgid16 +#define OVERRIDE_TABLE_32_setresuid16 +#define OVERRIDE_TABLE_32_setresgid16 + +#endif + +#ifndef CREATE_SYSCALL_TABLE + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + +#define OVERRIDE_32_arm_fadvise64_64 +SC_LTTNG_TRACEPOINT_EVENT(arm_fadvise64_64, + TP_PROTO(sc_exit(long ret,) int fd, int advice, + int32_t offset_low, int32_t offset_high, + int32_t len_low, int32_t len_high), + TP_ARGS(sc_exit(ret,) fd, advice, offset_low, offset_high, + len_low, len_high), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(int, advice, advice)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, len, + ((loff_t) len_high << 32) | len_low)) + ) +) + +#define OVERRIDE_32_sync_file_range2 +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range2, + TP_PROTO(sc_exit(long ret,) int fd, + unsigned int flags, + int32_t offset_low, int32_t offset_high, + int32_t nbytes_low, int32_t nbytes_high), + TP_ARGS(sc_exit(ret,) fd, flags, offset_low, offset_high, + nbytes_low, nbytes_high), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(unsigned int, flags, flags)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, nbytes, + ((loff_t) nbytes_high << 32) | nbytes_low)) + ) +) + +#else /* __BIG_ENDIAN */ + +#define OVERRIDE_32_arm_fadvise64_64 +SC_LTTNG_TRACEPOINT_EVENT(arm_fadvise64_64, + TP_PROTO(sc_exit(long ret,) int fd, int advice, + int32_t offset_high, int32_t offset_low, + int32_t len_high, int32_t len_low), + TP_ARGS(sc_exit(ret,) fd, advice, offset_high, offset_low, + len_high, len_low), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(int, advice, advice)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, len, + ((loff_t) len_high << 32) | len_low)) + ) +) + +#define OVERRIDE_32_sync_file_range2 +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range2, + TP_PROTO(sc_exit(long ret,) int fd, + unsigned int flags, + int32_t offset_high, int32_t offset_low, + int32_t nbytes_high, int32_t nbytes_low), + TP_ARGS(sc_exit(ret,) fd, flags, offset_high, offset_low, + nbytes_high, nbytes_low), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(unsigned int, flags, flags)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, nbytes, + ((loff_t) nbytes_high << 32) | nbytes_low)) + ) +) + +#endif + +#define OVERRIDE_32_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mmap2, + TP_PROTO(sc_exit(unsigned long ret,) + unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret, ret)) + sc_in(ctf_integer_hex(unsigned long, addr, addr)) + sc_in(ctf_integer(size_t, len, len)) + sc_in(ctf_integer(int, prot, prot)) + sc_in(ctf_integer(int, flags, flags)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(off_t, pgoff, pgoff)) + ) +) + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 90, 6) +#define OVERRIDE_TABLE_32_mmap2 +TRACE_SYSCALL_TABLE(mmap2, mmap2, 192, 6) +#define OVERRIDE_TABLE_32_arm_fadvise64_64 +TRACE_SYSCALL_TABLE(arm_fadvise64_64, arm_fadvise64_64, 270, 6) +#define OVERRIDE_TABLE_32_sync_file_range2 +TRACE_SYSCALL_TABLE(sync_file_range2, sync_file_range2, 341, 6) + +#endif /* CREATE_SYSCALL_TABLE */ + + diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers.h new file mode 100644 index 000000000000..76aab1b11c91 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers.h @@ -0,0 +1,1934 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "arm-32-syscalls-3.4.25_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_32_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_32_acct +SC_LTTNG_TRACEPOINT_EVENT(acct, + TP_PROTO(sc_exit(long ret,) const char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_sigpending +SC_LTTNG_TRACEPOINT_EVENT(sigpending, + TP_PROTO(sc_exit(long ret,) old_sigset_t * set), + TP_ARGS(sc_exit(ret,) set), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_sigset_t *, set, set))) +) +#endif +#ifndef OVERRIDE_32_uselib +SC_LTTNG_TRACEPOINT_EVENT(uselib, + TP_PROTO(sc_exit(long ret,) const char * library), + TP_ARGS(sc_exit(ret,) library), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(const char *, library, library))) +) +#endif +#ifndef OVERRIDE_32_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_32_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_32_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_32_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_32_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_32_mq_unlink +SC_LTTNG_TRACEPOINT_EVENT(mq_unlink, + TP_PROTO(sc_exit(long ret,) const char * u_name), + TP_ARGS(sc_exit(ret,) u_name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name))) +) +#endif +#ifndef OVERRIDE_32_shmdt +SC_LTTNG_TRACEPOINT_EVENT(shmdt, + TP_PROTO(sc_exit(long ret,) char * shmaddr), + TP_ARGS(sc_exit(ret,) shmaddr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(char *, shmaddr, shmaddr))) +) +#endif +#ifndef OVERRIDE_32_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_32_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_getgroups16 +SC_LTTNG_TRACEPOINT_EVENT(getgroups16, + TP_PROTO(sc_exit(long ret,) int gidsetsize, old_gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, gidsetsize, gidsetsize)) sc_inout(ctf_integer(old_gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups16 +SC_LTTNG_TRACEPOINT_EVENT(setgroups16, + TP_PROTO(sc_exit(long ret,) int gidsetsize, old_gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, gidsetsize, gidsetsize)) sc_inout(ctf_integer(old_gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_32_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_32_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_32_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_32_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * set, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) set, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, set, set)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_32_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_stat64 +SC_LTTNG_TRACEPOINT_EVENT(stat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_lstat64 +SC_LTTNG_TRACEPOINT_EVENT(lstat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat64 +SC_LTTNG_TRACEPOINT_EVENT(fstat64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_32_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_32_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_32_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_mq_notify +SC_LTTNG_TRACEPOINT_EVENT(mq_notify, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct sigevent * u_notification), + TP_ARGS(sc_exit(ret,) mqdes, u_notification), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct sigevent *, u_notification, u_notification))) +) +#endif +#ifndef OVERRIDE_32_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_32_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_lchown16 +SC_LTTNG_TRACEPOINT_EVENT(lchown16, + TP_PROTO(sc_exit(long ret,) const char * filename, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_32_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, old_sigset_t * nset, old_sigset_t * oset), + TP_ARGS(sc_exit(ret,) how, nset, oset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(old_sigset_t *, nset, nset)) sc_inout(ctf_integer(old_sigset_t *, oset, oset))) +) +#endif +#ifndef OVERRIDE_32_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_getresuid16 +SC_LTTNG_TRACEPOINT_EVENT(getresuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t * ruid, old_uid_t * euid, old_uid_t * suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t *, ruid, ruid)) sc_inout(ctf_integer(old_uid_t *, euid, euid)) sc_inout(ctf_integer(old_uid_t *, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(int, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_32_getresgid16 +SC_LTTNG_TRACEPOINT_EVENT(getresgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t * rgid, old_gid_t * egid, old_gid_t * sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t *, rgid, rgid)) sc_inout(ctf_integer(old_gid_t *, egid, egid)) sc_inout(ctf_integer(old_gid_t *, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_chown16 +SC_LTTNG_TRACEPOINT_EVENT(chown16, + TP_PROTO(sc_exit(long ret,) const char * filename, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruid, uid_t * euid, uid_t * suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruid, ruid)) sc_out(ctf_integer(uid_t *, euid, euid)) sc_out(ctf_integer(uid_t *, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgid, gid_t * egid, gid_t * sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgid, rgid)) sc_out(ctf_integer(gid_t *, egid, egid)) sc_out(ctf_integer(gid_t *, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_32_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_32_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_32_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_32_mq_getsetattr +SC_LTTNG_TRACEPOINT_EVENT(mq_getsetattr, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct mq_attr * u_mqstat, struct mq_attr * u_omqstat), + TP_ARGS(sc_exit(ret,) mqdes, u_mqstat, u_omqstat), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct mq_attr *, u_mqstat, u_mqstat)) sc_out(ctf_integer(struct mq_attr *, u_omqstat, u_omqstat))) +) +#endif +#ifndef OVERRIDE_32_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_32_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_semop +SC_LTTNG_TRACEPOINT_EVENT(semop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops))) +) +#endif +#ifndef OVERRIDE_32_msgctl +SC_LTTNG_TRACEPOINT_EVENT(msgctl, + TP_PROTO(sc_exit(long ret,) int msqid, int cmd, struct msqid_ds * buf), + TP_ARGS(sc_exit(ret,) msqid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct msqid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_shmat +SC_LTTNG_TRACEPOINT_EVENT(shmat, + TP_PROTO(sc_exit(long ret,) int shmid, char * shmaddr, int shmflg), + TP_ARGS(sc_exit(ret,) shmid, shmaddr, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(char *, shmaddr, shmaddr)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_32_shmctl +SC_LTTNG_TRACEPOINT_EVENT(shmctl, + TP_PROTO(sc_exit(long ret,) int shmid, int cmd, struct shmid_ds * buf), + TP_ARGS(sc_exit(ret,) shmid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct shmid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_32_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_32_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_32_open_by_handle_at +SC_LTTNG_TRACEPOINT_EVENT(open_by_handle_at, + TP_PROTO(sc_exit(long ret,) int mountdirfd, struct file_handle * handle, int flags), + TP_ARGS(sc_exit(ret,) mountdirfd, handle, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mountdirfd, mountdirfd)) sc_in(ctf_integer(struct file_handle *, handle, handle)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_quotactl +SC_LTTNG_TRACEPOINT_EVENT(quotactl, + TP_PROTO(sc_exit(long ret,) unsigned int cmd, const char * special, qid_t id, void * addr), + TP_ARGS(sc_exit(ret,) cmd, special, id, addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(const char *, special, special)) sc_in(ctf_integer(qid_t, id, id)) sc_inout(ctf_integer(void *, addr, addr))) +) +#endif +#ifndef OVERRIDE_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(sendfile, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, off_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, out_fd, out_fd)) sc_inout(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(off_t *, offset, offset)) sc_inout(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_32_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_32_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_mq_open +SC_LTTNG_TRACEPOINT_EVENT(mq_open, + TP_PROTO(sc_exit(long ret,) const char * u_name, int oflag, umode_t mode, struct mq_attr * u_attr), + TP_ARGS(sc_exit(ret,) u_name, oflag, mode, u_attr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name)) sc_in(ctf_integer(int, oflag, oflag)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(struct mq_attr *, u_attr, u_attr))) +) +#endif +#ifndef OVERRIDE_32_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_32_send +SC_LTTNG_TRACEPOINT_EVENT(send, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned flags), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, buff, buff)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(unsigned, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_msgsnd +SC_LTTNG_TRACEPOINT_EVENT(msgsnd, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_32_request_key +SC_LTTNG_TRACEPOINT_EVENT(request_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const char * _callout_info, key_serial_t destringid), + TP_ARGS(sc_exit(ret,) _type, _description, _callout_info, destringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const char *, _callout_info, _callout_info)) sc_in(ctf_integer(key_serial_t, destringid, destringid))) +) +#endif +#ifndef OVERRIDE_32_semtimedop +SC_LTTNG_TRACEPOINT_EVENT(semtimedop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops, const struct timespec * timeout), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops)) sc_inout(ctf_integer(const struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_fstatat64 +SC_LTTNG_TRACEPOINT_EVENT(fstatat64, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat64 * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf)) sc_inout(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_32_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned long, offset_high, offset_high)) sc_inout(ctf_integer(unsigned long, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_32_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedsend +SC_LTTNG_TRACEPOINT_EVENT(mq_timedsend, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const char * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_in(ctf_integer(unsigned int, msg_prio, msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedreceive +SC_LTTNG_TRACEPOINT_EVENT(mq_timedreceive, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, char * u_msg_ptr, size_t msg_len, unsigned int * u_msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_out(ctf_integer(char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_out(ctf_integer(unsigned int *, u_msg_prio, u_msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_msgrcv +SC_LTTNG_TRACEPOINT_EVENT(msgrcv, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, long msgtyp, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgtyp, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_out(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(long, msgtyp, msgtyp)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_32_add_key +SC_LTTNG_TRACEPOINT_EVENT(add_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const void * _payload, size_t plen, key_serial_t ringid), + TP_ARGS(sc_exit(ret,) _type, _description, _payload, plen, ringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const void *, _payload, _payload)) sc_in(ctf_integer(size_t, plen, plen)) sc_in(ctf_integer(key_serial_t, ringid, ringid))) +) +#endif +#ifndef OVERRIDE_32_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_name_to_handle_at +SC_LTTNG_TRACEPOINT_EVENT(name_to_handle_at, + TP_PROTO(sc_exit(long ret,) int dfd, const char * name, struct file_handle * handle, int * mnt_id, int flag), + TP_ARGS(sc_exit(ret,) dfd, name, handle, mnt_id, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(name, name)) sc_inout(ctf_integer(struct file_handle *, handle, handle)) sc_out(ctf_integer(int *, mnt_id, mnt_id)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_32_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_process_vm_readv +SC_LTTNG_TRACEPOINT_EVENT(process_vm_readv, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_process_vm_writev +SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "arm-32-syscalls-3.4.25_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_32_read +TRACE_SYSCALL_TABLE(read, read, 3, 3) +#endif +#ifndef OVERRIDE_TABLE_32_write +TRACE_SYSCALL_TABLE(write, write, 4, 3) +#endif +#ifndef OVERRIDE_TABLE_32_open +TRACE_SYSCALL_TABLE(open, open, 5, 3) +#endif +#ifndef OVERRIDE_TABLE_32_creat +TRACE_SYSCALL_TABLE(creat, creat, 8, 2) +#endif +#ifndef OVERRIDE_TABLE_32_link +TRACE_SYSCALL_TABLE(link, link, 9, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 10, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 12, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 14, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 15, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown16 +TRACE_SYSCALL_TABLE(lchown16, lchown16, 16, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mount +TRACE_SYSCALL_TABLE(mount, mount, 21, 5) +#endif +#ifndef OVERRIDE_TABLE_32_access +TRACE_SYSCALL_TABLE(access, access, 33, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rename +TRACE_SYSCALL_TABLE(rename, rename, 38, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 39, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 40, 1) +#endif +#ifndef OVERRIDE_TABLE_32_pipe +TRACE_SYSCALL_TABLE(pipe, pipe, 42, 1) +#endif +#ifndef OVERRIDE_TABLE_32_times +TRACE_SYSCALL_TABLE(times, times, 43, 1) +#endif +#ifndef OVERRIDE_TABLE_32_acct +TRACE_SYSCALL_TABLE(acct, acct, 51, 1) +#endif +#ifndef OVERRIDE_TABLE_32_umount +TRACE_SYSCALL_TABLE(umount, umount, 52, 2) +#endif +#ifndef OVERRIDE_TABLE_32_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 61, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 62, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigpending +TRACE_SYSCALL_TABLE(sigpending, sigpending, 73, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 74, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 75, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 77, 2) +#endif +#ifndef OVERRIDE_TABLE_32_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 78, 2) +#endif +#ifndef OVERRIDE_TABLE_32_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 79, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups16 +TRACE_SYSCALL_TABLE(getgroups16, getgroups16, 80, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups16 +TRACE_SYSCALL_TABLE(setgroups16, setgroups16, 81, 2) +#endif +#ifndef OVERRIDE_TABLE_32_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 83, 2) +#endif +#ifndef OVERRIDE_TABLE_32_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 85, 3) +#endif +#ifndef OVERRIDE_TABLE_32_uselib +TRACE_SYSCALL_TABLE(uselib, uselib, 86, 1) +#endif +#ifndef OVERRIDE_TABLE_32_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 87, 2) +#endif +#ifndef OVERRIDE_TABLE_32_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 88, 4) +#endif +#ifndef OVERRIDE_TABLE_32_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 92, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 99, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 100, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 103, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 104, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 105, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 106, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 107, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 108, 2) +#endif +#ifndef OVERRIDE_TABLE_32_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 114, 4) +#endif +#ifndef OVERRIDE_TABLE_32_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 115, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 116, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 121, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 122, 1) +#endif +#ifndef OVERRIDE_TABLE_32_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 124, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigprocmask +TRACE_SYSCALL_TABLE(sigprocmask, sigprocmask, 126, 3) +#endif +#ifndef OVERRIDE_TABLE_32_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 128, 3) +#endif +#ifndef OVERRIDE_TABLE_32_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 129, 2) +#endif +#ifndef OVERRIDE_TABLE_32_quotactl +TRACE_SYSCALL_TABLE(quotactl, quotactl, 131, 4) +#endif +#ifndef OVERRIDE_TABLE_32_llseek +TRACE_SYSCALL_TABLE(llseek, llseek, 140, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 141, 3) +#endif +#ifndef OVERRIDE_TABLE_32_select +TRACE_SYSCALL_TABLE(select, select, 142, 5) +#endif +#ifndef OVERRIDE_TABLE_32_readv +TRACE_SYSCALL_TABLE(readv, readv, 145, 3) +#endif +#ifndef OVERRIDE_TABLE_32_writev +TRACE_SYSCALL_TABLE(writev, writev, 146, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 149, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 154, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 155, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 156, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 161, 2) +#endif +#ifndef OVERRIDE_TABLE_32_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 162, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid16 +TRACE_SYSCALL_TABLE(getresuid16, getresuid16, 165, 3) +#endif +#ifndef OVERRIDE_TABLE_32_poll +TRACE_SYSCALL_TABLE(poll, poll, 168, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid16 +TRACE_SYSCALL_TABLE(getresgid16, getresgid16, 171, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 174, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 175, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 176, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 177, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 178, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 179, 2) +#endif +#ifndef OVERRIDE_TABLE_32_chown16 +TRACE_SYSCALL_TABLE(chown16, chown16, 182, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 183, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile +TRACE_SYSCALL_TABLE(sendfile, sendfile, 187, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 191, 2) +#endif +#ifndef OVERRIDE_TABLE_32_stat64 +TRACE_SYSCALL_TABLE(stat64, stat64, 195, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat64 +TRACE_SYSCALL_TABLE(lstat64, lstat64, 196, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstat64 +TRACE_SYSCALL_TABLE(fstat64, fstat64, 197, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 198, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 205, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 206, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 209, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 211, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chown +TRACE_SYSCALL_TABLE(chown, chown, 212, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 217, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 218, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 219, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 226, 5) +#endif +#ifndef OVERRIDE_TABLE_32_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 227, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 228, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 229, 4) +#endif +#ifndef OVERRIDE_TABLE_32_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 230, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 231, 4) +#endif +#ifndef OVERRIDE_TABLE_32_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 232, 3) +#endif +#ifndef OVERRIDE_TABLE_32_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 233, 3) +#endif +#ifndef OVERRIDE_TABLE_32_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 234, 3) +#endif +#ifndef OVERRIDE_TABLE_32_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 235, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 236, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 237, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 239, 4) +#endif +#ifndef OVERRIDE_TABLE_32_futex +TRACE_SYSCALL_TABLE(futex, futex, 240, 6) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 241, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 242, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 243, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 245, 5) +#endif +#ifndef OVERRIDE_TABLE_32_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 246, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 247, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 251, 4) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 252, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 256, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 257, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 258, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 259, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 262, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 263, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 264, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 265, 4) +#endif +#ifndef OVERRIDE_TABLE_32_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 269, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mq_open +TRACE_SYSCALL_TABLE(mq_open, mq_open, 274, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mq_unlink +TRACE_SYSCALL_TABLE(mq_unlink, mq_unlink, 275, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedsend +TRACE_SYSCALL_TABLE(mq_timedsend, mq_timedsend, 276, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedreceive +TRACE_SYSCALL_TABLE(mq_timedreceive, mq_timedreceive, 277, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_notify +TRACE_SYSCALL_TABLE(mq_notify, mq_notify, 278, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mq_getsetattr +TRACE_SYSCALL_TABLE(mq_getsetattr, mq_getsetattr, 279, 3) +#endif +#ifndef OVERRIDE_TABLE_32_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 280, 5) +#endif +#ifndef OVERRIDE_TABLE_32_bind +TRACE_SYSCALL_TABLE(bind, bind, 282, 3) +#endif +#ifndef OVERRIDE_TABLE_32_connect +TRACE_SYSCALL_TABLE(connect, connect, 283, 3) +#endif +#ifndef OVERRIDE_TABLE_32_accept +TRACE_SYSCALL_TABLE(accept, accept, 285, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 286, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 287, 3) +#endif +#ifndef OVERRIDE_TABLE_32_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 288, 4) +#endif +#ifndef OVERRIDE_TABLE_32_send +TRACE_SYSCALL_TABLE(send, send, 289, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 290, 6) +#endif +#ifndef OVERRIDE_TABLE_32_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 292, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 294, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 295, 5) +#endif +#ifndef OVERRIDE_TABLE_32_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 296, 3) +#endif +#ifndef OVERRIDE_TABLE_32_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 297, 3) +#endif +#ifndef OVERRIDE_TABLE_32_semop +TRACE_SYSCALL_TABLE(semop, semop, 298, 3) +#endif +#ifndef OVERRIDE_TABLE_32_msgsnd +TRACE_SYSCALL_TABLE(msgsnd, msgsnd, 301, 4) +#endif +#ifndef OVERRIDE_TABLE_32_msgrcv +TRACE_SYSCALL_TABLE(msgrcv, msgrcv, 302, 5) +#endif +#ifndef OVERRIDE_TABLE_32_msgctl +TRACE_SYSCALL_TABLE(msgctl, msgctl, 304, 3) +#endif +#ifndef OVERRIDE_TABLE_32_shmat +TRACE_SYSCALL_TABLE(shmat, shmat, 305, 3) +#endif +#ifndef OVERRIDE_TABLE_32_shmdt +TRACE_SYSCALL_TABLE(shmdt, shmdt, 306, 1) +#endif +#ifndef OVERRIDE_TABLE_32_shmctl +TRACE_SYSCALL_TABLE(shmctl, shmctl, 308, 3) +#endif +#ifndef OVERRIDE_TABLE_32_add_key +TRACE_SYSCALL_TABLE(add_key, add_key, 309, 5) +#endif +#ifndef OVERRIDE_TABLE_32_request_key +TRACE_SYSCALL_TABLE(request_key, request_key, 310, 4) +#endif +#ifndef OVERRIDE_TABLE_32_semtimedop +TRACE_SYSCALL_TABLE(semtimedop, semtimedop, 312, 4) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 317, 3) +#endif +#ifndef OVERRIDE_TABLE_32_openat +TRACE_SYSCALL_TABLE(openat, openat, 322, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 323, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 324, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 325, 5) +#endif +#ifndef OVERRIDE_TABLE_32_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 326, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatat64 +TRACE_SYSCALL_TABLE(fstatat64, fstatat64, 327, 4) +#endif +#ifndef OVERRIDE_TABLE_32_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 328, 3) +#endif +#ifndef OVERRIDE_TABLE_32_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 329, 4) +#endif +#ifndef OVERRIDE_TABLE_32_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 330, 5) +#endif +#ifndef OVERRIDE_TABLE_32_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 331, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 332, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 333, 3) +#endif +#ifndef OVERRIDE_TABLE_32_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 334, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 335, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 336, 5) +#endif +#ifndef OVERRIDE_TABLE_32_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 338, 2) +#endif +#ifndef OVERRIDE_TABLE_32_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 339, 3) +#endif +#ifndef OVERRIDE_TABLE_32_splice +TRACE_SYSCALL_TABLE(splice, splice, 340, 6) +#endif +#ifndef OVERRIDE_TABLE_32_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 343, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 345, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 346, 6) +#endif +#ifndef OVERRIDE_TABLE_32_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 348, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 349, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 353, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 354, 2) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 355, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 359, 2) +#endif +#ifndef OVERRIDE_TABLE_32_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 361, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 362, 5) +#endif +#ifndef OVERRIDE_TABLE_32_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 363, 4) +#endif +#ifndef OVERRIDE_TABLE_32_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 364, 5) +#endif +#ifndef OVERRIDE_TABLE_32_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 365, 5) +#endif +#ifndef OVERRIDE_TABLE_32_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 366, 4) +#endif +#ifndef OVERRIDE_TABLE_32_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 369, 4) +#endif +#ifndef OVERRIDE_TABLE_32_name_to_handle_at +TRACE_SYSCALL_TABLE(name_to_handle_at, name_to_handle_at, 370, 5) +#endif +#ifndef OVERRIDE_TABLE_32_open_by_handle_at +TRACE_SYSCALL_TABLE(open_by_handle_at, open_by_handle_at, 371, 3) +#endif +#ifndef OVERRIDE_TABLE_32_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 372, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 374, 4) +#endif +#ifndef OVERRIDE_TABLE_32_process_vm_readv +TRACE_SYSCALL_TABLE(process_vm_readv, process_vm_readv, 376, 6) +#endif +#ifndef OVERRIDE_TABLE_32_process_vm_writev +TRACE_SYSCALL_TABLE(process_vm_writev, process_vm_writev, 377, 6) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers_override.h new file mode 100644 index 000000000000..ab325c7c245e --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-32-syscalls-3.4.25_pointers_override.h @@ -0,0 +1,42 @@ + +#define OVERRIDE_TABLE_32_mmap2 + +# ifndef CONFIG_UID16 +# define OVERRIDE_32_getgroups16 +# define OVERRIDE_32_setgroups16 +# define OVERRIDE_32_lchown16 +# define OVERRIDE_32_getresuid16 +# define OVERRIDE_32_getresgid16 +# define OVERRIDE_32_chown16 +# endif + +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_user_array(int, fildes, fildes, 2)) + ) +) + +#else /* CREATE_SYSCALL_TABLE */ + +# ifndef CONFIG_UID16 +# define OVERRIDE_TABLE_32_getgroups16 +# define OVERRIDE_TABLE_32_setgroups16 +# define OVERRIDE_TABLE_32_lchown16 +# define OVERRIDE_TABLE_32_getresuid16 +# define OVERRIDE_TABLE_32_getresgid16 +# define OVERRIDE_TABLE_32_chown16 +# endif + +#define OVERRIDE_TABLE_32_execve +TRACE_SYSCALL_TABLE(execve, execve, 11, 3) +#define OVERRIDE_TABLE_32_clone +TRACE_SYSCALL_TABLE(clone, clone, 120, 5) + +#endif /* CREATE_SYSCALL_TABLE */ + + diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers.h new file mode 100644 index 000000000000..b033dc1784e9 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers.h @@ -0,0 +1,1011 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "arm-64-syscalls-4.4.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_64_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_64_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_64_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_64_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_64_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_64_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_64_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_64_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_64_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_64_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_64_msgget +SC_LTTNG_TRACEPOINT_EVENT(msgget, + TP_PROTO(sc_exit(long ret,) key_t key, int msgflg), + TP_ARGS(sc_exit(ret,) key, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_64_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_64_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_fanotify_init +SC_LTTNG_TRACEPOINT_EVENT(fanotify_init, + TP_PROTO(sc_exit(long ret,) unsigned int flags, unsigned int event_f_flags), + TP_ARGS(sc_exit(ret,) flags, event_f_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(unsigned int, event_f_flags, event_f_flags))) +) +#endif +#ifndef OVERRIDE_64_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_64_membarrier +SC_LTTNG_TRACEPOINT_EVENT(membarrier, + TP_PROTO(sc_exit(long ret,) int cmd, int flags), + TP_ARGS(sc_exit(ret,) cmd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_64_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_64_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_64_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_64_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_64_semget +SC_LTTNG_TRACEPOINT_EVENT(semget, + TP_PROTO(sc_exit(long ret,) key_t key, int nsems, int semflg), + TP_ARGS(sc_exit(ret,) key, nsems, semflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, nsems, nsems)) sc_in(ctf_integer(int, semflg, semflg))) +) +#endif +#ifndef OVERRIDE_64_shmget +SC_LTTNG_TRACEPOINT_EVENT(shmget, + TP_PROTO(sc_exit(long ret,) key_t key, size_t size, int shmflg), + TP_ARGS(sc_exit(ret,) key, size, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_64_readahead +SC_LTTNG_TRACEPOINT_EVENT(readahead, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, size_t count), + TP_ARGS(sc_exit(ret,) fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_64_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_64_mlock2 +SC_LTTNG_TRACEPOINT_EVENT(mlock2, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, start, start)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fallocate +SC_LTTNG_TRACEPOINT_EVENT(fallocate, + TP_PROTO(sc_exit(long ret,) int fd, int mode, loff_t offset, loff_t len), + TP_ARGS(sc_exit(ret,) fd, mode, offset, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_sync_file_range +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t nbytes, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, offset, nbytes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, nbytes, nbytes)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_64_semctl +SC_LTTNG_TRACEPOINT_EVENT(semctl, + TP_PROTO(sc_exit(long ret,) int semid, int semnum, int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) semid, semnum, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(int, semnum, semnum)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_fadvise64_64 +SC_LTTNG_TRACEPOINT_EVENT(fadvise64_64, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t len, int advice), + TP_ARGS(sc_exit(ret,) fd, offset, len, advice), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(loff_t, offset, offset)) sc_inout(ctf_integer(loff_t, len, len)) sc_inout(ctf_integer(int, advice, advice))) +) +#endif +#ifndef OVERRIDE_64_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_64_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_64_keyctl +SC_LTTNG_TRACEPOINT_EVENT(keyctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_inout(ctf_integer(unsigned long, arg3, arg3)) sc_inout(ctf_integer(unsigned long, arg4, arg4)) sc_inout(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_64_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "arm-64-syscalls-4.4.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 58, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 81, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 124, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 128, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 157, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 172, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 173, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 174, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 175, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 176, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 177, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 178, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 231, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 58, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(sync, sync, 81, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 124, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 128, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 157, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 172, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 173, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 174, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 175, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 176, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 177, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 178, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 231, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 1, 1) +#endif +#ifndef OVERRIDE_TABLE_64_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 19, 2) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 20, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup +TRACE_SYSCALL_TABLE(dup, dup, 23, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 24, 3) +#endif +#ifndef OVERRIDE_TABLE_64_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 25, 3) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 26, 1) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 28, 2) +#endif +#ifndef OVERRIDE_TABLE_64_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 29, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 30, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 31, 2) +#endif +#ifndef OVERRIDE_TABLE_64_flock +TRACE_SYSCALL_TABLE(flock, flock, 32, 2) +#endif +#ifndef OVERRIDE_TABLE_64_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 46, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fallocate +TRACE_SYSCALL_TABLE(fallocate, fallocate, 47, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 50, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 52, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 55, 3) +#endif +#ifndef OVERRIDE_TABLE_64_close +TRACE_SYSCALL_TABLE(close, close, 57, 1) +#endif +#ifndef OVERRIDE_TABLE_64_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 62, 3) +#endif +#ifndef OVERRIDE_TABLE_64_tee +TRACE_SYSCALL_TABLE(tee, tee, 77, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 82, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 83, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sync_file_range +TRACE_SYSCALL_TABLE(sync_file_range, sync_file_range, 84, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 85, 2) +#endif +#ifndef OVERRIDE_TABLE_64_personality +TRACE_SYSCALL_TABLE(personality, personality, 92, 1) +#endif +#ifndef OVERRIDE_TABLE_64_exit +TRACE_SYSCALL_TABLE(exit, exit, 93, 1) +#endif +#ifndef OVERRIDE_TABLE_64_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 94, 1) +#endif +#ifndef OVERRIDE_TABLE_64_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 97, 1) +#endif +#ifndef OVERRIDE_TABLE_64_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 109, 1) +#endif +#ifndef OVERRIDE_TABLE_64_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 111, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 117, 4) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 120, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 125, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 126, 1) +#endif +#ifndef OVERRIDE_TABLE_64_kill +TRACE_SYSCALL_TABLE(kill, kill, 129, 2) +#endif +#ifndef OVERRIDE_TABLE_64_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 130, 2) +#endif +#ifndef OVERRIDE_TABLE_64_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 131, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 140, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 141, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 143, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 144, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 145, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 146, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 147, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 149, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 151, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 152, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 154, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 155, 1) +#endif +#ifndef OVERRIDE_TABLE_64_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 156, 1) +#endif +#ifndef OVERRIDE_TABLE_64_umask +TRACE_SYSCALL_TABLE(umask, umask, 166, 1) +#endif +#ifndef OVERRIDE_TABLE_64_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 167, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msgget +TRACE_SYSCALL_TABLE(msgget, msgget, 186, 2) +#endif +#ifndef OVERRIDE_TABLE_64_semget +TRACE_SYSCALL_TABLE(semget, semget, 190, 3) +#endif +#ifndef OVERRIDE_TABLE_64_semctl +TRACE_SYSCALL_TABLE(semctl, semctl, 191, 4) +#endif +#ifndef OVERRIDE_TABLE_64_shmget +TRACE_SYSCALL_TABLE(shmget, shmget, 194, 3) +#endif +#ifndef OVERRIDE_TABLE_64_socket +TRACE_SYSCALL_TABLE(socket, socket, 198, 3) +#endif +#ifndef OVERRIDE_TABLE_64_listen +TRACE_SYSCALL_TABLE(listen, listen, 201, 2) +#endif +#ifndef OVERRIDE_TABLE_64_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 210, 2) +#endif +#ifndef OVERRIDE_TABLE_64_readahead +TRACE_SYSCALL_TABLE(readahead, readahead, 213, 3) +#endif +#ifndef OVERRIDE_TABLE_64_brk +TRACE_SYSCALL_TABLE(brk, brk, 214, 1) +#endif +#ifndef OVERRIDE_TABLE_64_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 215, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 216, 5) +#endif +#ifndef OVERRIDE_TABLE_64_keyctl +TRACE_SYSCALL_TABLE(keyctl, keyctl, 219, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fadvise64_64 +TRACE_SYSCALL_TABLE(fadvise64_64, fadvise64_64, 223, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 226, 3) +#endif +#ifndef OVERRIDE_TABLE_64_msync +TRACE_SYSCALL_TABLE(msync, msync, 227, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 228, 2) +#endif +#ifndef OVERRIDE_TABLE_64_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 229, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 230, 1) +#endif +#ifndef OVERRIDE_TABLE_64_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 233, 3) +#endif +#ifndef OVERRIDE_TABLE_64_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 234, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fanotify_init +TRACE_SYSCALL_TABLE(fanotify_init, fanotify_init, 262, 2) +#endif +#ifndef OVERRIDE_TABLE_64_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 267, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setns +TRACE_SYSCALL_TABLE(setns, setns, 268, 2) +#endif +#ifndef OVERRIDE_TABLE_64_membarrier +TRACE_SYSCALL_TABLE(membarrier, membarrier, 283, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mlock2 +TRACE_SYSCALL_TABLE(mlock2, mlock2, 284, 3) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers_override.h new file mode 100644 index 000000000000..7a5ef7945298 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_integers_override.h @@ -0,0 +1,8 @@ +/* + * this is a place-holder for arm64 integer syscall definition override. + */ +#ifndef CREATE_SYSCALL_TABLE +#else /* CREATE_SYSCALL_TABLE */ +#define OVERRIDE_TABLE_64_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 222, 6) +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers.h new file mode 100644 index 000000000000..f61ec756aafe --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers.h @@ -0,0 +1,1664 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "arm-64-syscalls-4.4.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_64_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_acct +SC_LTTNG_TRACEPOINT_EVENT(acct, + TP_PROTO(sc_exit(long ret,) const char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_64_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_64_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_64_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_64_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_64_mq_unlink +SC_LTTNG_TRACEPOINT_EVENT(mq_unlink, + TP_PROTO(sc_exit(long ret,) const char * u_name), + TP_ARGS(sc_exit(ret,) u_name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name))) +) +#endif +#ifndef OVERRIDE_64_shmdt +SC_LTTNG_TRACEPOINT_EVENT(shmdt, + TP_PROTO(sc_exit(long ret,) char * shmaddr), + TP_ARGS(sc_exit(ret,) shmaddr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(char *, shmaddr, shmaddr))) +) +#endif +#ifndef OVERRIDE_64_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_64_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_64_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_64_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_64_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_64_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_64_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_64_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_64_sigaltstack +SC_LTTNG_TRACEPOINT_EVENT(sigaltstack, + TP_PROTO(sc_exit(long ret,) const stack_t * uss, stack_t * uoss), + TP_ARGS(sc_exit(ret,) uss, uoss), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const stack_t *, uss, uss)) sc_inout(ctf_integer(stack_t *, uoss, uoss))) +) +#endif +#ifndef OVERRIDE_64_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * uset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, uset, uset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_mq_notify +SC_LTTNG_TRACEPOINT_EVENT(mq_notify, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct sigevent * u_notification), + TP_ARGS(sc_exit(ret,) mqdes, u_notification), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct sigevent *, u_notification, u_notification))) +) +#endif +#ifndef OVERRIDE_64_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_64_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_64_memfd_create +SC_LTTNG_TRACEPOINT_EVENT(memfd_create, + TP_PROTO(sc_exit(long ret,) const char * uname, unsigned int flags), + TP_ARGS(sc_exit(ret,) uname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(uname, uname)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_64_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_64_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_lookup_dcookie +SC_LTTNG_TRACEPOINT_EVENT(lookup_dcookie, + TP_PROTO(sc_exit(long ret,) u64 cookie64, char * buf, size_t len), + TP_ARGS(sc_exit(ret,) cookie64, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(u64, cookie64, cookie64)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_64_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_64_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_64_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_64_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruidp, uid_t * euidp, uid_t * suidp), + TP_ARGS(sc_exit(ret,) ruidp, euidp, suidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruidp, ruidp)) sc_out(ctf_integer(uid_t *, euidp, euidp)) sc_out(ctf_integer(uid_t *, suidp, suidp))) +) +#endif +#ifndef OVERRIDE_64_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgidp, gid_t * egidp, gid_t * sgidp), + TP_ARGS(sc_exit(ret,) rgidp, egidp, sgidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgidp, rgidp)) sc_out(ctf_integer(gid_t *, egidp, egidp)) sc_out(ctf_integer(gid_t *, sgidp, sgidp))) +) +#endif +#ifndef OVERRIDE_64_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_64_mq_getsetattr +SC_LTTNG_TRACEPOINT_EVENT(mq_getsetattr, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct mq_attr * u_mqstat, struct mq_attr * u_omqstat), + TP_ARGS(sc_exit(ret,) mqdes, u_mqstat, u_omqstat), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct mq_attr *, u_mqstat, u_mqstat)) sc_out(ctf_integer(struct mq_attr *, u_omqstat, u_omqstat))) +) +#endif +#ifndef OVERRIDE_64_msgctl +SC_LTTNG_TRACEPOINT_EVENT(msgctl, + TP_PROTO(sc_exit(long ret,) int msqid, int cmd, struct msqid_ds * buf), + TP_ARGS(sc_exit(ret,) msqid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct msqid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_semop +SC_LTTNG_TRACEPOINT_EVENT(semop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops))) +) +#endif +#ifndef OVERRIDE_64_shmctl +SC_LTTNG_TRACEPOINT_EVENT(shmctl, + TP_PROTO(sc_exit(long ret,) int shmid, int cmd, struct shmid_ds * buf), + TP_ARGS(sc_exit(ret,) shmid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct shmid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_shmat +SC_LTTNG_TRACEPOINT_EVENT(shmat, + TP_PROTO(sc_exit(long ret,) int shmid, char * shmaddr, int shmflg), + TP_ARGS(sc_exit(ret,) shmid, shmaddr, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(char *, shmaddr, shmaddr)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_64_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct user_msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct user_msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct user_msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct user_msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_execve +SC_LTTNG_TRACEPOINT_EVENT(execve, + TP_PROTO(sc_exit(long ret,) const char * filename, const char *const * argv, const char *const * envp), + TP_ARGS(sc_exit(ret,) filename, argv, envp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(const char *const *, argv, argv)) sc_inout(ctf_integer(const char *const *, envp, envp))) +) +#endif +#ifndef OVERRIDE_64_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_64_open_by_handle_at +SC_LTTNG_TRACEPOINT_EVENT(open_by_handle_at, + TP_PROTO(sc_exit(long ret,) int mountdirfd, struct file_handle * handle, int flags), + TP_ARGS(sc_exit(ret,) mountdirfd, handle, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mountdirfd, mountdirfd)) sc_in(ctf_integer(struct file_handle *, handle, handle)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_finit_module +SC_LTTNG_TRACEPOINT_EVENT(finit_module, + TP_PROTO(sc_exit(long ret,) int fd, const char * uargs, int flags), + TP_ARGS(sc_exit(ret,) fd, uargs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const char *, uargs, uargs)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_sched_setattr +SC_LTTNG_TRACEPOINT_EVENT(sched_setattr, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_attr * uattr, unsigned int flags), + TP_ARGS(sc_exit(ret,) pid, uattr, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(struct sched_attr *, uattr, uattr)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_seccomp +SC_LTTNG_TRACEPOINT_EVENT(seccomp, + TP_PROTO(sc_exit(long ret,) unsigned int op, unsigned int flags, const char * uargs), + TP_ARGS(sc_exit(ret,) op, flags, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, op, op)) sc_inout(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_64_getrandom +SC_LTTNG_TRACEPOINT_EVENT(getrandom, + TP_PROTO(sc_exit(long ret,) char * buf, size_t count, unsigned int flags), + TP_ARGS(sc_exit(ret,) buf, count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(char *, buf, buf)) sc_inout(ctf_integer(size_t, count, count)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_64_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_64_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_quotactl +SC_LTTNG_TRACEPOINT_EVENT(quotactl, + TP_PROTO(sc_exit(long ret,) unsigned int cmd, const char * special, qid_t id, void * addr), + TP_ARGS(sc_exit(ret,) cmd, special, id, addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(const char *, special, special)) sc_in(ctf_integer(qid_t, id, id)) sc_inout(ctf_integer(void *, addr, addr))) +) +#endif +#ifndef OVERRIDE_64_pread64 +SC_LTTNG_TRACEPOINT_EVENT(pread64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_64_pwrite64 +SC_LTTNG_TRACEPOINT_EVENT(pwrite64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_64_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_64_newfstatat +SC_LTTNG_TRACEPOINT_EVENT(newfstatat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_64_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_mq_open +SC_LTTNG_TRACEPOINT_EVENT(mq_open, + TP_PROTO(sc_exit(long ret,) const char * u_name, int oflag, umode_t mode, struct mq_attr * u_attr), + TP_ARGS(sc_exit(ret,) u_name, oflag, mode, u_attr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name)) sc_in(ctf_integer(int, oflag, oflag)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(struct mq_attr *, u_attr, u_attr))) +) +#endif +#ifndef OVERRIDE_64_msgsnd +SC_LTTNG_TRACEPOINT_EVENT(msgsnd, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_semtimedop +SC_LTTNG_TRACEPOINT_EVENT(semtimedop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops, const struct timespec * timeout), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops)) sc_inout(ctf_integer(const struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_64_request_key +SC_LTTNG_TRACEPOINT_EVENT(request_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const char * _callout_info, key_serial_t destringid), + TP_ARGS(sc_exit(ret,) _type, _description, _callout_info, destringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const char *, _callout_info, _callout_info)) sc_in(ctf_integer(key_serial_t, destringid, destringid))) +) +#endif +#ifndef OVERRIDE_64_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_64_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_sched_getattr +SC_LTTNG_TRACEPOINT_EVENT(sched_getattr, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_attr * uattr, unsigned int size, unsigned int flags), + TP_ARGS(sc_exit(ret,) pid, uattr, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(struct sched_attr *, uattr, uattr)) sc_inout(ctf_integer(unsigned int, size, size)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_64_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_mq_timedsend +SC_LTTNG_TRACEPOINT_EVENT(mq_timedsend, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const char * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_in(ctf_integer(unsigned int, msg_prio, msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_64_mq_timedreceive +SC_LTTNG_TRACEPOINT_EVENT(mq_timedreceive, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, char * u_msg_ptr, size_t msg_len, unsigned int * u_msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_out(ctf_integer(char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_out(ctf_integer(unsigned int *, u_msg_prio, u_msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_64_msgrcv +SC_LTTNG_TRACEPOINT_EVENT(msgrcv, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, long msgtyp, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgtyp, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_out(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(long, msgtyp, msgtyp)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_add_key +SC_LTTNG_TRACEPOINT_EVENT(add_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const void * _payload, size_t plen, key_serial_t ringid), + TP_ARGS(sc_exit(ret,) _type, _description, _payload, plen, ringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const void *, _payload, _payload)) sc_in(ctf_integer(size_t, plen, plen)) sc_in(ctf_integer(key_serial_t, ringid, ringid))) +) +#endif +#ifndef OVERRIDE_64_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_fanotify_mark +SC_LTTNG_TRACEPOINT_EVENT(fanotify_mark, + TP_PROTO(sc_exit(long ret,) int fanotify_fd, unsigned int flags, __u64 mask, int dfd, const char * pathname), + TP_ARGS(sc_exit(ret,) fanotify_fd, flags, mask, dfd, pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fanotify_fd, fanotify_fd)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(__u64, mask, mask)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_name_to_handle_at +SC_LTTNG_TRACEPOINT_EVENT(name_to_handle_at, + TP_PROTO(sc_exit(long ret,) int dfd, const char * name, struct file_handle * handle, int * mnt_id, int flag), + TP_ARGS(sc_exit(ret,) dfd, name, handle, mnt_id, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(name, name)) sc_inout(ctf_integer(struct file_handle *, handle, handle)) sc_out(ctf_integer(int *, mnt_id, mnt_id)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_renameat2 +SC_LTTNG_TRACEPOINT_EVENT(renameat2, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, unsigned int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, olddfd, olddfd)) sc_inout(ctf_user_string(oldname, oldname)) sc_inout(ctf_integer(int, newdfd, newdfd)) sc_inout(ctf_user_string(newname, newname)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_execveat +SC_LTTNG_TRACEPOINT_EVENT(execveat, + TP_PROTO(sc_exit(long ret,) int fd, const char * filename, const char *const * argv, const char *const * envp, int flags), + TP_ARGS(sc_exit(ret,) fd, filename, argv, envp, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(const char *const *, argv, argv)) sc_inout(ctf_integer(const char *const *, envp, envp)) sc_inout(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_64_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_process_vm_readv +SC_LTTNG_TRACEPOINT_EVENT(process_vm_readv, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_process_vm_writev +SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "arm-64-syscalls-4.4.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_64_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 0, 2) +#endif +#ifndef OVERRIDE_TABLE_64_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 2, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 3, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 4, 5) +#endif +#ifndef OVERRIDE_TABLE_64_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 5, 5) +#endif +#ifndef OVERRIDE_TABLE_64_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 6, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 7, 5) +#endif +#ifndef OVERRIDE_TABLE_64_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 8, 4) +#endif +#ifndef OVERRIDE_TABLE_64_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 9, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 10, 4) +#endif +#ifndef OVERRIDE_TABLE_64_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 11, 3) +#endif +#ifndef OVERRIDE_TABLE_64_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 12, 3) +#endif +#ifndef OVERRIDE_TABLE_64_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 13, 3) +#endif +#ifndef OVERRIDE_TABLE_64_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 14, 2) +#endif +#ifndef OVERRIDE_TABLE_64_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 15, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 16, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 17, 2) +#endif +#ifndef OVERRIDE_TABLE_64_lookup_dcookie +TRACE_SYSCALL_TABLE(lookup_dcookie, lookup_dcookie, 18, 3) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 21, 4) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 22, 6) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 27, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 33, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 34, 3) +#endif +#ifndef OVERRIDE_TABLE_64_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 35, 3) +#endif +#ifndef OVERRIDE_TABLE_64_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 36, 3) +#endif +#ifndef OVERRIDE_TABLE_64_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 37, 5) +#endif +#ifndef OVERRIDE_TABLE_64_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 38, 4) +#endif +#ifndef OVERRIDE_TABLE_64_umount +TRACE_SYSCALL_TABLE(umount, umount, 39, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mount +TRACE_SYSCALL_TABLE(mount, mount, 40, 5) +#endif +#ifndef OVERRIDE_TABLE_64_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 41, 2) +#endif +#ifndef OVERRIDE_TABLE_64_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 43, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 44, 2) +#endif +#ifndef OVERRIDE_TABLE_64_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 45, 2) +#endif +#ifndef OVERRIDE_TABLE_64_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 48, 3) +#endif +#ifndef OVERRIDE_TABLE_64_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 49, 1) +#endif +#ifndef OVERRIDE_TABLE_64_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 51, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 53, 3) +#endif +#ifndef OVERRIDE_TABLE_64_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 54, 5) +#endif +#ifndef OVERRIDE_TABLE_64_openat +TRACE_SYSCALL_TABLE(openat, openat, 56, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 59, 2) +#endif +#ifndef OVERRIDE_TABLE_64_quotactl +TRACE_SYSCALL_TABLE(quotactl, quotactl, 60, 4) +#endif +#ifndef OVERRIDE_TABLE_64_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 61, 3) +#endif +#ifndef OVERRIDE_TABLE_64_read +TRACE_SYSCALL_TABLE(read, read, 63, 3) +#endif +#ifndef OVERRIDE_TABLE_64_write +TRACE_SYSCALL_TABLE(write, write, 64, 3) +#endif +#ifndef OVERRIDE_TABLE_64_readv +TRACE_SYSCALL_TABLE(readv, readv, 65, 3) +#endif +#ifndef OVERRIDE_TABLE_64_writev +TRACE_SYSCALL_TABLE(writev, writev, 66, 3) +#endif +#ifndef OVERRIDE_TABLE_64_pread64 +TRACE_SYSCALL_TABLE(pread64, pread64, 67, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pwrite64 +TRACE_SYSCALL_TABLE(pwrite64, pwrite64, 68, 4) +#endif +#ifndef OVERRIDE_TABLE_64_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 69, 5) +#endif +#ifndef OVERRIDE_TABLE_64_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 70, 5) +#endif +#ifndef OVERRIDE_TABLE_64_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 71, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 72, 6) +#endif +#ifndef OVERRIDE_TABLE_64_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 73, 5) +#endif +#ifndef OVERRIDE_TABLE_64_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 74, 4) +#endif +#ifndef OVERRIDE_TABLE_64_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 75, 4) +#endif +#ifndef OVERRIDE_TABLE_64_splice +TRACE_SYSCALL_TABLE(splice, splice, 76, 6) +#endif +#ifndef OVERRIDE_TABLE_64_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 78, 4) +#endif +#ifndef OVERRIDE_TABLE_64_newfstatat +TRACE_SYSCALL_TABLE(newfstatat, newfstatat, 79, 4) +#endif +#ifndef OVERRIDE_TABLE_64_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 80, 2) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 86, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 87, 2) +#endif +#ifndef OVERRIDE_TABLE_64_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 88, 4) +#endif +#ifndef OVERRIDE_TABLE_64_acct +TRACE_SYSCALL_TABLE(acct, acct, 89, 1) +#endif +#ifndef OVERRIDE_TABLE_64_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 95, 5) +#endif +#ifndef OVERRIDE_TABLE_64_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 96, 1) +#endif +#ifndef OVERRIDE_TABLE_64_futex +TRACE_SYSCALL_TABLE(futex, futex, 98, 6) +#endif +#ifndef OVERRIDE_TABLE_64_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 99, 2) +#endif +#ifndef OVERRIDE_TABLE_64_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 100, 3) +#endif +#ifndef OVERRIDE_TABLE_64_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 101, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 102, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 103, 3) +#endif +#ifndef OVERRIDE_TABLE_64_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 105, 3) +#endif +#ifndef OVERRIDE_TABLE_64_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 106, 2) +#endif +#ifndef OVERRIDE_TABLE_64_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 107, 3) +#endif +#ifndef OVERRIDE_TABLE_64_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 108, 2) +#endif +#ifndef OVERRIDE_TABLE_64_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 110, 4) +#endif +#ifndef OVERRIDE_TABLE_64_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 112, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 113, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 114, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 115, 4) +#endif +#ifndef OVERRIDE_TABLE_64_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 116, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 118, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 119, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 121, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 122, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 123, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 127, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sigaltstack +TRACE_SYSCALL_TABLE(sigaltstack, sigaltstack, 132, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 133, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 134, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 135, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 136, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 137, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 138, 3) +#endif +#ifndef OVERRIDE_TABLE_64_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 142, 4) +#endif +#ifndef OVERRIDE_TABLE_64_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 148, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 150, 3) +#endif +#ifndef OVERRIDE_TABLE_64_times +TRACE_SYSCALL_TABLE(times, times, 153, 1) +#endif +#ifndef OVERRIDE_TABLE_64_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 158, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 159, 2) +#endif +#ifndef OVERRIDE_TABLE_64_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 160, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 161, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 162, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 163, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 164, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 165, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 168, 3) +#endif +#ifndef OVERRIDE_TABLE_64_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 169, 2) +#endif +#ifndef OVERRIDE_TABLE_64_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 170, 2) +#endif +#ifndef OVERRIDE_TABLE_64_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 171, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 179, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mq_open +TRACE_SYSCALL_TABLE(mq_open, mq_open, 180, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mq_unlink +TRACE_SYSCALL_TABLE(mq_unlink, mq_unlink, 181, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mq_timedsend +TRACE_SYSCALL_TABLE(mq_timedsend, mq_timedsend, 182, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mq_timedreceive +TRACE_SYSCALL_TABLE(mq_timedreceive, mq_timedreceive, 183, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mq_notify +TRACE_SYSCALL_TABLE(mq_notify, mq_notify, 184, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mq_getsetattr +TRACE_SYSCALL_TABLE(mq_getsetattr, mq_getsetattr, 185, 3) +#endif +#ifndef OVERRIDE_TABLE_64_msgctl +TRACE_SYSCALL_TABLE(msgctl, msgctl, 187, 3) +#endif +#ifndef OVERRIDE_TABLE_64_msgrcv +TRACE_SYSCALL_TABLE(msgrcv, msgrcv, 188, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msgsnd +TRACE_SYSCALL_TABLE(msgsnd, msgsnd, 189, 4) +#endif +#ifndef OVERRIDE_TABLE_64_semtimedop +TRACE_SYSCALL_TABLE(semtimedop, semtimedop, 192, 4) +#endif +#ifndef OVERRIDE_TABLE_64_semop +TRACE_SYSCALL_TABLE(semop, semop, 193, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmctl +TRACE_SYSCALL_TABLE(shmctl, shmctl, 195, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmat +TRACE_SYSCALL_TABLE(shmat, shmat, 196, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmdt +TRACE_SYSCALL_TABLE(shmdt, shmdt, 197, 1) +#endif +#ifndef OVERRIDE_TABLE_64_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 199, 4) +#endif +#ifndef OVERRIDE_TABLE_64_bind +TRACE_SYSCALL_TABLE(bind, bind, 200, 3) +#endif +#ifndef OVERRIDE_TABLE_64_accept +TRACE_SYSCALL_TABLE(accept, accept, 202, 3) +#endif +#ifndef OVERRIDE_TABLE_64_connect +TRACE_SYSCALL_TABLE(connect, connect, 203, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 204, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 205, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 206, 6) +#endif +#ifndef OVERRIDE_TABLE_64_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 207, 6) +#endif +#ifndef OVERRIDE_TABLE_64_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 208, 5) +#endif +#ifndef OVERRIDE_TABLE_64_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 209, 5) +#endif +#ifndef OVERRIDE_TABLE_64_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 211, 3) +#endif +#ifndef OVERRIDE_TABLE_64_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 212, 3) +#endif +#ifndef OVERRIDE_TABLE_64_add_key +TRACE_SYSCALL_TABLE(add_key, add_key, 217, 5) +#endif +#ifndef OVERRIDE_TABLE_64_request_key +TRACE_SYSCALL_TABLE(request_key, request_key, 218, 4) +#endif +#ifndef OVERRIDE_TABLE_64_execve +TRACE_SYSCALL_TABLE(execve, execve, 221, 3) +#endif +#ifndef OVERRIDE_TABLE_64_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 224, 2) +#endif +#ifndef OVERRIDE_TABLE_64_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 225, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 232, 3) +#endif +#ifndef OVERRIDE_TABLE_64_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 240, 4) +#endif +#ifndef OVERRIDE_TABLE_64_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 241, 5) +#endif +#ifndef OVERRIDE_TABLE_64_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 242, 4) +#endif +#ifndef OVERRIDE_TABLE_64_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 243, 5) +#endif +#ifndef OVERRIDE_TABLE_64_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 260, 4) +#endif +#ifndef OVERRIDE_TABLE_64_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 261, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fanotify_mark +TRACE_SYSCALL_TABLE(fanotify_mark, fanotify_mark, 263, 5) +#endif +#ifndef OVERRIDE_TABLE_64_name_to_handle_at +TRACE_SYSCALL_TABLE(name_to_handle_at, name_to_handle_at, 264, 5) +#endif +#ifndef OVERRIDE_TABLE_64_open_by_handle_at +TRACE_SYSCALL_TABLE(open_by_handle_at, open_by_handle_at, 265, 3) +#endif +#ifndef OVERRIDE_TABLE_64_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 266, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 269, 4) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_readv +TRACE_SYSCALL_TABLE(process_vm_readv, process_vm_readv, 270, 6) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_writev +TRACE_SYSCALL_TABLE(process_vm_writev, process_vm_writev, 271, 6) +#endif +#ifndef OVERRIDE_TABLE_64_finit_module +TRACE_SYSCALL_TABLE(finit_module, finit_module, 273, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setattr +TRACE_SYSCALL_TABLE(sched_setattr, sched_setattr, 274, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getattr +TRACE_SYSCALL_TABLE(sched_getattr, sched_getattr, 275, 4) +#endif +#ifndef OVERRIDE_TABLE_64_renameat2 +TRACE_SYSCALL_TABLE(renameat2, renameat2, 276, 5) +#endif +#ifndef OVERRIDE_TABLE_64_seccomp +TRACE_SYSCALL_TABLE(seccomp, seccomp, 277, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getrandom +TRACE_SYSCALL_TABLE(getrandom, getrandom, 278, 3) +#endif +#ifndef OVERRIDE_TABLE_64_memfd_create +TRACE_SYSCALL_TABLE(memfd_create, memfd_create, 279, 2) +#endif +#ifndef OVERRIDE_TABLE_64_execveat +TRACE_SYSCALL_TABLE(execveat, execveat, 281, 5) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers_override.h new file mode 100644 index 000000000000..07929729bc43 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/arm-64-syscalls-4.4.0_pointers_override.h @@ -0,0 +1,9 @@ +/* + * this is a place-holder for arm64 integer syscall definition override. + */ +#ifndef CREATE_SYSCALL_TABLE + +#else +#define OVERRIDE_TABLE_64_clone +TRACE_SYSCALL_TABLE(clone, clone, 220, 5) +#endif diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_integers.h new file mode 100644 index 000000000000..fa1657d5844c --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_integers.h @@ -0,0 +1,11 @@ +#ifdef CONFIG_X86_64 +#include "x86-32-syscalls-3.1.0-rc6_integers.h" +#endif + +#ifdef CONFIG_ARM64 +#include "arm-32-syscalls-3.4.25_integers.h" +#endif + +#ifdef CONFIG_PPC64 +#include "powerpc-32-syscalls-3.0.34_integers.h" +#endif diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_pointers.h new file mode 100644 index 000000000000..4929da9f00a6 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/compat_syscalls_pointers.h @@ -0,0 +1,11 @@ +#ifdef CONFIG_X86_64 +#include "x86-32-syscalls-3.1.0-rc6_pointers.h" +#endif + +#ifdef CONFIG_ARM64 +#include "arm-32-syscalls-3.4.25_pointers.h" +#endif + +#ifdef CONFIG_PPC64 +#include "powerpc-32-syscalls-3.0.34_pointers.h" +#endif diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers.h new file mode 100644 index 000000000000..2c01d003b7d2 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers.h @@ -0,0 +1,1145 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "mips-32-syscalls-3.13.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sgetmask) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT(sgetmask, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_32_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_32_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_32_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_ssetmask +SC_LTTNG_TRACEPOINT_EVENT(ssetmask, + TP_PROTO(sc_exit(long ret,) int newmask), + TP_ARGS(sc_exit(ret,) newmask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, newmask, newmask))) +) +#endif +#ifndef OVERRIDE_32_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_32_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_32_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_32_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_set_thread_area +SC_LTTNG_TRACEPOINT_EVENT(set_thread_area, + TP_PROTO(sc_exit(long ret,) unsigned long addr), + TP_ARGS(sc_exit(ret,) addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr))) +) +#endif +#ifndef OVERRIDE_32_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_32_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_32_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_32_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_32_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_32_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_32_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_32_ftruncate64 +SC_LTTNG_TRACEPOINT_EVENT(ftruncate64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, loff_t length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(loff_t, length, length))) +) +#endif +#ifndef OVERRIDE_32_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_32_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_32_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_32_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_32_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_32_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_cacheflush +SC_LTTNG_TRACEPOINT_EVENT(cacheflush, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long bytes, unsigned int cache), + TP_ARGS(sc_exit(ret,) addr, bytes, cache), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, bytes, bytes)) sc_inout(ctf_integer(unsigned int, cache, cache))) +) +#endif +#ifndef OVERRIDE_32_sysmips +SC_LTTNG_TRACEPOINT_EVENT(sysmips, + TP_PROTO(sc_exit(long ret,) long cmd, long arg1, long arg2), + TP_ARGS(sc_exit(ret,) cmd, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(long, cmd, cmd)) sc_inout(ctf_integer(long, arg1, arg1)) sc_inout(ctf_integer(long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_32_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_32_fcntl64 +SC_LTTNG_TRACEPOINT_EVENT(fcntl64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_readahead +SC_LTTNG_TRACEPOINT_EVENT(readahead, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, size_t count), + TP_ARGS(sc_exit(ret,) fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_32_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_32_fadvise64_64 +SC_LTTNG_TRACEPOINT_EVENT(fadvise64_64, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t len, int advice), + TP_ARGS(sc_exit(ret,) fd, offset, len, advice), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(loff_t, offset, offset)) sc_inout(ctf_integer(loff_t, len, len)) sc_inout(ctf_integer(int, advice, advice))) +) +#endif +#ifndef OVERRIDE_32_sync_file_range +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t nbytes, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, offset, nbytes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, nbytes, nbytes)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fallocate +SC_LTTNG_TRACEPOINT_EVENT(fallocate, + TP_PROTO(sc_exit(long ret,) int fd, int mode, loff_t offset, loff_t len), + TP_ARGS(sc_exit(ret,) fd, mode, offset, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_32_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mips_mmap +SC_LTTNG_TRACEPOINT_EVENT(mips_mmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, off_t offset), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, offset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(off_t, offset, offset))) +) +#endif +#ifndef OVERRIDE_32_mips_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mips_mmap2, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(unsigned long, pgoff, pgoff))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-32-syscalls-3.13.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 4020, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 4024, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 4029, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 4036, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 4047, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 4049, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 4050, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 4064, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 4065, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 4066, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(syscalls_noargs, sgetmask, 4068, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 4111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 4157, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 4162, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 4222, 0) +#endif +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 4253, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 4284, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 4020, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 4024, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(pause, pause, 4029, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(sync, sync, 4036, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 4047, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 4049, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 4050, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 4064, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 4065, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 4066, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(sgetmask, sgetmask, 4068, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 4111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 4157, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 4162, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 4222, 0) +#endif +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 4253, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 4284, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_exit +TRACE_SYSCALL_TABLE(exit, exit, 4001, 1) +#endif +#ifndef OVERRIDE_TABLE_32_close +TRACE_SYSCALL_TABLE(close, close, 4006, 1) +#endif +#ifndef OVERRIDE_TABLE_32_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 4019, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 4023, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 4026, 4) +#endif +#ifndef OVERRIDE_TABLE_32_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 4027, 1) +#endif +#ifndef OVERRIDE_TABLE_32_nice +TRACE_SYSCALL_TABLE(nice, nice, 4034, 1) +#endif +#ifndef OVERRIDE_TABLE_32_kill +TRACE_SYSCALL_TABLE(kill, kill, 4037, 2) +#endif +#ifndef OVERRIDE_TABLE_32_dup +TRACE_SYSCALL_TABLE(dup, dup, 4041, 1) +#endif +#ifndef OVERRIDE_TABLE_32_brk +TRACE_SYSCALL_TABLE(brk, brk, 4045, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 4046, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 4054, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 4055, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 4057, 2) +#endif +#ifndef OVERRIDE_TABLE_32_umask +TRACE_SYSCALL_TABLE(umask, umask, 4060, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 4063, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ssetmask +TRACE_SYSCALL_TABLE(ssetmask, ssetmask, 4069, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 4070, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 4071, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mips_mmap +TRACE_SYSCALL_TABLE(mips_mmap, mips_mmap, 4090, 6) +#endif +#ifndef OVERRIDE_TABLE_32_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 4091, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 4093, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 4094, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 4095, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 4096, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 4097, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 4118, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 4125, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 4132, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 4133, 1) +#endif +#ifndef OVERRIDE_TABLE_32_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 4134, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 4135, 3) +#endif +#ifndef OVERRIDE_TABLE_32_personality +TRACE_SYSCALL_TABLE(personality, personality, 4136, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 4138, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 4139, 1) +#endif +#ifndef OVERRIDE_TABLE_32_flock +TRACE_SYSCALL_TABLE(flock, flock, 4143, 2) +#endif +#ifndef OVERRIDE_TABLE_32_msync +TRACE_SYSCALL_TABLE(msync, msync, 4144, 3) +#endif +#ifndef OVERRIDE_TABLE_32_cacheflush +TRACE_SYSCALL_TABLE(cacheflush, cacheflush, 4147, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysmips +TRACE_SYSCALL_TABLE(sysmips, sysmips, 4149, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 4151, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 4152, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 4154, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 4155, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 4156, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 4161, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 4163, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 4164, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 4167, 5) +#endif +#ifndef OVERRIDE_TABLE_32_listen +TRACE_SYSCALL_TABLE(listen, listen, 4174, 2) +#endif +#ifndef OVERRIDE_TABLE_32_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 4182, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socket +TRACE_SYSCALL_TABLE(socket, socket, 4183, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 4185, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 4190, 3) +#endif +#ifndef OVERRIDE_TABLE_32_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 4192, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mips_mmap2 +TRACE_SYSCALL_TABLE(mips_mmap2, mips_mmap2, 4210, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate64 +TRACE_SYSCALL_TABLE(ftruncate64, ftruncate64, 4212, 2) +#endif +#ifndef OVERRIDE_TABLE_32_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 4218, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl64 +TRACE_SYSCALL_TABLE(fcntl64, fcntl64, 4220, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readahead +TRACE_SYSCALL_TABLE(readahead, readahead, 4223, 3) +#endif +#ifndef OVERRIDE_TABLE_32_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 4236, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 4242, 1) +#endif +#ifndef OVERRIDE_TABLE_32_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 4246, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 4248, 1) +#endif +#ifndef OVERRIDE_TABLE_32_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 4251, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fadvise64_64 +TRACE_SYSCALL_TABLE(fadvise64_64, fadvise64_64, 4254, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 4260, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 4261, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 4266, 3) +#endif +#ifndef OVERRIDE_TABLE_32_set_thread_area +TRACE_SYSCALL_TABLE(set_thread_area, set_thread_area, 4283, 1) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 4286, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 4303, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sync_file_range +TRACE_SYSCALL_TABLE(sync_file_range, sync_file_range, 4305, 4) +#endif +#ifndef OVERRIDE_TABLE_32_tee +TRACE_SYSCALL_TABLE(tee, tee, 4306, 4) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 4314, 3) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 4315, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 4319, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fallocate +TRACE_SYSCALL_TABLE(fallocate, fallocate, 4320, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 4321, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 4325, 2) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 4326, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 4327, 3) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 4329, 1) +#endif +#ifndef OVERRIDE_TABLE_32_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 4342, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setns +TRACE_SYSCALL_TABLE(setns, setns, 4344, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers_override.h new file mode 100644 index 000000000000..49b485bb560a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_integers_override.h @@ -0,0 +1,3 @@ +/* + * this is a place-holder for MIPS integer syscall definition override. + */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers.h new file mode 100644 index 000000000000..33d7d74af917 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers.h @@ -0,0 +1,1824 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "mips-32-syscalls-3.13.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_32_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_time +SC_LTTNG_TRACEPOINT_EVENT(time, + TP_PROTO(sc_exit(long ret,) time_t * tloc), + TP_ARGS(sc_exit(ret,) tloc), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(time_t *, tloc, tloc))) +) +#endif +#ifndef OVERRIDE_32_oldumount +SC_LTTNG_TRACEPOINT_EVENT(oldumount, + TP_PROTO(sc_exit(long ret,) char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_stime +SC_LTTNG_TRACEPOINT_EVENT(stime, + TP_PROTO(sc_exit(long ret,) time_t * tptr), + TP_ARGS(sc_exit(ret,) tptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(time_t *, tptr, tptr))) +) +#endif +#ifndef OVERRIDE_32_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_32_olduname +SC_LTTNG_TRACEPOINT_EVENT(olduname, + TP_PROTO(sc_exit(long ret,) struct oldold_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct oldold_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * uset), + TP_ARGS(sc_exit(ret,) uset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(sigset_t *, uset, uset))) +) +#endif +#ifndef OVERRIDE_32_sigpending +SC_LTTNG_TRACEPOINT_EVENT(sigpending, + TP_PROTO(sc_exit(long ret,) old_sigset_t * set), + TP_ARGS(sc_exit(ret,) set), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_sigset_t *, set, set))) +) +#endif +#ifndef OVERRIDE_32_uselib +SC_LTTNG_TRACEPOINT_EVENT(uselib, + TP_PROTO(sc_exit(long ret,) const char * library), + TP_ARGS(sc_exit(ret,) library), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(const char *, library, library))) +) +#endif +#ifndef OVERRIDE_32_uname +SC_LTTNG_TRACEPOINT_EVENT(uname, + TP_PROTO(sc_exit(long ret,) struct old_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct old_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_32_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_32_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_32_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_32_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_32_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_32_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_32_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_socketcall +SC_LTTNG_TRACEPOINT_EVENT(socketcall, + TP_PROTO(sc_exit(long ret,) int call, unsigned long * args), + TP_ARGS(sc_exit(ret,) call, args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, call, call)) sc_inout(ctf_integer(unsigned long *, args, args))) +) +#endif +#ifndef OVERRIDE_32_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_32_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_32_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * uset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, uset, uset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_32_sigaltstack +SC_LTTNG_TRACEPOINT_EVENT(sigaltstack, + TP_PROTO(sc_exit(long ret,) const stack_t * uss, stack_t * uoss), + TP_ARGS(sc_exit(ret,) uss, uoss), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const stack_t *, uss, uss)) sc_inout(ctf_integer(stack_t *, uoss, uoss))) +) +#endif +#ifndef OVERRIDE_32_truncate64 +SC_LTTNG_TRACEPOINT_EVENT(truncate64, + TP_PROTO(sc_exit(long ret,) const char * path, loff_t length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(path, path)) sc_inout(ctf_integer(loff_t, length, length))) +) +#endif +#ifndef OVERRIDE_32_stat64 +SC_LTTNG_TRACEPOINT_EVENT(stat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_lstat64 +SC_LTTNG_TRACEPOINT_EVENT(lstat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat64 +SC_LTTNG_TRACEPOINT_EVENT(fstat64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_32_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_32_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_32_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_32_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_waitpid +SC_LTTNG_TRACEPOINT_EVENT(waitpid, + TP_PROTO(sc_exit(long ret,) pid_t pid, int * stat_addr, int options), + TP_ARGS(sc_exit(ret,) pid, stat_addr, options), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(int *, stat_addr, stat_addr)) sc_inout(ctf_integer(int, options, options))) +) +#endif +#ifndef OVERRIDE_32_execve +SC_LTTNG_TRACEPOINT_EVENT(execve, + TP_PROTO(sc_exit(long ret,) const char * filename, const char *const * argv, const char *const * envp), + TP_ARGS(sc_exit(ret,) filename, argv, envp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(const char *const *, argv, argv)) sc_inout(ctf_integer(const char *const *, envp, envp))) +) +#endif +#ifndef OVERRIDE_32_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_sigaction +SC_LTTNG_TRACEPOINT_EVENT(sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact), + TP_ARGS(sc_exit(ret,) sig, act, oact), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(const struct sigaction *, act, act)) sc_inout(ctf_integer(struct sigaction *, oact, oact))) +) +#endif +#ifndef OVERRIDE_32_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_old_readdir +SC_LTTNG_TRACEPOINT_EVENT(old_readdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct old_linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct old_linux_dirent *, dirent, dirent)) sc_inout(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_32_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, old_sigset_t * nset, old_sigset_t * oset), + TP_ARGS(sc_exit(ret,) how, nset, oset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(old_sigset_t *, nset, nset)) sc_inout(ctf_integer(old_sigset_t *, oset, oset))) +) +#endif +#ifndef OVERRIDE_32_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_cachectl +SC_LTTNG_TRACEPOINT_EVENT(cachectl, + TP_PROTO(sc_exit(long ret,) char * addr, int nbytes, int op), + TP_ARGS(sc_exit(ret,) addr, nbytes, op), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(char *, addr, addr)) sc_inout(ctf_integer(int, nbytes, nbytes)) sc_inout(ctf_integer(int, op, op))) +) +#endif +#ifndef OVERRIDE_32_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_32_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruidp, uid_t * euidp, uid_t * suidp), + TP_ARGS(sc_exit(ret,) ruidp, euidp, suidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruidp, ruidp)) sc_out(ctf_integer(uid_t *, euidp, euidp)) sc_out(ctf_integer(uid_t *, suidp, suidp))) +) +#endif +#ifndef OVERRIDE_32_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(int, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_32_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgidp, gid_t * egidp, gid_t * sgidp), + TP_ARGS(sc_exit(ret,) rgidp, egidp, sgidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgidp, rgidp)) sc_out(ctf_integer(gid_t *, egidp, egidp)) sc_out(ctf_integer(gid_t *, sgidp, sgidp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_32_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_32_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_32_statfs64 +SC_LTTNG_TRACEPOINT_EVENT(statfs64, + TP_PROTO(sc_exit(long ret,) const char * pathname, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) pathname, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(pathname, pathname)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs64 +SC_LTTNG_TRACEPOINT_EVENT(fstatfs64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) fd, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_32_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_32_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_32_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_32_open_by_handle_at +SC_LTTNG_TRACEPOINT_EVENT(open_by_handle_at, + TP_PROTO(sc_exit(long ret,) int mountdirfd, struct file_handle * handle, int flags), + TP_ARGS(sc_exit(ret,) mountdirfd, handle, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mountdirfd, mountdirfd)) sc_in(ctf_integer(struct file_handle *, handle, handle)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_send +SC_LTTNG_TRACEPOINT_EVENT(send, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, buff, buff)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_pread64 +SC_LTTNG_TRACEPOINT_EVENT(pread64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_32_pwrite64 +SC_LTTNG_TRACEPOINT_EVENT(pwrite64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(sendfile, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, off_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, out_fd, out_fd)) sc_inout(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(off_t *, offset, offset)) sc_inout(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_32_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_32_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_fstatat64 +SC_LTTNG_TRACEPOINT_EVENT(fstatat64, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat64 * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf)) sc_inout(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_32_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned long, offset_high, offset_high)) sc_inout(ctf_integer(unsigned long, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_32_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_32_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_name_to_handle_at +SC_LTTNG_TRACEPOINT_EVENT(name_to_handle_at, + TP_PROTO(sc_exit(long ret,) int dfd, const char * name, struct file_handle * handle, int * mnt_id, int flag), + TP_ARGS(sc_exit(ret,) dfd, name, handle, mnt_id, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(name, name)) sc_inout(ctf_integer(struct file_handle *, handle, handle)) sc_out(ctf_integer(int *, mnt_id, mnt_id)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_ipc +SC_LTTNG_TRACEPOINT_EVENT(ipc, + TP_PROTO(sc_exit(long ret,) unsigned int call, int first, unsigned long second, unsigned long third, void * ptr, long fifth), + TP_ARGS(sc_exit(ret,) call, first, second, third, ptr, fifth), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, call, call)) sc_inout(ctf_integer(int, first, first)) sc_inout(ctf_integer(unsigned long, second, second)) sc_inout(ctf_integer(unsigned long, third, third)) sc_inout(ctf_integer(void *, ptr, ptr)) sc_inout(ctf_integer(long, fifth, fifth))) +) +#endif +#ifndef OVERRIDE_32_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_32_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-32-syscalls-3.13.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_32_read +TRACE_SYSCALL_TABLE(read, read, 4003, 3) +#endif +#ifndef OVERRIDE_TABLE_32_write +TRACE_SYSCALL_TABLE(write, write, 4004, 3) +#endif +#ifndef OVERRIDE_TABLE_32_open +TRACE_SYSCALL_TABLE(open, open, 4005, 3) +#endif +#ifndef OVERRIDE_TABLE_32_waitpid +TRACE_SYSCALL_TABLE(waitpid, waitpid, 4007, 3) +#endif +#ifndef OVERRIDE_TABLE_32_creat +TRACE_SYSCALL_TABLE(creat, creat, 4008, 2) +#endif +#ifndef OVERRIDE_TABLE_32_link +TRACE_SYSCALL_TABLE(link, link, 4009, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 4010, 1) +#endif +#ifndef OVERRIDE_TABLE_32_execve +TRACE_SYSCALL_TABLE(execve, execve, 4011, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 4012, 1) +#endif +#ifndef OVERRIDE_TABLE_32_time +TRACE_SYSCALL_TABLE(time, time, 4013, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 4014, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 4015, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 4016, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mount +TRACE_SYSCALL_TABLE(mount, mount, 4021, 5) +#endif +#ifndef OVERRIDE_TABLE_32_oldumount +TRACE_SYSCALL_TABLE(oldumount, oldumount, 4022, 1) +#endif +#ifndef OVERRIDE_TABLE_32_stime +TRACE_SYSCALL_TABLE(stime, stime, 4025, 1) +#endif +#ifndef OVERRIDE_TABLE_32_utime +TRACE_SYSCALL_TABLE(utime, utime, 4030, 2) +#endif +#ifndef OVERRIDE_TABLE_32_access +TRACE_SYSCALL_TABLE(access, access, 4033, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rename +TRACE_SYSCALL_TABLE(rename, rename, 4038, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 4039, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 4040, 1) +#endif +#ifndef OVERRIDE_TABLE_32_times +TRACE_SYSCALL_TABLE(times, times, 4043, 1) +#endif +#ifndef OVERRIDE_TABLE_32_umount +TRACE_SYSCALL_TABLE(umount, umount, 4052, 2) +#endif +#ifndef OVERRIDE_TABLE_32_olduname +TRACE_SYSCALL_TABLE(olduname, olduname, 4059, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 4061, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 4062, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigaction +TRACE_SYSCALL_TABLE(sigaction, sigaction, 4067, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sigsuspend +TRACE_SYSCALL_TABLE(sigsuspend, sigsuspend, 4072, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigpending +TRACE_SYSCALL_TABLE(sigpending, sigpending, 4073, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 4074, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 4075, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 4076, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 4077, 2) +#endif +#ifndef OVERRIDE_TABLE_32_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 4078, 2) +#endif +#ifndef OVERRIDE_TABLE_32_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 4079, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 4080, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 4081, 2) +#endif +#ifndef OVERRIDE_TABLE_32_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 4083, 2) +#endif +#ifndef OVERRIDE_TABLE_32_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 4085, 3) +#endif +#ifndef OVERRIDE_TABLE_32_uselib +TRACE_SYSCALL_TABLE(uselib, uselib, 4086, 1) +#endif +#ifndef OVERRIDE_TABLE_32_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 4088, 4) +#endif +#ifndef OVERRIDE_TABLE_32_old_readdir +TRACE_SYSCALL_TABLE(old_readdir, old_readdir, 4089, 3) +#endif +#ifndef OVERRIDE_TABLE_32_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 4092, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 4099, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 4100, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socketcall +TRACE_SYSCALL_TABLE(socketcall, socketcall, 4102, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 4103, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 4104, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 4105, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 4106, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 4107, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 4108, 2) +#endif +#ifndef OVERRIDE_TABLE_32_uname +TRACE_SYSCALL_TABLE(uname, uname, 4109, 1) +#endif +#ifndef OVERRIDE_TABLE_32_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 4114, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 4116, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ipc +TRACE_SYSCALL_TABLE(ipc, ipc, 4117, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 4121, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 4122, 1) +#endif +#ifndef OVERRIDE_TABLE_32_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 4124, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigprocmask +TRACE_SYSCALL_TABLE(sigprocmask, sigprocmask, 4126, 3) +#endif +#ifndef OVERRIDE_TABLE_32_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 4128, 3) +#endif +#ifndef OVERRIDE_TABLE_32_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 4129, 2) +#endif +#ifndef OVERRIDE_TABLE_32_llseek +TRACE_SYSCALL_TABLE(llseek, llseek, 4140, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 4141, 3) +#endif +#ifndef OVERRIDE_TABLE_32_select +TRACE_SYSCALL_TABLE(select, select, 4142, 5) +#endif +#ifndef OVERRIDE_TABLE_32_readv +TRACE_SYSCALL_TABLE(readv, readv, 4145, 3) +#endif +#ifndef OVERRIDE_TABLE_32_writev +TRACE_SYSCALL_TABLE(writev, writev, 4146, 3) +#endif +#ifndef OVERRIDE_TABLE_32_cachectl +TRACE_SYSCALL_TABLE(cachectl, cachectl, 4148, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 4153, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 4158, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 4159, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 4160, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 4165, 2) +#endif +#ifndef OVERRIDE_TABLE_32_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 4166, 2) +#endif +#ifndef OVERRIDE_TABLE_32_accept +TRACE_SYSCALL_TABLE(accept, accept, 4168, 3) +#endif +#ifndef OVERRIDE_TABLE_32_bind +TRACE_SYSCALL_TABLE(bind, bind, 4169, 3) +#endif +#ifndef OVERRIDE_TABLE_32_connect +TRACE_SYSCALL_TABLE(connect, connect, 4170, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 4171, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 4172, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 4173, 5) +#endif +#ifndef OVERRIDE_TABLE_32_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 4176, 6) +#endif +#ifndef OVERRIDE_TABLE_32_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 4177, 3) +#endif +#ifndef OVERRIDE_TABLE_32_send +TRACE_SYSCALL_TABLE(send, send, 4178, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 4179, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 4180, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 4181, 5) +#endif +#ifndef OVERRIDE_TABLE_32_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 4184, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 4186, 3) +#endif +#ifndef OVERRIDE_TABLE_32_poll +TRACE_SYSCALL_TABLE(poll, poll, 4188, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 4191, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 4194, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 4195, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 4196, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 4197, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 4198, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 4199, 2) +#endif +#ifndef OVERRIDE_TABLE_32_pread64 +TRACE_SYSCALL_TABLE(pread64, pread64, 4200, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pwrite64 +TRACE_SYSCALL_TABLE(pwrite64, pwrite64, 4201, 4) +#endif +#ifndef OVERRIDE_TABLE_32_chown +TRACE_SYSCALL_TABLE(chown, chown, 4202, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 4203, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigaltstack +TRACE_SYSCALL_TABLE(sigaltstack, sigaltstack, 4206, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile +TRACE_SYSCALL_TABLE(sendfile, sendfile, 4207, 4) +#endif +#ifndef OVERRIDE_TABLE_32_truncate64 +TRACE_SYSCALL_TABLE(truncate64, truncate64, 4211, 2) +#endif +#ifndef OVERRIDE_TABLE_32_stat64 +TRACE_SYSCALL_TABLE(stat64, stat64, 4213, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat64 +TRACE_SYSCALL_TABLE(lstat64, lstat64, 4214, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstat64 +TRACE_SYSCALL_TABLE(fstat64, fstat64, 4215, 2) +#endif +#ifndef OVERRIDE_TABLE_32_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 4216, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 4217, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 4219, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 4224, 5) +#endif +#ifndef OVERRIDE_TABLE_32_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 4225, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 4226, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 4227, 4) +#endif +#ifndef OVERRIDE_TABLE_32_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 4228, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 4229, 4) +#endif +#ifndef OVERRIDE_TABLE_32_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 4230, 3) +#endif +#ifndef OVERRIDE_TABLE_32_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 4231, 3) +#endif +#ifndef OVERRIDE_TABLE_32_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 4232, 3) +#endif +#ifndef OVERRIDE_TABLE_32_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 4233, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 4234, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 4235, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 4237, 4) +#endif +#ifndef OVERRIDE_TABLE_32_futex +TRACE_SYSCALL_TABLE(futex, futex, 4238, 6) +#endif +#ifndef OVERRIDE_TABLE_32_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 4241, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 4243, 5) +#endif +#ifndef OVERRIDE_TABLE_32_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 4244, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 4245, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 4249, 4) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 4250, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 4252, 1) +#endif +#ifndef OVERRIDE_TABLE_32_statfs64 +TRACE_SYSCALL_TABLE(statfs64, statfs64, 4255, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs64 +TRACE_SYSCALL_TABLE(fstatfs64, fstatfs64, 4256, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 4257, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 4258, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 4259, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 4262, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 4263, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 4264, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 4265, 4) +#endif +#ifndef OVERRIDE_TABLE_32_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 4267, 2) +#endif +#ifndef OVERRIDE_TABLE_32_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 4278, 5) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 4285, 3) +#endif +#ifndef OVERRIDE_TABLE_32_openat +TRACE_SYSCALL_TABLE(openat, openat, 4288, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 4289, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 4290, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 4291, 5) +#endif +#ifndef OVERRIDE_TABLE_32_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 4292, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatat64 +TRACE_SYSCALL_TABLE(fstatat64, fstatat64, 4293, 4) +#endif +#ifndef OVERRIDE_TABLE_32_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 4294, 3) +#endif +#ifndef OVERRIDE_TABLE_32_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 4295, 4) +#endif +#ifndef OVERRIDE_TABLE_32_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 4296, 5) +#endif +#ifndef OVERRIDE_TABLE_32_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 4297, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 4298, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 4299, 3) +#endif +#ifndef OVERRIDE_TABLE_32_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 4300, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 4301, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 4302, 5) +#endif +#ifndef OVERRIDE_TABLE_32_splice +TRACE_SYSCALL_TABLE(splice, splice, 4304, 6) +#endif +#ifndef OVERRIDE_TABLE_32_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 4307, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 4309, 2) +#endif +#ifndef OVERRIDE_TABLE_32_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 4310, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 4312, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 4313, 6) +#endif +#ifndef OVERRIDE_TABLE_32_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 4316, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 4317, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 4322, 2) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 4323, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 4324, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 4328, 2) +#endif +#ifndef OVERRIDE_TABLE_32_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 4330, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 4331, 5) +#endif +#ifndef OVERRIDE_TABLE_32_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 4332, 4) +#endif +#ifndef OVERRIDE_TABLE_32_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 4333, 5) +#endif +#ifndef OVERRIDE_TABLE_32_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 4334, 4) +#endif +#ifndef OVERRIDE_TABLE_32_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 4335, 5) +#endif +#ifndef OVERRIDE_TABLE_32_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 4338, 4) +#endif +#ifndef OVERRIDE_TABLE_32_name_to_handle_at +TRACE_SYSCALL_TABLE(name_to_handle_at, name_to_handle_at, 4339, 5) +#endif +#ifndef OVERRIDE_TABLE_32_open_by_handle_at +TRACE_SYSCALL_TABLE(open_by_handle_at, open_by_handle_at, 4340, 3) +#endif +#ifndef OVERRIDE_TABLE_32_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 4341, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 4343, 4) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers_override.h new file mode 100644 index 000000000000..bcf5662f3a90 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.13.0_pointers_override.h @@ -0,0 +1,8 @@ +#ifndef CREATE_SYSCALL_TABLE + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_clone +TRACE_SYSCALL_TABLE(clone, clone, 4120, 0) + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers.h new file mode 100644 index 000000000000..430d4cf5e233 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers.h @@ -0,0 +1,1109 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "mips-32-syscalls-3.18.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_32_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_32_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_32_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_32_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_32_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_32_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_set_thread_area +SC_LTTNG_TRACEPOINT_EVENT(set_thread_area, + TP_PROTO(sc_exit(long ret,) unsigned long addr), + TP_ARGS(sc_exit(ret,) addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr))) +) +#endif +#ifndef OVERRIDE_32_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_32_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_32_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_32_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_32_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_32_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_32_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_32_ftruncate64 +SC_LTTNG_TRACEPOINT_EVENT(ftruncate64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, loff_t length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(loff_t, length, length))) +) +#endif +#ifndef OVERRIDE_32_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_32_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_32_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_32_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_32_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_32_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_cacheflush +SC_LTTNG_TRACEPOINT_EVENT(cacheflush, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long bytes, unsigned int cache), + TP_ARGS(sc_exit(ret,) addr, bytes, cache), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, bytes, bytes)) sc_inout(ctf_integer(unsigned int, cache, cache))) +) +#endif +#ifndef OVERRIDE_32_sysmips +SC_LTTNG_TRACEPOINT_EVENT(sysmips, + TP_PROTO(sc_exit(long ret,) long cmd, long arg1, long arg2), + TP_ARGS(sc_exit(ret,) cmd, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(long, cmd, cmd)) sc_inout(ctf_integer(long, arg1, arg1)) sc_inout(ctf_integer(long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_32_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_32_fcntl64 +SC_LTTNG_TRACEPOINT_EVENT(fcntl64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_readahead +SC_LTTNG_TRACEPOINT_EVENT(readahead, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, size_t count), + TP_ARGS(sc_exit(ret,) fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_32_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_32_fadvise64_64 +SC_LTTNG_TRACEPOINT_EVENT(fadvise64_64, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t len, int advice), + TP_ARGS(sc_exit(ret,) fd, offset, len, advice), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(loff_t, offset, offset)) sc_inout(ctf_integer(loff_t, len, len)) sc_inout(ctf_integer(int, advice, advice))) +) +#endif +#ifndef OVERRIDE_32_sync_file_range +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t nbytes, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, offset, nbytes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, nbytes, nbytes)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fallocate +SC_LTTNG_TRACEPOINT_EVENT(fallocate, + TP_PROTO(sc_exit(long ret,) int fd, int mode, loff_t offset, loff_t len), + TP_ARGS(sc_exit(ret,) fd, mode, offset, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_32_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mmap +SC_LTTNG_TRACEPOINT_EVENT(mmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, off_t offset), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, offset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(off_t, offset, offset))) +) +#endif +#ifndef OVERRIDE_32_mips_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mips_mmap2, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(unsigned long, pgoff, pgoff))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-32-syscalls-3.18.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 4020, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 4024, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 4029, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 4036, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 4047, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 4049, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 4050, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 4064, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 4065, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 4066, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 4111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 4157, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 4162, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 4222, 0) +#endif +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 4253, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 4284, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 4020, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 4024, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(pause, pause, 4029, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(sync, sync, 4036, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 4047, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 4049, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 4050, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 4064, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 4065, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 4066, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 4111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 4157, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 4162, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 4222, 0) +#endif +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 4253, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 4284, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_exit +TRACE_SYSCALL_TABLE(exit, exit, 4001, 1) +#endif +#ifndef OVERRIDE_TABLE_32_close +TRACE_SYSCALL_TABLE(close, close, 4006, 1) +#endif +#ifndef OVERRIDE_TABLE_32_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 4019, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 4023, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 4026, 4) +#endif +#ifndef OVERRIDE_TABLE_32_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 4027, 1) +#endif +#ifndef OVERRIDE_TABLE_32_nice +TRACE_SYSCALL_TABLE(nice, nice, 4034, 1) +#endif +#ifndef OVERRIDE_TABLE_32_kill +TRACE_SYSCALL_TABLE(kill, kill, 4037, 2) +#endif +#ifndef OVERRIDE_TABLE_32_dup +TRACE_SYSCALL_TABLE(dup, dup, 4041, 1) +#endif +#ifndef OVERRIDE_TABLE_32_brk +TRACE_SYSCALL_TABLE(brk, brk, 4045, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 4046, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 4054, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 4055, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 4057, 2) +#endif +#ifndef OVERRIDE_TABLE_32_umask +TRACE_SYSCALL_TABLE(umask, umask, 4060, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 4063, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 4070, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 4071, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 4090, 6) +#endif +#ifndef OVERRIDE_TABLE_32_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 4091, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 4093, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 4094, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 4095, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 4096, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 4097, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 4118, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 4125, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 4132, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 4133, 1) +#endif +#ifndef OVERRIDE_TABLE_32_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 4134, 2) +#endif +#ifndef OVERRIDE_TABLE_32_personality +TRACE_SYSCALL_TABLE(personality, personality, 4136, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 4138, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 4139, 1) +#endif +#ifndef OVERRIDE_TABLE_32_flock +TRACE_SYSCALL_TABLE(flock, flock, 4143, 2) +#endif +#ifndef OVERRIDE_TABLE_32_msync +TRACE_SYSCALL_TABLE(msync, msync, 4144, 3) +#endif +#ifndef OVERRIDE_TABLE_32_cacheflush +TRACE_SYSCALL_TABLE(cacheflush, cacheflush, 4147, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysmips +TRACE_SYSCALL_TABLE(sysmips, sysmips, 4149, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 4151, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 4152, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 4154, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 4155, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 4156, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 4161, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 4163, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 4164, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 4167, 5) +#endif +#ifndef OVERRIDE_TABLE_32_listen +TRACE_SYSCALL_TABLE(listen, listen, 4174, 2) +#endif +#ifndef OVERRIDE_TABLE_32_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 4182, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socket +TRACE_SYSCALL_TABLE(socket, socket, 4183, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 4185, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 4190, 3) +#endif +#ifndef OVERRIDE_TABLE_32_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 4192, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mips_mmap2 +TRACE_SYSCALL_TABLE(mips_mmap2, mips_mmap2, 4210, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate64 +TRACE_SYSCALL_TABLE(ftruncate64, ftruncate64, 4212, 2) +#endif +#ifndef OVERRIDE_TABLE_32_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 4218, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl64 +TRACE_SYSCALL_TABLE(fcntl64, fcntl64, 4220, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readahead +TRACE_SYSCALL_TABLE(readahead, readahead, 4223, 3) +#endif +#ifndef OVERRIDE_TABLE_32_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 4236, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 4242, 1) +#endif +#ifndef OVERRIDE_TABLE_32_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 4246, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 4248, 1) +#endif +#ifndef OVERRIDE_TABLE_32_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 4251, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fadvise64_64 +TRACE_SYSCALL_TABLE(fadvise64_64, fadvise64_64, 4254, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 4260, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 4261, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 4266, 3) +#endif +#ifndef OVERRIDE_TABLE_32_set_thread_area +TRACE_SYSCALL_TABLE(set_thread_area, set_thread_area, 4283, 1) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 4286, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 4303, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sync_file_range +TRACE_SYSCALL_TABLE(sync_file_range, sync_file_range, 4305, 4) +#endif +#ifndef OVERRIDE_TABLE_32_tee +TRACE_SYSCALL_TABLE(tee, tee, 4306, 4) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 4314, 3) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 4315, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 4319, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fallocate +TRACE_SYSCALL_TABLE(fallocate, fallocate, 4320, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 4321, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 4325, 2) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 4326, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 4327, 3) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 4329, 1) +#endif +#ifndef OVERRIDE_TABLE_32_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 4342, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setns +TRACE_SYSCALL_TABLE(setns, setns, 4344, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers_override.h new file mode 100644 index 000000000000..49b485bb560a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_integers_override.h @@ -0,0 +1,3 @@ +/* + * this is a place-holder for MIPS integer syscall definition override. + */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers.h new file mode 100644 index 000000000000..118eadc69020 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers.h @@ -0,0 +1,1894 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "mips-32-syscalls-3.18.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_32_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_time +SC_LTTNG_TRACEPOINT_EVENT(time, + TP_PROTO(sc_exit(long ret,) time_t * tloc), + TP_ARGS(sc_exit(ret,) tloc), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(time_t *, tloc, tloc))) +) +#endif +#ifndef OVERRIDE_32_oldumount +SC_LTTNG_TRACEPOINT_EVENT(oldumount, + TP_PROTO(sc_exit(long ret,) char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_stime +SC_LTTNG_TRACEPOINT_EVENT(stime, + TP_PROTO(sc_exit(long ret,) time_t * tptr), + TP_ARGS(sc_exit(ret,) tptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(time_t *, tptr, tptr))) +) +#endif +#ifndef OVERRIDE_32_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_32_olduname +SC_LTTNG_TRACEPOINT_EVENT(olduname, + TP_PROTO(sc_exit(long ret,) struct oldold_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct oldold_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * uset), + TP_ARGS(sc_exit(ret,) uset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(sigset_t *, uset, uset))) +) +#endif +#ifndef OVERRIDE_32_sigpending +SC_LTTNG_TRACEPOINT_EVENT(sigpending, + TP_PROTO(sc_exit(long ret,) old_sigset_t * set), + TP_ARGS(sc_exit(ret,) set), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_sigset_t *, set, set))) +) +#endif +#ifndef OVERRIDE_32_uname +SC_LTTNG_TRACEPOINT_EVENT(uname, + TP_PROTO(sc_exit(long ret,) struct old_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct old_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_32_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_32_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_32_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_32_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_32_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_32_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_32_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_socketcall +SC_LTTNG_TRACEPOINT_EVENT(socketcall, + TP_PROTO(sc_exit(long ret,) int call, unsigned long * args), + TP_ARGS(sc_exit(ret,) call, args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, call, call)) sc_inout(ctf_integer(unsigned long *, args, args))) +) +#endif +#ifndef OVERRIDE_32_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_32_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_32_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * uset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, uset, uset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_32_sigaltstack +SC_LTTNG_TRACEPOINT_EVENT(sigaltstack, + TP_PROTO(sc_exit(long ret,) const stack_t * uss, stack_t * uoss), + TP_ARGS(sc_exit(ret,) uss, uoss), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const stack_t *, uss, uss)) sc_inout(ctf_integer(stack_t *, uoss, uoss))) +) +#endif +#ifndef OVERRIDE_32_truncate64 +SC_LTTNG_TRACEPOINT_EVENT(truncate64, + TP_PROTO(sc_exit(long ret,) const char * path, loff_t length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(path, path)) sc_inout(ctf_integer(loff_t, length, length))) +) +#endif +#ifndef OVERRIDE_32_stat64 +SC_LTTNG_TRACEPOINT_EVENT(stat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_lstat64 +SC_LTTNG_TRACEPOINT_EVENT(lstat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat64 +SC_LTTNG_TRACEPOINT_EVENT(fstat64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_32_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_32_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_32_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_32_memfd_create +SC_LTTNG_TRACEPOINT_EVENT(memfd_create, + TP_PROTO(sc_exit(long ret,) const char * uname, unsigned int flags), + TP_ARGS(sc_exit(ret,) uname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(uname, uname)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_waitpid +SC_LTTNG_TRACEPOINT_EVENT(waitpid, + TP_PROTO(sc_exit(long ret,) pid_t pid, int * stat_addr, int options), + TP_ARGS(sc_exit(ret,) pid, stat_addr, options), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(int *, stat_addr, stat_addr)) sc_inout(ctf_integer(int, options, options))) +) +#endif +#ifndef OVERRIDE_32_execve +SC_LTTNG_TRACEPOINT_EVENT(execve, + TP_PROTO(sc_exit(long ret,) const char * filename, const char *const * argv, const char *const * envp), + TP_ARGS(sc_exit(ret,) filename, argv, envp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(const char *const *, argv, argv)) sc_inout(ctf_integer(const char *const *, envp, envp))) +) +#endif +#ifndef OVERRIDE_32_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_sigaction +SC_LTTNG_TRACEPOINT_EVENT(sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact), + TP_ARGS(sc_exit(ret,) sig, act, oact), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(const struct sigaction *, act, act)) sc_inout(ctf_integer(struct sigaction *, oact, oact))) +) +#endif +#ifndef OVERRIDE_32_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_old_readdir +SC_LTTNG_TRACEPOINT_EVENT(old_readdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct old_linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct old_linux_dirent *, dirent, dirent)) sc_inout(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_32_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, old_sigset_t * nset, old_sigset_t * oset), + TP_ARGS(sc_exit(ret,) how, nset, oset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(old_sigset_t *, nset, nset)) sc_inout(ctf_integer(old_sigset_t *, oset, oset))) +) +#endif +#ifndef OVERRIDE_32_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_cachectl +SC_LTTNG_TRACEPOINT_EVENT(cachectl, + TP_PROTO(sc_exit(long ret,) char * addr, int nbytes, int op), + TP_ARGS(sc_exit(ret,) addr, nbytes, op), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(char *, addr, addr)) sc_inout(ctf_integer(int, nbytes, nbytes)) sc_inout(ctf_integer(int, op, op))) +) +#endif +#ifndef OVERRIDE_32_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_32_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruidp, uid_t * euidp, uid_t * suidp), + TP_ARGS(sc_exit(ret,) ruidp, euidp, suidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruidp, ruidp)) sc_out(ctf_integer(uid_t *, euidp, euidp)) sc_out(ctf_integer(uid_t *, suidp, suidp))) +) +#endif +#ifndef OVERRIDE_32_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(int, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_32_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgidp, gid_t * egidp, gid_t * sgidp), + TP_ARGS(sc_exit(ret,) rgidp, egidp, sgidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgidp, rgidp)) sc_out(ctf_integer(gid_t *, egidp, egidp)) sc_out(ctf_integer(gid_t *, sgidp, sgidp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_32_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_32_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_32_statfs64 +SC_LTTNG_TRACEPOINT_EVENT(statfs64, + TP_PROTO(sc_exit(long ret,) const char * pathname, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) pathname, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(pathname, pathname)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs64 +SC_LTTNG_TRACEPOINT_EVENT(fstatfs64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) fd, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_32_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_32_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_32_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_32_open_by_handle_at +SC_LTTNG_TRACEPOINT_EVENT(open_by_handle_at, + TP_PROTO(sc_exit(long ret,) int mountdirfd, struct file_handle * handle, int flags), + TP_ARGS(sc_exit(ret,) mountdirfd, handle, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mountdirfd, mountdirfd)) sc_in(ctf_integer(struct file_handle *, handle, handle)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_finit_module +SC_LTTNG_TRACEPOINT_EVENT(finit_module, + TP_PROTO(sc_exit(long ret,) int fd, const char * uargs, int flags), + TP_ARGS(sc_exit(ret,) fd, uargs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const char *, uargs, uargs)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setattr +SC_LTTNG_TRACEPOINT_EVENT(sched_setattr, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_attr * uattr, unsigned int flags), + TP_ARGS(sc_exit(ret,) pid, uattr, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(struct sched_attr *, uattr, uattr)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_seccomp +SC_LTTNG_TRACEPOINT_EVENT(seccomp, + TP_PROTO(sc_exit(long ret,) unsigned int op, unsigned int flags, const char * uargs), + TP_ARGS(sc_exit(ret,) op, flags, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, op, op)) sc_inout(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getrandom +SC_LTTNG_TRACEPOINT_EVENT(getrandom, + TP_PROTO(sc_exit(long ret,) char * buf, size_t count, unsigned int flags), + TP_ARGS(sc_exit(ret,) buf, count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(char *, buf, buf)) sc_inout(ctf_integer(size_t, count, count)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_recv +SC_LTTNG_TRACEPOINT_EVENT(recv, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, ubuf, ubuf)) sc_inout(ctf_integer(size_t, size, size)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_send +SC_LTTNG_TRACEPOINT_EVENT(send, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, buff, buff)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_pread64 +SC_LTTNG_TRACEPOINT_EVENT(pread64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_32_pwrite64 +SC_LTTNG_TRACEPOINT_EVENT(pwrite64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(sendfile, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, off_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, out_fd, out_fd)) sc_inout(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(off_t *, offset, offset)) sc_inout(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_32_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_32_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_fstatat64 +SC_LTTNG_TRACEPOINT_EVENT(fstatat64, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat64 * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf)) sc_inout(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_32_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getattr +SC_LTTNG_TRACEPOINT_EVENT(sched_getattr, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_attr * uattr, unsigned int size, unsigned int flags), + TP_ARGS(sc_exit(ret,) pid, uattr, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(struct sched_attr *, uattr, uattr)) sc_inout(ctf_integer(unsigned int, size, size)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned long, offset_high, offset_high)) sc_inout(ctf_integer(unsigned long, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_32_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_32_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_name_to_handle_at +SC_LTTNG_TRACEPOINT_EVENT(name_to_handle_at, + TP_PROTO(sc_exit(long ret,) int dfd, const char * name, struct file_handle * handle, int * mnt_id, int flag), + TP_ARGS(sc_exit(ret,) dfd, name, handle, mnt_id, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(name, name)) sc_inout(ctf_integer(struct file_handle *, handle, handle)) sc_out(ctf_integer(int *, mnt_id, mnt_id)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat2 +SC_LTTNG_TRACEPOINT_EVENT(renameat2, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, unsigned int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, olddfd, olddfd)) sc_inout(ctf_user_string(oldname, oldname)) sc_inout(ctf_integer(int, newdfd, newdfd)) sc_inout(ctf_user_string(newname, newname)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ipc +SC_LTTNG_TRACEPOINT_EVENT(ipc, + TP_PROTO(sc_exit(long ret,) unsigned int call, int first, unsigned long second, unsigned long third, void * ptr, long fifth), + TP_ARGS(sc_exit(ret,) call, first, second, third, ptr, fifth), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, call, call)) sc_inout(ctf_integer(int, first, first)) sc_inout(ctf_integer(unsigned long, second, second)) sc_inout(ctf_integer(unsigned long, third, third)) sc_inout(ctf_integer(void *, ptr, ptr)) sc_inout(ctf_integer(long, fifth, fifth))) +) +#endif +#ifndef OVERRIDE_32_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_32_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-32-syscalls-3.18.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_32_read +TRACE_SYSCALL_TABLE(read, read, 4003, 3) +#endif +#ifndef OVERRIDE_TABLE_32_write +TRACE_SYSCALL_TABLE(write, write, 4004, 3) +#endif +#ifndef OVERRIDE_TABLE_32_open +TRACE_SYSCALL_TABLE(open, open, 4005, 3) +#endif +#ifndef OVERRIDE_TABLE_32_waitpid +TRACE_SYSCALL_TABLE(waitpid, waitpid, 4007, 3) +#endif +#ifndef OVERRIDE_TABLE_32_creat +TRACE_SYSCALL_TABLE(creat, creat, 4008, 2) +#endif +#ifndef OVERRIDE_TABLE_32_link +TRACE_SYSCALL_TABLE(link, link, 4009, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 4010, 1) +#endif +#ifndef OVERRIDE_TABLE_32_execve +TRACE_SYSCALL_TABLE(execve, execve, 4011, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 4012, 1) +#endif +#ifndef OVERRIDE_TABLE_32_time +TRACE_SYSCALL_TABLE(time, time, 4013, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 4014, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 4015, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 4016, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mount +TRACE_SYSCALL_TABLE(mount, mount, 4021, 5) +#endif +#ifndef OVERRIDE_TABLE_32_oldumount +TRACE_SYSCALL_TABLE(oldumount, oldumount, 4022, 1) +#endif +#ifndef OVERRIDE_TABLE_32_stime +TRACE_SYSCALL_TABLE(stime, stime, 4025, 1) +#endif +#ifndef OVERRIDE_TABLE_32_utime +TRACE_SYSCALL_TABLE(utime, utime, 4030, 2) +#endif +#ifndef OVERRIDE_TABLE_32_access +TRACE_SYSCALL_TABLE(access, access, 4033, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rename +TRACE_SYSCALL_TABLE(rename, rename, 4038, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 4039, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 4040, 1) +#endif +#ifndef OVERRIDE_TABLE_32_times +TRACE_SYSCALL_TABLE(times, times, 4043, 1) +#endif +#ifndef OVERRIDE_TABLE_32_umount +TRACE_SYSCALL_TABLE(umount, umount, 4052, 2) +#endif +#ifndef OVERRIDE_TABLE_32_olduname +TRACE_SYSCALL_TABLE(olduname, olduname, 4059, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 4061, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 4062, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigaction +TRACE_SYSCALL_TABLE(sigaction, sigaction, 4067, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sigsuspend +TRACE_SYSCALL_TABLE(sigsuspend, sigsuspend, 4072, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigpending +TRACE_SYSCALL_TABLE(sigpending, sigpending, 4073, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 4074, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 4075, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 4076, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 4077, 2) +#endif +#ifndef OVERRIDE_TABLE_32_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 4078, 2) +#endif +#ifndef OVERRIDE_TABLE_32_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 4079, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 4080, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 4081, 2) +#endif +#ifndef OVERRIDE_TABLE_32_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 4083, 2) +#endif +#ifndef OVERRIDE_TABLE_32_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 4085, 3) +#endif +#ifndef OVERRIDE_TABLE_32_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 4088, 4) +#endif +#ifndef OVERRIDE_TABLE_32_old_readdir +TRACE_SYSCALL_TABLE(old_readdir, old_readdir, 4089, 3) +#endif +#ifndef OVERRIDE_TABLE_32_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 4092, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 4099, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 4100, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socketcall +TRACE_SYSCALL_TABLE(socketcall, socketcall, 4102, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 4103, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 4104, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 4105, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 4106, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 4107, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 4108, 2) +#endif +#ifndef OVERRIDE_TABLE_32_uname +TRACE_SYSCALL_TABLE(uname, uname, 4109, 1) +#endif +#ifndef OVERRIDE_TABLE_32_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 4114, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 4116, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ipc +TRACE_SYSCALL_TABLE(ipc, ipc, 4117, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 4121, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 4122, 1) +#endif +#ifndef OVERRIDE_TABLE_32_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 4124, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigprocmask +TRACE_SYSCALL_TABLE(sigprocmask, sigprocmask, 4126, 3) +#endif +#ifndef OVERRIDE_TABLE_32_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 4128, 3) +#endif +#ifndef OVERRIDE_TABLE_32_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 4129, 2) +#endif +#ifndef OVERRIDE_TABLE_32_llseek +TRACE_SYSCALL_TABLE(llseek, llseek, 4140, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 4141, 3) +#endif +#ifndef OVERRIDE_TABLE_32_select +TRACE_SYSCALL_TABLE(select, select, 4142, 5) +#endif +#ifndef OVERRIDE_TABLE_32_readv +TRACE_SYSCALL_TABLE(readv, readv, 4145, 3) +#endif +#ifndef OVERRIDE_TABLE_32_writev +TRACE_SYSCALL_TABLE(writev, writev, 4146, 3) +#endif +#ifndef OVERRIDE_TABLE_32_cachectl +TRACE_SYSCALL_TABLE(cachectl, cachectl, 4148, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 4153, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 4158, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 4159, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 4160, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 4165, 2) +#endif +#ifndef OVERRIDE_TABLE_32_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 4166, 2) +#endif +#ifndef OVERRIDE_TABLE_32_accept +TRACE_SYSCALL_TABLE(accept, accept, 4168, 3) +#endif +#ifndef OVERRIDE_TABLE_32_bind +TRACE_SYSCALL_TABLE(bind, bind, 4169, 3) +#endif +#ifndef OVERRIDE_TABLE_32_connect +TRACE_SYSCALL_TABLE(connect, connect, 4170, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 4171, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 4172, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 4173, 5) +#endif +#ifndef OVERRIDE_TABLE_32_recv +TRACE_SYSCALL_TABLE(recv, recv, 4175, 4) +#endif +#ifndef OVERRIDE_TABLE_32_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 4176, 6) +#endif +#ifndef OVERRIDE_TABLE_32_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 4177, 3) +#endif +#ifndef OVERRIDE_TABLE_32_send +TRACE_SYSCALL_TABLE(send, send, 4178, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 4179, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 4180, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 4181, 5) +#endif +#ifndef OVERRIDE_TABLE_32_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 4184, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 4186, 3) +#endif +#ifndef OVERRIDE_TABLE_32_poll +TRACE_SYSCALL_TABLE(poll, poll, 4188, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 4191, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 4194, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 4195, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 4196, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 4197, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 4198, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 4199, 2) +#endif +#ifndef OVERRIDE_TABLE_32_pread64 +TRACE_SYSCALL_TABLE(pread64, pread64, 4200, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pwrite64 +TRACE_SYSCALL_TABLE(pwrite64, pwrite64, 4201, 4) +#endif +#ifndef OVERRIDE_TABLE_32_chown +TRACE_SYSCALL_TABLE(chown, chown, 4202, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 4203, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigaltstack +TRACE_SYSCALL_TABLE(sigaltstack, sigaltstack, 4206, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile +TRACE_SYSCALL_TABLE(sendfile, sendfile, 4207, 4) +#endif +#ifndef OVERRIDE_TABLE_32_truncate64 +TRACE_SYSCALL_TABLE(truncate64, truncate64, 4211, 2) +#endif +#ifndef OVERRIDE_TABLE_32_stat64 +TRACE_SYSCALL_TABLE(stat64, stat64, 4213, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat64 +TRACE_SYSCALL_TABLE(lstat64, lstat64, 4214, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstat64 +TRACE_SYSCALL_TABLE(fstat64, fstat64, 4215, 2) +#endif +#ifndef OVERRIDE_TABLE_32_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 4216, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 4217, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 4219, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 4224, 5) +#endif +#ifndef OVERRIDE_TABLE_32_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 4225, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 4226, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 4227, 4) +#endif +#ifndef OVERRIDE_TABLE_32_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 4228, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 4229, 4) +#endif +#ifndef OVERRIDE_TABLE_32_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 4230, 3) +#endif +#ifndef OVERRIDE_TABLE_32_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 4231, 3) +#endif +#ifndef OVERRIDE_TABLE_32_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 4232, 3) +#endif +#ifndef OVERRIDE_TABLE_32_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 4233, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 4234, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 4235, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 4237, 4) +#endif +#ifndef OVERRIDE_TABLE_32_futex +TRACE_SYSCALL_TABLE(futex, futex, 4238, 6) +#endif +#ifndef OVERRIDE_TABLE_32_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 4241, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 4243, 5) +#endif +#ifndef OVERRIDE_TABLE_32_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 4244, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 4245, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 4249, 4) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 4250, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 4252, 1) +#endif +#ifndef OVERRIDE_TABLE_32_statfs64 +TRACE_SYSCALL_TABLE(statfs64, statfs64, 4255, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs64 +TRACE_SYSCALL_TABLE(fstatfs64, fstatfs64, 4256, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 4257, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 4258, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 4259, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 4262, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 4263, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 4264, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 4265, 4) +#endif +#ifndef OVERRIDE_TABLE_32_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 4267, 2) +#endif +#ifndef OVERRIDE_TABLE_32_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 4278, 5) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 4285, 3) +#endif +#ifndef OVERRIDE_TABLE_32_openat +TRACE_SYSCALL_TABLE(openat, openat, 4288, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 4289, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 4290, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 4291, 5) +#endif +#ifndef OVERRIDE_TABLE_32_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 4292, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatat64 +TRACE_SYSCALL_TABLE(fstatat64, fstatat64, 4293, 4) +#endif +#ifndef OVERRIDE_TABLE_32_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 4294, 3) +#endif +#ifndef OVERRIDE_TABLE_32_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 4295, 4) +#endif +#ifndef OVERRIDE_TABLE_32_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 4296, 5) +#endif +#ifndef OVERRIDE_TABLE_32_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 4297, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 4298, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 4299, 3) +#endif +#ifndef OVERRIDE_TABLE_32_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 4300, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 4301, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 4302, 5) +#endif +#ifndef OVERRIDE_TABLE_32_splice +TRACE_SYSCALL_TABLE(splice, splice, 4304, 6) +#endif +#ifndef OVERRIDE_TABLE_32_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 4307, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 4309, 2) +#endif +#ifndef OVERRIDE_TABLE_32_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 4310, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 4312, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 4313, 6) +#endif +#ifndef OVERRIDE_TABLE_32_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 4316, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 4317, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 4322, 2) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 4323, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 4324, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 4328, 2) +#endif +#ifndef OVERRIDE_TABLE_32_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 4330, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 4331, 5) +#endif +#ifndef OVERRIDE_TABLE_32_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 4332, 4) +#endif +#ifndef OVERRIDE_TABLE_32_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 4333, 5) +#endif +#ifndef OVERRIDE_TABLE_32_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 4334, 4) +#endif +#ifndef OVERRIDE_TABLE_32_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 4335, 5) +#endif +#ifndef OVERRIDE_TABLE_32_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 4338, 4) +#endif +#ifndef OVERRIDE_TABLE_32_name_to_handle_at +TRACE_SYSCALL_TABLE(name_to_handle_at, name_to_handle_at, 4339, 5) +#endif +#ifndef OVERRIDE_TABLE_32_open_by_handle_at +TRACE_SYSCALL_TABLE(open_by_handle_at, open_by_handle_at, 4340, 3) +#endif +#ifndef OVERRIDE_TABLE_32_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 4341, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 4343, 4) +#endif +#ifndef OVERRIDE_TABLE_32_finit_module +TRACE_SYSCALL_TABLE(finit_module, finit_module, 4348, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setattr +TRACE_SYSCALL_TABLE(sched_setattr, sched_setattr, 4349, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getattr +TRACE_SYSCALL_TABLE(sched_getattr, sched_getattr, 4350, 4) +#endif +#ifndef OVERRIDE_TABLE_32_renameat2 +TRACE_SYSCALL_TABLE(renameat2, renameat2, 4351, 5) +#endif +#ifndef OVERRIDE_TABLE_32_seccomp +TRACE_SYSCALL_TABLE(seccomp, seccomp, 4352, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getrandom +TRACE_SYSCALL_TABLE(getrandom, getrandom, 4353, 3) +#endif +#ifndef OVERRIDE_TABLE_32_memfd_create +TRACE_SYSCALL_TABLE(memfd_create, memfd_create, 4354, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers_override.h new file mode 100644 index 000000000000..d7e2503606f6 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-32-syscalls-3.18.0_pointers_override.h @@ -0,0 +1,28 @@ +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) + +#define OVERRIDE_32_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_clone +TRACE_SYSCALL_TABLE(clone, clone, 4120, 0) + +#define OVERRIDE_TABLE_32_sys_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 4239, 3) + +#define OVERRIDE_TABLE_32_sys_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 4240, 3) + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers.h new file mode 100644 index 000000000000..c4d195386325 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers.h @@ -0,0 +1,1165 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "mips-64-syscalls-3.5.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_64_sgetmask +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sgetmask) +#endif +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_64_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_64_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_64_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_sgetmask +SC_LTTNG_TRACEPOINT_EVENT(sgetmask, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_64_ssetmask +SC_LTTNG_TRACEPOINT_EVENT(ssetmask, + TP_PROTO(sc_exit(long ret,) int newmask), + TP_ARGS(sc_exit(ret,) newmask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, newmask, newmask))) +) +#endif +#ifndef OVERRIDE_64_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_64_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_64_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_64_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_64_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_32_personality +SC_LTTNG_TRACEPOINT_EVENT(32_personality, + TP_PROTO(sc_exit(long ret,) unsigned long personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, personality, personality))) +) +#endif +#ifndef OVERRIDE_64_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_64_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_64_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_set_thread_area +SC_LTTNG_TRACEPOINT_EVENT(set_thread_area, + TP_PROTO(sc_exit(long ret,) unsigned long addr), + TP_ARGS(sc_exit(ret,) addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr))) +) +#endif +#ifndef OVERRIDE_64_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_64_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_64_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_64_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_64_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_64_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_msgget +SC_LTTNG_TRACEPOINT_EVENT(msgget, + TP_PROTO(sc_exit(long ret,) key_t key, int msgflg), + TP_ARGS(sc_exit(ret,) key, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_64_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_64_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_64_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_64_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_64_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_64_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_64_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_64_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_64_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_64_shmget +SC_LTTNG_TRACEPOINT_EVENT(shmget, + TP_PROTO(sc_exit(long ret,) key_t key, size_t size, int shmflg), + TP_ARGS(sc_exit(ret,) key, size, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_64_semget +SC_LTTNG_TRACEPOINT_EVENT(semget, + TP_PROTO(sc_exit(long ret,) key_t key, int nsems, int semflg), + TP_ARGS(sc_exit(ret,) key, nsems, semflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, nsems, nsems)) sc_in(ctf_integer(int, semflg, semflg))) +) +#endif +#ifndef OVERRIDE_64_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_64_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_64_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_64_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_64_cacheflush +SC_LTTNG_TRACEPOINT_EVENT(cacheflush, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long bytes, unsigned int cache), + TP_ARGS(sc_exit(ret,) addr, bytes, cache), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, bytes, bytes)) sc_inout(ctf_integer(unsigned int, cache, cache))) +) +#endif +#ifndef OVERRIDE_64_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_64_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_32_ftruncate64 +SC_LTTNG_TRACEPOINT_EVENT(32_ftruncate64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, unsigned long __dummy, unsigned long a2, unsigned long a3), + TP_ARGS(sc_exit(ret,) fd, __dummy, a2, a3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(unsigned long, __dummy, __dummy)) sc_inout(ctf_integer(unsigned long, a2, a2)) sc_inout(ctf_integer(unsigned long, a3, a3))) +) +#endif +#ifndef OVERRIDE_64_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_64_n32_semctl +SC_LTTNG_TRACEPOINT_EVENT(n32_semctl, + TP_PROTO(sc_exit(long ret,) int semid, int semnum, int cmd, u32 arg), + TP_ARGS(sc_exit(ret,) semid, semnum, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, semid, semid)) sc_inout(ctf_integer(int, semnum, semnum)) sc_inout(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(u32, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_n32_msgsnd +SC_LTTNG_TRACEPOINT_EVENT(n32_msgsnd, + TP_PROTO(sc_exit(long ret,) int msqid, u32 msgp, unsigned int msgsz, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, msqid, msqid)) sc_inout(ctf_integer(u32, msgp, msgp)) sc_inout(ctf_integer(unsigned int, msgsz, msgsz)) sc_inout(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_64_n32_msgrcv +SC_LTTNG_TRACEPOINT_EVENT(n32_msgrcv, + TP_PROTO(sc_exit(long ret,) int msqid, u32 msgp, size_t msgsz, int msgtyp, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgtyp, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, msqid, msqid)) sc_inout(ctf_integer(u32, msgp, msgp)) sc_inout(ctf_integer(size_t, msgsz, msgsz)) sc_inout(ctf_integer(int, msgtyp, msgtyp)) sc_inout(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_64_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_32_ipc +SC_LTTNG_TRACEPOINT_EVENT(32_ipc, + TP_PROTO(sc_exit(long ret,) u32 call, long first, long second, long third, unsigned long ptr, unsigned long fifth), + TP_ARGS(sc_exit(ret,) call, first, second, third, ptr, fifth), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32, call, call)) sc_inout(ctf_integer(long, first, first)) sc_inout(ctf_integer(long, second, second)) sc_inout(ctf_integer(long, third, third)) sc_inout(ctf_integer(unsigned long, ptr, ptr)) sc_inout(ctf_integer(unsigned long, fifth, fifth))) +) +#endif +#ifndef OVERRIDE_64_mips_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mips_mmap2, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(unsigned long, pgoff, pgoff))) +) +#endif +#ifndef OVERRIDE_64_mips_mmap +SC_LTTNG_TRACEPOINT_EVENT(mips_mmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, off_t offset), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, offset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(off_t, offset, offset))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-64-syscalls-3.5.0_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_64_sgetmask +TRACE_SYSCALL_TABLE(syscalls_noargs, sgetmask, 4068, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 6023, 0) +#endif +#ifndef OVERRIDE_TABLE_64_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 6033, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 6038, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 6100, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 6102, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 6105, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 6106, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 6108, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 6109, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 6110, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 6149, 0) +#endif +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 6150, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 6157, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 6178, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 6214, 0) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 6247, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_sgetmask +TRACE_SYSCALL_TABLE(sgetmask, sgetmask, 4068, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 6023, 0) +#endif +#ifndef OVERRIDE_TABLE_64_pause +TRACE_SYSCALL_TABLE(pause, pause, 6033, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 6038, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 6100, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 6102, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 6105, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 6106, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 6108, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 6109, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 6110, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 6149, 0) +#endif +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 6150, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(sync, sync, 6157, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 6178, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 6214, 0) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 6247, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_nice +TRACE_SYSCALL_TABLE(nice, nice, 4034, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ssetmask +TRACE_SYSCALL_TABLE(ssetmask, ssetmask, 4069, 1) +#endif +#ifndef OVERRIDE_TABLE_64_32_ipc +TRACE_SYSCALL_TABLE(32_ipc, 32_ipc, 4117, 6) +#endif +#ifndef OVERRIDE_TABLE_64_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 4134, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mips_mmap2 +TRACE_SYSCALL_TABLE(mips_mmap2, mips_mmap2, 4210, 6) +#endif +#ifndef OVERRIDE_TABLE_64_32_ftruncate64 +TRACE_SYSCALL_TABLE(32_ftruncate64, 32_ftruncate64, 4212, 4) +#endif +#ifndef OVERRIDE_TABLE_64_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 5015, 3) +#endif +#ifndef OVERRIDE_TABLE_64_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 5070, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 5099, 4) +#endif +#ifndef OVERRIDE_TABLE_64_personality +TRACE_SYSCALL_TABLE(personality, personality, 5132, 1) +#endif +#ifndef OVERRIDE_TABLE_64_close +TRACE_SYSCALL_TABLE(close, close, 6003, 1) +#endif +#ifndef OVERRIDE_TABLE_64_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 6008, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mips_mmap +TRACE_SYSCALL_TABLE(mips_mmap, mips_mmap, 6009, 6) +#endif +#ifndef OVERRIDE_TABLE_64_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 6010, 3) +#endif +#ifndef OVERRIDE_TABLE_64_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 6011, 2) +#endif +#ifndef OVERRIDE_TABLE_64_brk +TRACE_SYSCALL_TABLE(brk, brk, 6012, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 6024, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msync +TRACE_SYSCALL_TABLE(msync, msync, 6025, 3) +#endif +#ifndef OVERRIDE_TABLE_64_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 6027, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmget +TRACE_SYSCALL_TABLE(shmget, shmget, 6028, 3) +#endif +#ifndef OVERRIDE_TABLE_64_dup +TRACE_SYSCALL_TABLE(dup, dup, 6031, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 6032, 2) +#endif +#ifndef OVERRIDE_TABLE_64_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 6037, 1) +#endif +#ifndef OVERRIDE_TABLE_64_socket +TRACE_SYSCALL_TABLE(socket, socket, 6040, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 6047, 2) +#endif +#ifndef OVERRIDE_TABLE_64_listen +TRACE_SYSCALL_TABLE(listen, listen, 6049, 2) +#endif +#ifndef OVERRIDE_TABLE_64_exit +TRACE_SYSCALL_TABLE(exit, exit, 6058, 1) +#endif +#ifndef OVERRIDE_TABLE_64_kill +TRACE_SYSCALL_TABLE(kill, kill, 6060, 2) +#endif +#ifndef OVERRIDE_TABLE_64_semget +TRACE_SYSCALL_TABLE(semget, semget, 6062, 3) +#endif +#ifndef OVERRIDE_TABLE_64_n32_semctl +TRACE_SYSCALL_TABLE(n32_semctl, n32_semctl, 6064, 4) +#endif +#ifndef OVERRIDE_TABLE_64_msgget +TRACE_SYSCALL_TABLE(msgget, msgget, 6066, 2) +#endif +#ifndef OVERRIDE_TABLE_64_n32_msgsnd +TRACE_SYSCALL_TABLE(n32_msgsnd, n32_msgsnd, 6067, 4) +#endif +#ifndef OVERRIDE_TABLE_64_n32_msgrcv +TRACE_SYSCALL_TABLE(n32_msgrcv, n32_msgrcv, 6068, 5) +#endif +#ifndef OVERRIDE_TABLE_64_flock +TRACE_SYSCALL_TABLE(flock, flock, 6071, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 6072, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 6073, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 6075, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 6079, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 6089, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 6091, 3) +#endif +#ifndef OVERRIDE_TABLE_64_umask +TRACE_SYSCALL_TABLE(umask, umask, 6093, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 6103, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 6104, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 6107, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 6111, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 6112, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 6115, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 6117, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 6119, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 6120, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 6121, 1) +#endif +#ifndef OVERRIDE_TABLE_64_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 6122, 1) +#endif +#ifndef OVERRIDE_TABLE_64_32_personality +TRACE_SYSCALL_TABLE(32_personality, 32_personality, 6132, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 6136, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 6137, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 6138, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 6142, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 6143, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 6144, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 6146, 2) +#endif +#ifndef OVERRIDE_TABLE_64_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 6147, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 6148, 1) +#endif +#ifndef OVERRIDE_TABLE_64_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 6153, 5) +#endif +#ifndef OVERRIDE_TABLE_64_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 6192, 2) +#endif +#ifndef OVERRIDE_TABLE_64_cacheflush +TRACE_SYSCALL_TABLE(cacheflush, cacheflush, 6197, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 6201, 1) +#endif +#ifndef OVERRIDE_TABLE_64_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 6205, 1) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 6207, 1) +#endif +#ifndef OVERRIDE_TABLE_64_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 6210, 5) +#endif +#ifndef OVERRIDE_TABLE_64_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 6223, 1) +#endif +#ifndef OVERRIDE_TABLE_64_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 6224, 1) +#endif +#ifndef OVERRIDE_TABLE_64_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 6229, 3) +#endif +#ifndef OVERRIDE_TABLE_64_set_thread_area +TRACE_SYSCALL_TABLE(set_thread_area, set_thread_area, 6246, 1) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 6249, 2) +#endif +#ifndef OVERRIDE_TABLE_64_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 6266, 1) +#endif +#ifndef OVERRIDE_TABLE_64_tee +TRACE_SYSCALL_TABLE(tee, tee, 6269, 4) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 6277, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 6278, 2) +#endif +#ifndef OVERRIDE_TABLE_64_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 6282, 1) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 6284, 2) +#endif +#ifndef OVERRIDE_TABLE_64_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 6288, 2) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 6289, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 6290, 3) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 6292, 1) +#endif +#ifndef OVERRIDE_TABLE_64_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 6306, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setns +TRACE_SYSCALL_TABLE(setns, setns, 6308, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers_override.h new file mode 100644 index 000000000000..49b485bb560a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_integers_override.h @@ -0,0 +1,3 @@ +/* + * this is a place-holder for MIPS integer syscall definition override. + */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers.h new file mode 100644 index 000000000000..6605d9136b4b --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers.h @@ -0,0 +1,1864 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "mips-64-syscalls-3.5.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_64_oldumount +SC_LTTNG_TRACEPOINT_EVENT(oldumount, + TP_PROTO(sc_exit(long ret,) char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_olduname +SC_LTTNG_TRACEPOINT_EVENT(olduname, + TP_PROTO(sc_exit(long ret,) struct oldold_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct oldold_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_64_uselib +SC_LTTNG_TRACEPOINT_EVENT(uselib, + TP_PROTO(sc_exit(long ret,) const char * library), + TP_ARGS(sc_exit(ret,) library), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(const char *, library, library))) +) +#endif +#ifndef OVERRIDE_64_uname +SC_LTTNG_TRACEPOINT_EVENT(uname, + TP_PROTO(sc_exit(long ret,) struct old_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct old_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_64_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_64_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_64_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_64_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_64_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_64_shmdt +SC_LTTNG_TRACEPOINT_EVENT(shmdt, + TP_PROTO(sc_exit(long ret,) char * shmaddr), + TP_ARGS(sc_exit(ret,) shmaddr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(char *, shmaddr, shmaddr))) +) +#endif +#ifndef OVERRIDE_64_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_64_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_64_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_64_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * set, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) set, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, set, set)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_64_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_64_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_64_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_64_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_64_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_64_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_64_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_64_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_64_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(32_rt_sigpending, + TP_PROTO(sc_exit(long ret,) compat_sigset_t * uset, unsigned int sigsetsize), + TP_ARGS(sc_exit(ret,) uset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(compat_sigset_t *, uset, uset)) sc_inout(ctf_integer(unsigned int, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(32_sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) compat_pid_t pid, struct compat_timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(compat_pid_t, pid, pid)) sc_inout(ctf_integer(struct compat_timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_64_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_64_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_64_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_waitpid +SC_LTTNG_TRACEPOINT_EVENT(waitpid, + TP_PROTO(sc_exit(long ret,) pid_t pid, int * stat_addr, int options), + TP_ARGS(sc_exit(ret,) pid, stat_addr, options), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(int *, stat_addr, stat_addr)) sc_inout(ctf_integer(int, options, options))) +) +#endif +#ifndef OVERRIDE_64_32_sigaction +SC_LTTNG_TRACEPOINT_EVENT(32_sigaction, + TP_PROTO(sc_exit(long ret,) long sig, const struct sigaction32 * act, struct sigaction32 * oact), + TP_ARGS(sc_exit(ret,) sig, act, oact), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(long, sig, sig)) sc_inout(ctf_integer(const struct sigaction32 *, act, act)) sc_inout(ctf_integer(struct sigaction32 *, oact, oact))) +) +#endif +#ifndef OVERRIDE_64_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_shmctl +SC_LTTNG_TRACEPOINT_EVENT(shmctl, + TP_PROTO(sc_exit(long ret,) int shmid, int cmd, struct shmid_ds * buf), + TP_ARGS(sc_exit(ret,) shmid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct shmid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_64_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_msgctl +SC_LTTNG_TRACEPOINT_EVENT(msgctl, + TP_PROTO(sc_exit(long ret,) int msqid, int cmd, struct msqid_ds * buf), + TP_ARGS(sc_exit(ret,) msqid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct msqid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_64_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_64_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_64_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_64_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_64_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(int, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_64_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_64_shmat +SC_LTTNG_TRACEPOINT_EVENT(shmat, + TP_PROTO(sc_exit(long ret,) int shmid, char * shmaddr, int shmflg), + TP_ARGS(sc_exit(ret,) shmid, shmaddr, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(char *, shmaddr, shmaddr)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_64_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_semop +SC_LTTNG_TRACEPOINT_EVENT(semop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops))) +) +#endif +#ifndef OVERRIDE_64_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_64_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruidp, uid_t * euidp, uid_t * suidp), + TP_ARGS(sc_exit(ret,) ruidp, euidp, suidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruidp, ruidp)) sc_out(ctf_integer(uid_t *, euidp, euidp)) sc_out(ctf_integer(uid_t *, suidp, suidp))) +) +#endif +#ifndef OVERRIDE_64_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgidp, gid_t * egidp, gid_t * sgidp), + TP_ARGS(sc_exit(ret,) rgidp, egidp, sgidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgidp, rgidp)) sc_out(ctf_integer(gid_t *, egidp, egidp)) sc_out(ctf_integer(gid_t *, sgidp, sgidp))) +) +#endif +#ifndef OVERRIDE_64_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(32_rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) int pid, int sig, compat_siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, pid, pid)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(compat_siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_64_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_64_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_cachectl +SC_LTTNG_TRACEPOINT_EVENT(cachectl, + TP_PROTO(sc_exit(long ret,) char * addr, int nbytes, int op), + TP_ARGS(sc_exit(ret,) addr, nbytes, op), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(char *, addr, addr)) sc_inout(ctf_integer(int, nbytes, nbytes)) sc_inout(ctf_integer(int, op, op))) +) +#endif +#ifndef OVERRIDE_64_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_64_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_64_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_send +SC_LTTNG_TRACEPOINT_EVENT(send, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, buff, buff)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_32_truncate64 +SC_LTTNG_TRACEPOINT_EVENT(32_truncate64, + TP_PROTO(sc_exit(long ret,) const char * path, unsigned long __dummy, unsigned long a2, unsigned long a3), + TP_ARGS(sc_exit(ret,) path, __dummy, a2, a3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(path, path)) sc_inout(ctf_integer(unsigned long, __dummy, __dummy)) sc_inout(ctf_integer(unsigned long, a2, a2)) sc_inout(ctf_integer(unsigned long, a3, a3))) +) +#endif +#ifndef OVERRIDE_64_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_msgsnd +SC_LTTNG_TRACEPOINT_EVENT(msgsnd, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_semtimedop +SC_LTTNG_TRACEPOINT_EVENT(semtimedop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops, const struct timespec * timeout), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops)) sc_inout(ctf_integer(const struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_64_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(32_rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction32 * act, struct sigaction32 * oact, unsigned int sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(const struct sigaction32 *, act, act)) sc_inout(ctf_integer(struct sigaction32 *, oact, oact)) sc_inout(ctf_integer(unsigned int, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(32_rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, compat_sigset_t * set, compat_sigset_t * oset, unsigned int sigsetsize), + TP_ARGS(sc_exit(ret,) how, set, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(compat_sigset_t *, set, set)) sc_inout(ctf_integer(compat_sigset_t *, oset, oset)) sc_inout(ctf_integer(unsigned int, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(32_sendfile, + TP_PROTO(sc_exit(long ret,) long out_fd, long in_fd, compat_off_t * offset, s32 count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(long, out_fd, out_fd)) sc_inout(ctf_integer(long, in_fd, in_fd)) sc_inout(ctf_integer(compat_off_t *, offset, offset)) sc_inout(ctf_integer(s32, count, count))) +) +#endif +#ifndef OVERRIDE_64_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_64_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_quotactl +SC_LTTNG_TRACEPOINT_EVENT(quotactl, + TP_PROTO(sc_exit(long ret,) unsigned int cmd, const char * special, qid_t id, void * addr), + TP_ARGS(sc_exit(ret,) cmd, special, id, addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(const char *, special, special)) sc_in(ctf_integer(qid_t, id, id)) sc_inout(ctf_integer(void *, addr, addr))) +) +#endif +#ifndef OVERRIDE_64_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_64_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_64_newfstatat +SC_LTTNG_TRACEPOINT_EVENT(newfstatat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_64_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_64_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(32_llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int offset_high, unsigned int offset_low, loff_t * result, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, offset_high, offset_high)) sc_inout(ctf_integer(unsigned int, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_64_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(32_waitid, + TP_PROTO(sc_exit(long ret,) int which, compat_pid_t pid, compat_siginfo_t * uinfo, int options, struct compat_rusage * uru), + TP_ARGS(sc_exit(ret,) which, pid, uinfo, options, uru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, which, which)) sc_inout(ctf_integer(compat_pid_t, pid, pid)) sc_inout(ctf_integer(compat_siginfo_t *, uinfo, uinfo)) sc_inout(ctf_integer(int, options, options)) sc_inout(ctf_integer(struct compat_rusage *, uru, uru))) +) +#endif +#ifndef OVERRIDE_64_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_64_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_msgrcv +SC_LTTNG_TRACEPOINT_EVENT(msgrcv, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, long msgtyp, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgtyp, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_out(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(long, msgtyp, msgtyp)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_64_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_32_pread +SC_LTTNG_TRACEPOINT_EVENT(32_pread, + TP_PROTO(sc_exit(long ret,) unsigned long fd, char * buf, size_t count, unsigned long unused, unsigned long a4, unsigned long a5), + TP_ARGS(sc_exit(ret,) fd, buf, count, unused, a4, a5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(char *, buf, buf)) sc_inout(ctf_integer(size_t, count, count)) sc_inout(ctf_integer(unsigned long, unused, unused)) sc_inout(ctf_integer(unsigned long, a4, a4)) sc_inout(ctf_integer(unsigned long, a5, a5))) +) +#endif +#ifndef OVERRIDE_64_32_pwrite +SC_LTTNG_TRACEPOINT_EVENT(32_pwrite, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count, u32 unused, u64 a4, u64 a5), + TP_ARGS(sc_exit(ret,) fd, buf, count, unused, a4, a5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(const char *, buf, buf)) sc_inout(ctf_integer(size_t, count, count)) sc_inout(ctf_integer(u32, unused, unused)) sc_inout(ctf_integer(u64, a4, a4)) sc_inout(ctf_integer(u64, a5, a5))) +) +#endif +#ifndef OVERRIDE_64_32_fanotify_mark +SC_LTTNG_TRACEPOINT_EVENT(32_fanotify_mark, + TP_PROTO(sc_exit(long ret,) int fanotify_fd, unsigned int flags, u64 a3, u64 a4, int dfd, const char * pathname), + TP_ARGS(sc_exit(ret,) fanotify_fd, flags, a3, a4, dfd, pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fanotify_fd, fanotify_fd)) sc_inout(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(u64, a3, a3)) sc_inout(ctf_integer(u64, a4, a4)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_64_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_process_vm_readv +SC_LTTNG_TRACEPOINT_EVENT(process_vm_readv, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_process_vm_writev +SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_32_futex +SC_LTTNG_TRACEPOINT_EVENT(32_futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct compat_timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_inout(ctf_integer(int, op, op)) sc_inout(ctf_integer(u32, val, val)) sc_inout(ctf_integer(struct compat_timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_inout(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_64_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "mips-64-syscalls-3.5.0_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_64_waitpid +TRACE_SYSCALL_TABLE(waitpid, waitpid, 4007, 3) +#endif +#ifndef OVERRIDE_TABLE_64_oldumount +TRACE_SYSCALL_TABLE(oldumount, oldumount, 4022, 1) +#endif +#ifndef OVERRIDE_TABLE_64_olduname +TRACE_SYSCALL_TABLE(olduname, olduname, 4059, 1) +#endif +#ifndef OVERRIDE_TABLE_64_32_sigaction +TRACE_SYSCALL_TABLE(32_sigaction, 32_sigaction, 4067, 3) +#endif +#ifndef OVERRIDE_TABLE_64_uselib +TRACE_SYSCALL_TABLE(uselib, uselib, 4086, 1) +#endif +#ifndef OVERRIDE_TABLE_64_uname +TRACE_SYSCALL_TABLE(uname, uname, 4109, 1) +#endif +#ifndef OVERRIDE_TABLE_64_32_llseek +TRACE_SYSCALL_TABLE(32_llseek, 32_llseek, 4140, 5) +#endif +#ifndef OVERRIDE_TABLE_64_send +TRACE_SYSCALL_TABLE(send, send, 4178, 4) +#endif +#ifndef OVERRIDE_TABLE_64_32_pread +TRACE_SYSCALL_TABLE(32_pread, 32_pread, 4200, 6) +#endif +#ifndef OVERRIDE_TABLE_64_32_pwrite +TRACE_SYSCALL_TABLE(32_pwrite, 32_pwrite, 4201, 6) +#endif +#ifndef OVERRIDE_TABLE_64_32_truncate64 +TRACE_SYSCALL_TABLE(32_truncate64, 32_truncate64, 4211, 4) +#endif +#ifndef OVERRIDE_TABLE_64_32_waitid +TRACE_SYSCALL_TABLE(32_waitid, 32_waitid, 4278, 5) +#endif +#ifndef OVERRIDE_TABLE_64_32_fanotify_mark +TRACE_SYSCALL_TABLE(32_fanotify_mark, 32_fanotify_mark, 4337, 6) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 5013, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 5014, 4) +#endif +#ifndef OVERRIDE_TABLE_64_readv +TRACE_SYSCALL_TABLE(readv, readv, 5018, 3) +#endif +#ifndef OVERRIDE_TABLE_64_writev +TRACE_SYSCALL_TABLE(writev, writev, 5019, 3) +#endif +#ifndef OVERRIDE_TABLE_64_select +TRACE_SYSCALL_TABLE(select, select, 5022, 5) +#endif +#ifndef OVERRIDE_TABLE_64_shmctl +TRACE_SYSCALL_TABLE(shmctl, shmctl, 5030, 3) +#endif +#ifndef OVERRIDE_TABLE_64_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 5034, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 5035, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 5036, 3) +#endif +#ifndef OVERRIDE_TABLE_64_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 5044, 6) +#endif +#ifndef OVERRIDE_TABLE_64_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 5045, 3) +#endif +#ifndef OVERRIDE_TABLE_64_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 5046, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 5053, 5) +#endif +#ifndef OVERRIDE_TABLE_64_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 5059, 4) +#endif +#ifndef OVERRIDE_TABLE_64_msgsnd +TRACE_SYSCALL_TABLE(msgsnd, msgsnd, 5067, 4) +#endif +#ifndef OVERRIDE_TABLE_64_msgrcv +TRACE_SYSCALL_TABLE(msgrcv, msgrcv, 5068, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msgctl +TRACE_SYSCALL_TABLE(msgctl, msgctl, 5069, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 5076, 3) +#endif +#ifndef OVERRIDE_TABLE_64_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 5094, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 5095, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 5096, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 5097, 1) +#endif +#ifndef OVERRIDE_TABLE_64_times +TRACE_SYSCALL_TABLE(times, times, 5098, 1) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 5125, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 5126, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 5127, 3) +#endif +#ifndef OVERRIDE_TABLE_64_utime +TRACE_SYSCALL_TABLE(utime, utime, 5130, 2) +#endif +#ifndef OVERRIDE_TABLE_64_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 5133, 2) +#endif +#ifndef OVERRIDE_TABLE_64_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 5134, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 5135, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 5145, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 5152, 1) +#endif +#ifndef OVERRIDE_TABLE_64_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 5154, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 5155, 2) +#endif +#ifndef OVERRIDE_TABLE_64_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 5159, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mount +TRACE_SYSCALL_TABLE(mount, mount, 5160, 5) +#endif +#ifndef OVERRIDE_TABLE_64_futex +TRACE_SYSCALL_TABLE(futex, futex, 5194, 6) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 5195, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 5196, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 5200, 2) +#endif +#ifndef OVERRIDE_TABLE_64_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 5202, 5) +#endif +#ifndef OVERRIDE_TABLE_64_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 5203, 3) +#endif +#ifndef OVERRIDE_TABLE_64_semtimedop +TRACE_SYSCALL_TABLE(semtimedop, semtimedop, 5214, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 5216, 3) +#endif +#ifndef OVERRIDE_TABLE_64_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 5217, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 5218, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 5221, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 5222, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 5223, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 5224, 4) +#endif +#ifndef OVERRIDE_TABLE_64_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 5226, 2) +#endif +#ifndef OVERRIDE_TABLE_64_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 5237, 5) +#endif +#ifndef OVERRIDE_TABLE_64_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 5251, 3) +#endif +#ifndef OVERRIDE_TABLE_64_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 5260, 6) +#endif +#ifndef OVERRIDE_TABLE_64_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 5261, 5) +#endif +#ifndef OVERRIDE_TABLE_64_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 5266, 4) +#endif +#ifndef OVERRIDE_TABLE_64_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 5268, 2) +#endif +#ifndef OVERRIDE_TABLE_64_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 5269, 3) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 5272, 6) +#endif +#ifndef OVERRIDE_TABLE_64_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 5275, 4) +#endif +#ifndef OVERRIDE_TABLE_64_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 5276, 3) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 5281, 2) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 5282, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 5291, 4) +#endif +#ifndef OVERRIDE_TABLE_64_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 5294, 5) +#endif +#ifndef OVERRIDE_TABLE_64_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 5300, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 5302, 4) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_readv +TRACE_SYSCALL_TABLE(process_vm_readv, process_vm_readv, 5304, 6) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_writev +TRACE_SYSCALL_TABLE(process_vm_writev, process_vm_writev, 5305, 6) +#endif +#ifndef OVERRIDE_TABLE_64_read +TRACE_SYSCALL_TABLE(read, read, 6000, 3) +#endif +#ifndef OVERRIDE_TABLE_64_write +TRACE_SYSCALL_TABLE(write, write, 6001, 3) +#endif +#ifndef OVERRIDE_TABLE_64_open +TRACE_SYSCALL_TABLE(open, open, 6002, 3) +#endif +#ifndef OVERRIDE_TABLE_64_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 6004, 2) +#endif +#ifndef OVERRIDE_TABLE_64_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 6005, 2) +#endif +#ifndef OVERRIDE_TABLE_64_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 6006, 2) +#endif +#ifndef OVERRIDE_TABLE_64_poll +TRACE_SYSCALL_TABLE(poll, poll, 6007, 3) +#endif +#ifndef OVERRIDE_TABLE_64_32_rt_sigaction +TRACE_SYSCALL_TABLE(32_rt_sigaction, 32_rt_sigaction, 6013, 4) +#endif +#ifndef OVERRIDE_TABLE_64_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(32_rt_sigprocmask, 32_rt_sigprocmask, 6014, 4) +#endif +#ifndef OVERRIDE_TABLE_64_access +TRACE_SYSCALL_TABLE(access, access, 6020, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 6026, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmat +TRACE_SYSCALL_TABLE(shmat, shmat, 6029, 3) +#endif +#ifndef OVERRIDE_TABLE_64_32_sendfile +TRACE_SYSCALL_TABLE(32_sendfile, 32_sendfile, 6039, 4) +#endif +#ifndef OVERRIDE_TABLE_64_connect +TRACE_SYSCALL_TABLE(connect, connect, 6041, 3) +#endif +#ifndef OVERRIDE_TABLE_64_accept +TRACE_SYSCALL_TABLE(accept, accept, 6042, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 6043, 6) +#endif +#ifndef OVERRIDE_TABLE_64_bind +TRACE_SYSCALL_TABLE(bind, bind, 6048, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 6050, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 6051, 3) +#endif +#ifndef OVERRIDE_TABLE_64_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 6052, 4) +#endif +#ifndef OVERRIDE_TABLE_64_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 6054, 5) +#endif +#ifndef OVERRIDE_TABLE_64_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 6061, 1) +#endif +#ifndef OVERRIDE_TABLE_64_semop +TRACE_SYSCALL_TABLE(semop, semop, 6063, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmdt +TRACE_SYSCALL_TABLE(shmdt, shmdt, 6065, 1) +#endif +#ifndef OVERRIDE_TABLE_64_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 6074, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 6077, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 6078, 1) +#endif +#ifndef OVERRIDE_TABLE_64_rename +TRACE_SYSCALL_TABLE(rename, rename, 6080, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 6081, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 6082, 1) +#endif +#ifndef OVERRIDE_TABLE_64_creat +TRACE_SYSCALL_TABLE(creat, creat, 6083, 2) +#endif +#ifndef OVERRIDE_TABLE_64_link +TRACE_SYSCALL_TABLE(link, link, 6084, 2) +#endif +#ifndef OVERRIDE_TABLE_64_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 6085, 1) +#endif +#ifndef OVERRIDE_TABLE_64_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 6086, 2) +#endif +#ifndef OVERRIDE_TABLE_64_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 6087, 3) +#endif +#ifndef OVERRIDE_TABLE_64_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 6088, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chown +TRACE_SYSCALL_TABLE(chown, chown, 6090, 3) +#endif +#ifndef OVERRIDE_TABLE_64_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 6092, 3) +#endif +#ifndef OVERRIDE_TABLE_64_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 6101, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 6113, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 6114, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 6116, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 6118, 3) +#endif +#ifndef OVERRIDE_TABLE_64_32_rt_sigpending +TRACE_SYSCALL_TABLE(32_rt_sigpending, 32_rt_sigpending, 6125, 2) +#endif +#ifndef OVERRIDE_TABLE_64_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(32_rt_sigqueueinfo, 32_rt_sigqueueinfo, 6127, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 6131, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 6139, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 6140, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 6141, 3) +#endif +#ifndef OVERRIDE_TABLE_64_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(32_sched_rr_get_interval, 32_sched_rr_get_interval, 6145, 2) +#endif +#ifndef OVERRIDE_TABLE_64_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 6151, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 6156, 1) +#endif +#ifndef OVERRIDE_TABLE_64_umount +TRACE_SYSCALL_TABLE(umount, umount, 6161, 2) +#endif +#ifndef OVERRIDE_TABLE_64_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 6162, 2) +#endif +#ifndef OVERRIDE_TABLE_64_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 6163, 1) +#endif +#ifndef OVERRIDE_TABLE_64_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 6164, 4) +#endif +#ifndef OVERRIDE_TABLE_64_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 6165, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 6166, 2) +#endif +#ifndef OVERRIDE_TABLE_64_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 6168, 3) +#endif +#ifndef OVERRIDE_TABLE_64_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 6169, 2) +#endif +#ifndef OVERRIDE_TABLE_64_quotactl +TRACE_SYSCALL_TABLE(quotactl, quotactl, 6172, 4) +#endif +#ifndef OVERRIDE_TABLE_64_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 6180, 5) +#endif +#ifndef OVERRIDE_TABLE_64_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 6181, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 6182, 5) +#endif +#ifndef OVERRIDE_TABLE_64_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 6183, 4) +#endif +#ifndef OVERRIDE_TABLE_64_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 6184, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 6185, 4) +#endif +#ifndef OVERRIDE_TABLE_64_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 6186, 3) +#endif +#ifndef OVERRIDE_TABLE_64_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 6187, 3) +#endif +#ifndef OVERRIDE_TABLE_64_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 6188, 3) +#endif +#ifndef OVERRIDE_TABLE_64_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 6189, 2) +#endif +#ifndef OVERRIDE_TABLE_64_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 6190, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 6191, 2) +#endif +#ifndef OVERRIDE_TABLE_64_32_futex +TRACE_SYSCALL_TABLE(32_futex, 32_futex, 6194, 6) +#endif +#ifndef OVERRIDE_TABLE_64_cachectl +TRACE_SYSCALL_TABLE(cachectl, cachectl, 6198, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 6204, 3) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 6208, 4) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 6209, 4) +#endif +#ifndef OVERRIDE_TABLE_64_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 6213, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 6219, 4) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 6248, 3) +#endif +#ifndef OVERRIDE_TABLE_64_openat +TRACE_SYSCALL_TABLE(openat, openat, 6251, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 6252, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 6253, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 6254, 5) +#endif +#ifndef OVERRIDE_TABLE_64_newfstatat +TRACE_SYSCALL_TABLE(newfstatat, newfstatat, 6256, 4) +#endif +#ifndef OVERRIDE_TABLE_64_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 6257, 3) +#endif +#ifndef OVERRIDE_TABLE_64_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 6258, 4) +#endif +#ifndef OVERRIDE_TABLE_64_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 6259, 5) +#endif +#ifndef OVERRIDE_TABLE_64_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 6260, 3) +#endif +#ifndef OVERRIDE_TABLE_64_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 6261, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 6262, 3) +#endif +#ifndef OVERRIDE_TABLE_64_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 6263, 3) +#endif +#ifndef OVERRIDE_TABLE_64_splice +TRACE_SYSCALL_TABLE(splice, splice, 6267, 6) +#endif +#ifndef OVERRIDE_TABLE_64_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 6275, 3) +#endif +#ifndef OVERRIDE_TABLE_64_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 6287, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 6291, 2) +#endif +#ifndef OVERRIDE_TABLE_64_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 6293, 5) +#endif +#ifndef OVERRIDE_TABLE_64_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 6294, 5) +#endif +#ifndef OVERRIDE_TABLE_64_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 6297, 4) +#endif +#ifndef OVERRIDE_TABLE_64_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 6299, 3) +#endif +#ifndef OVERRIDE_TABLE_64_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 6302, 4) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers_override.h new file mode 100644 index 000000000000..f4c35c7e702d --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/mips-64-syscalls-3.5.0_pointers_override.h @@ -0,0 +1,8 @@ +#ifndef CREATE_SYSCALL_TABLE + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_64_sys_clone +TRACE_SYSCALL_TABLE(clone, clone, 5055, 0) + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers.h new file mode 100644 index 000000000000..ded32234f87a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers.h @@ -0,0 +1,1065 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "powerpc-32-syscalls-3.0.34_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sgetmask) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT(sgetmask, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_32_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_32_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_32_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_ssetmask +SC_LTTNG_TRACEPOINT_EVENT(ssetmask, + TP_PROTO(sc_exit(long ret,) int newmask), + TP_ARGS(sc_exit(ret,) newmask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, newmask, newmask))) +) +#endif +#ifndef OVERRIDE_32_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_32_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_32_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_32_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_signal +SC_LTTNG_TRACEPOINT_EVENT(signal, + TP_PROTO(sc_exit(long ret,) int sig, __sighandler_t handler), + TP_ARGS(sc_exit(ret,) sig, handler), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(__sighandler_t, handler, handler))) +) +#endif +#ifndef OVERRIDE_32_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_32_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_32_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_32_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, mode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_32_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_32_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_32_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_32_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_32_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_32_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_32_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_32_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_fcntl64 +SC_LTTNG_TRACEPOINT_EVENT(fcntl64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_32_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_32_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_32_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_32_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_32_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_keyctl +SC_LTTNG_TRACEPOINT_EVENT(keyctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_inout(ctf_integer(unsigned long, arg3, arg3)) sc_inout(ctf_integer(unsigned long, arg4, arg4)) sc_inout(ctf_integer(unsigned long, arg5, arg5))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "powerpc-32-syscalls-3.0.34_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(syscalls_noargs, sgetmask, 68, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 207, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 275, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(pause, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(sync, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(sgetmask, sgetmask, 68, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 207, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 275, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_exit +TRACE_SYSCALL_TABLE(exit, exit, 1, 1) +#endif +#ifndef OVERRIDE_TABLE_32_close +TRACE_SYSCALL_TABLE(close, close, 6, 1) +#endif +#ifndef OVERRIDE_TABLE_32_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 19, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 23, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 26, 4) +#endif +#ifndef OVERRIDE_TABLE_32_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 27, 1) +#endif +#ifndef OVERRIDE_TABLE_32_nice +TRACE_SYSCALL_TABLE(nice, nice, 34, 1) +#endif +#ifndef OVERRIDE_TABLE_32_kill +TRACE_SYSCALL_TABLE(kill, kill, 37, 2) +#endif +#ifndef OVERRIDE_TABLE_32_dup +TRACE_SYSCALL_TABLE(dup, dup, 41, 1) +#endif +#ifndef OVERRIDE_TABLE_32_brk +TRACE_SYSCALL_TABLE(brk, brk, 45, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 46, 1) +#endif +#ifndef OVERRIDE_TABLE_32_signal +TRACE_SYSCALL_TABLE(signal, signal, 48, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 54, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 55, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 57, 2) +#endif +#ifndef OVERRIDE_TABLE_32_umask +TRACE_SYSCALL_TABLE(umask, umask, 60, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 63, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ssetmask +TRACE_SYSCALL_TABLE(ssetmask, ssetmask, 69, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 70, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 71, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 91, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 93, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 94, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 95, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 96, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 97, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 118, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 125, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 132, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 133, 1) +#endif +#ifndef OVERRIDE_TABLE_32_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 134, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 135, 3) +#endif +#ifndef OVERRIDE_TABLE_32_personality +TRACE_SYSCALL_TABLE(personality, personality, 136, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 138, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 139, 1) +#endif +#ifndef OVERRIDE_TABLE_32_flock +TRACE_SYSCALL_TABLE(flock, flock, 143, 2) +#endif +#ifndef OVERRIDE_TABLE_32_msync +TRACE_SYSCALL_TABLE(msync, msync, 144, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 147, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 148, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 150, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 151, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 152, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 157, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 159, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 160, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 163, 5) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 164, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 169, 3) +#endif +#ifndef OVERRIDE_TABLE_32_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 171, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl64 +TRACE_SYSCALL_TABLE(fcntl64, fcntl64, 204, 3) +#endif +#ifndef OVERRIDE_TABLE_32_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 205, 3) +#endif +#ifndef OVERRIDE_TABLE_32_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 208, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 228, 1) +#endif +#ifndef OVERRIDE_TABLE_32_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 234, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 236, 1) +#endif +#ifndef OVERRIDE_TABLE_32_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 239, 5) +#endif +#ifndef OVERRIDE_TABLE_32_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 243, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 244, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 250, 3) +#endif +#ifndef OVERRIDE_TABLE_32_keyctl +TRACE_SYSCALL_TABLE(keyctl, keyctl, 271, 5) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 273, 3) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 274, 2) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 277, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 282, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tee +TRACE_SYSCALL_TABLE(tee, tee, 284, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 306, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 307, 1) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 314, 2) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 315, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 316, 3) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 318, 1) +#endif +#ifndef OVERRIDE_TABLE_32_socket +TRACE_SYSCALL_TABLE(socket, socket, 326, 3) +#endif +#ifndef OVERRIDE_TABLE_32_listen +TRACE_SYSCALL_TABLE(listen, listen, 329, 2) +#endif +#ifndef OVERRIDE_TABLE_32_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 338, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 348, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setns +TRACE_SYSCALL_TABLE(setns, setns, 350, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers_override.h new file mode 100644 index 000000000000..a41be136b954 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_integers_override.h @@ -0,0 +1,72 @@ +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mmap2, + TP_PROTO(sc_exit(unsigned long ret,) + unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret, ret)) + sc_in(ctf_integer_hex(unsigned long, addr, addr)) + sc_in(ctf_integer(size_t, len, len)) + sc_in(ctf_integer(int, prot, prot)) + sc_in(ctf_integer(int, flags, flags)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(off_t, pgoff, pgoff)) + ) +) + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + +#define OVERRIDE_32_sync_file_range2 +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range2, + TP_PROTO(sc_exit(long ret,) int fd, + unsigned int flags, + int32_t offset_low, int32_t offset_high, + int32_t nbytes_low, int32_t nbytes_high), + TP_ARGS(sc_exit(ret,) fd, flags, offset_low, offset_high, + nbytes_low, nbytes_high), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(unsigned int, flags, flags)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, nbytes, + ((loff_t) nbytes_high << 32) | nbytes_low)) + ) +) + +#else /* __BIG_ENDIAN */ + +#define OVERRIDE_32_sync_file_range2 +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range2, + TP_PROTO(sc_exit(long ret,) int fd, + unsigned int flags, + int32_t offset_high, int32_t offset_low, + int32_t nbytes_high, int32_t nbytes_low), + TP_ARGS(sc_exit(ret,) fd, flags, offset_high, offset_low, + nbytes_high, nbytes_low), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(unsigned int, flags, flags)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, nbytes, + ((loff_t) nbytes_high << 32) | nbytes_low)) + ) +) + +#endif + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 90, 6) +#define OVERRIDE_TABLE_32_mmap2 +TRACE_SYSCALL_TABLE(mmap2, mmap2, 192, 6) +#define OVERRIDE_TABLE_32_sync_file_range2 +TRACE_SYSCALL_TABLE(sync_file_range2, sync_file_range2, 308, 6) + +#endif /* CREATE_SYSCALL_TABLE */ + diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers.h new file mode 100644 index 000000000000..88c19092f209 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers.h @@ -0,0 +1,1934 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "powerpc-32-syscalls-3.0.34_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_32_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_time +SC_LTTNG_TRACEPOINT_EVENT(time, + TP_PROTO(sc_exit(long ret,) time_t * tloc), + TP_ARGS(sc_exit(ret,) tloc), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(time_t *, tloc, tloc))) +) +#endif +#ifndef OVERRIDE_32_oldumount +SC_LTTNG_TRACEPOINT_EVENT(oldumount, + TP_PROTO(sc_exit(long ret,) char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_stime +SC_LTTNG_TRACEPOINT_EVENT(stime, + TP_PROTO(sc_exit(long ret,) time_t * tptr), + TP_ARGS(sc_exit(ret,) tptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(time_t *, tptr, tptr))) +) +#endif +#ifndef OVERRIDE_32_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_32_acct +SC_LTTNG_TRACEPOINT_EVENT(acct, + TP_PROTO(sc_exit(long ret,) const char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_olduname +SC_LTTNG_TRACEPOINT_EVENT(olduname, + TP_PROTO(sc_exit(long ret,) struct oldold_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct oldold_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_sigpending +SC_LTTNG_TRACEPOINT_EVENT(sigpending, + TP_PROTO(sc_exit(long ret,) old_sigset_t * set), + TP_ARGS(sc_exit(ret,) set), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_sigset_t *, set, set))) +) +#endif +#ifndef OVERRIDE_32_uselib +SC_LTTNG_TRACEPOINT_EVENT(uselib, + TP_PROTO(sc_exit(long ret,) const char * library), + TP_ARGS(sc_exit(ret,) library), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(const char *, library, library))) +) +#endif +#ifndef OVERRIDE_32_uname +SC_LTTNG_TRACEPOINT_EVENT(uname, + TP_PROTO(sc_exit(long ret,) struct old_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct old_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_32_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_32_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_32_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_32_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_32_mq_unlink +SC_LTTNG_TRACEPOINT_EVENT(mq_unlink, + TP_PROTO(sc_exit(long ret,) const char * u_name), + TP_ARGS(sc_exit(ret,) u_name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name))) +) +#endif +#ifndef OVERRIDE_32_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, mode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_stat +SC_LTTNG_TRACEPOINT_EVENT(stat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat +SC_LTTNG_TRACEPOINT_EVENT(fstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_32_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_32_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_old_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(old_getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, resource, resource)) sc_inout(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_lstat +SC_LTTNG_TRACEPOINT_EVENT(lstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_32_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_32_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_socketcall +SC_LTTNG_TRACEPOINT_EVENT(socketcall, + TP_PROTO(sc_exit(long ret,) int call, unsigned long * args), + TP_ARGS(sc_exit(ret,) call, args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, call, call)) sc_inout(ctf_integer(unsigned long *, args, args))) +) +#endif +#ifndef OVERRIDE_32_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_32_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_32_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * set, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) set, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, set, set)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_32_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_stat64 +SC_LTTNG_TRACEPOINT_EVENT(stat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_lstat64 +SC_LTTNG_TRACEPOINT_EVENT(lstat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat64 +SC_LTTNG_TRACEPOINT_EVENT(fstat64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_32_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_32_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_32_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_mq_notify +SC_LTTNG_TRACEPOINT_EVENT(mq_notify, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct sigevent * u_notification), + TP_ARGS(sc_exit(ret,) mqdes, u_notification), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct sigevent *, u_notification, u_notification))) +) +#endif +#ifndef OVERRIDE_32_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_32_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, int mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_waitpid +SC_LTTNG_TRACEPOINT_EVENT(waitpid, + TP_PROTO(sc_exit(long ret,) pid_t pid, int * stat_addr, int options), + TP_ARGS(sc_exit(ret,) pid, stat_addr, options), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(int *, stat_addr, stat_addr)) sc_inout(ctf_integer(int, options, options))) +) +#endif +#ifndef OVERRIDE_32_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_old_readdir +SC_LTTNG_TRACEPOINT_EVENT(old_readdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct old_linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct old_linux_dirent *, dirent, dirent)) sc_inout(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_32_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, old_sigset_t * nset, old_sigset_t * oset), + TP_ARGS(sc_exit(ret,) how, nset, oset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(old_sigset_t *, nset, nset)) sc_inout(ctf_integer(old_sigset_t *, oset, oset))) +) +#endif +#ifndef OVERRIDE_32_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruid, uid_t * euid, uid_t * suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruid, ruid)) sc_out(ctf_integer(uid_t *, euid, euid)) sc_out(ctf_integer(uid_t *, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, long timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(long, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_32_nfsservctl +SC_LTTNG_TRACEPOINT_EVENT(nfsservctl, + TP_PROTO(sc_exit(long ret,) int cmd, struct nfsctl_arg * arg, void * res), + TP_ARGS(sc_exit(ret,) cmd, arg, res), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct nfsctl_arg *, arg, arg)) sc_inout(ctf_integer(void *, res, res))) +) +#endif +#ifndef OVERRIDE_32_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgid, gid_t * egid, gid_t * sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgid, rgid)) sc_out(ctf_integer(gid_t *, egid, egid)) sc_out(ctf_integer(gid_t *, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_32_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_32_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_32_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_32_statfs64 +SC_LTTNG_TRACEPOINT_EVENT(statfs64, + TP_PROTO(sc_exit(long ret,) const char * pathname, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) pathname, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(pathname, pathname)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs64 +SC_LTTNG_TRACEPOINT_EVENT(fstatfs64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) fd, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_mq_getsetattr +SC_LTTNG_TRACEPOINT_EVENT(mq_getsetattr, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct mq_attr * u_mqstat, struct mq_attr * u_omqstat), + TP_ARGS(sc_exit(ret,) mqdes, u_mqstat, u_omqstat), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct mq_attr *, u_mqstat, u_mqstat)) sc_out(ctf_integer(struct mq_attr *, u_omqstat, u_omqstat))) +) +#endif +#ifndef OVERRIDE_32_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, mode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_32_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_32_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_32_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_32_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_32_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_32_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(sendfile, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, off_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, out_fd, out_fd)) sc_inout(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(off_t *, offset, offset)) sc_inout(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_32_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_32_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_mq_open +SC_LTTNG_TRACEPOINT_EVENT(mq_open, + TP_PROTO(sc_exit(long ret,) const char * u_name, int oflag, mode_t mode, struct mq_attr * u_attr), + TP_ARGS(sc_exit(ret,) u_name, oflag, mode, u_attr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name)) sc_in(ctf_integer(int, oflag, oflag)) sc_in(ctf_integer(mode_t, mode, mode)) sc_in(ctf_integer(struct mq_attr *, u_attr, u_attr))) +) +#endif +#ifndef OVERRIDE_32_request_key +SC_LTTNG_TRACEPOINT_EVENT(request_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const char * _callout_info, key_serial_t destringid), + TP_ARGS(sc_exit(ret,) _type, _description, _callout_info, destringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const char *, _callout_info, _callout_info)) sc_in(ctf_integer(key_serial_t, destringid, destringid))) +) +#endif +#ifndef OVERRIDE_32_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_fstatat64 +SC_LTTNG_TRACEPOINT_EVENT(fstatat64, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat64 * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf)) sc_inout(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_32_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_32_send +SC_LTTNG_TRACEPOINT_EVENT(send, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned flags), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(void *, buff, buff)) sc_inout(ctf_integer(size_t, len, len)) sc_inout(ctf_integer(unsigned, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned long, offset_high, offset_high)) sc_inout(ctf_integer(unsigned long, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_32_pciconfig_read +SC_LTTNG_TRACEPOINT_EVENT(pciconfig_read, + TP_PROTO(sc_exit(long ret,) unsigned long bus, unsigned long dfn, unsigned long off, unsigned long len, void * buf), + TP_ARGS(sc_exit(ret,) bus, dfn, off, len, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, bus, bus)) sc_inout(ctf_integer(unsigned long, dfn, dfn)) sc_inout(ctf_integer(unsigned long, off, off)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(void *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_pciconfig_write +SC_LTTNG_TRACEPOINT_EVENT(pciconfig_write, + TP_PROTO(sc_exit(long ret,) unsigned long bus, unsigned long dfn, unsigned long off, unsigned long len, void * buf), + TP_ARGS(sc_exit(ret,) bus, dfn, off, len, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, bus, bus)) sc_inout(ctf_integer(unsigned long, dfn, dfn)) sc_inout(ctf_integer(unsigned long, off, off)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(void *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedsend +SC_LTTNG_TRACEPOINT_EVENT(mq_timedsend, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const char * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_in(ctf_integer(unsigned int, msg_prio, msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedreceive +SC_LTTNG_TRACEPOINT_EVENT(mq_timedreceive, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, char * u_msg_ptr, size_t msg_len, unsigned int * u_msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_out(ctf_integer(char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_out(ctf_integer(unsigned int *, u_msg_prio, u_msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_add_key +SC_LTTNG_TRACEPOINT_EVENT(add_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const void * _payload, size_t plen, key_serial_t ringid), + TP_ARGS(sc_exit(ret,) _type, _description, _payload, plen, ringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const void *, _payload, _payload)) sc_in(ctf_integer(size_t, plen, plen)) sc_in(ctf_integer(key_serial_t, ringid, ringid))) +) +#endif +#ifndef OVERRIDE_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_32_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_ipc +SC_LTTNG_TRACEPOINT_EVENT(ipc, + TP_PROTO(sc_exit(long ret,) unsigned int call, int first, unsigned long second, unsigned long third, void * ptr, long fifth), + TP_ARGS(sc_exit(ret,) call, first, second, third, ptr, fifth), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, call, call)) sc_inout(ctf_integer(int, first, first)) sc_inout(ctf_integer(unsigned long, second, second)) sc_inout(ctf_integer(unsigned long, third, third)) sc_inout(ctf_integer(void *, ptr, ptr)) sc_inout(ctf_integer(long, fifth, fifth))) +) +#endif +#ifndef OVERRIDE_32_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_32_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_32_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "powerpc-32-syscalls-3.0.34_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_32_read +TRACE_SYSCALL_TABLE(read, read, 3, 3) +#endif +#ifndef OVERRIDE_TABLE_32_write +TRACE_SYSCALL_TABLE(write, write, 4, 3) +#endif +#ifndef OVERRIDE_TABLE_32_open +TRACE_SYSCALL_TABLE(open, open, 5, 3) +#endif +#ifndef OVERRIDE_TABLE_32_waitpid +TRACE_SYSCALL_TABLE(waitpid, waitpid, 7, 3) +#endif +#ifndef OVERRIDE_TABLE_32_creat +TRACE_SYSCALL_TABLE(creat, creat, 8, 2) +#endif +#ifndef OVERRIDE_TABLE_32_link +TRACE_SYSCALL_TABLE(link, link, 9, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 10, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 12, 1) +#endif +#ifndef OVERRIDE_TABLE_32_time +TRACE_SYSCALL_TABLE(time, time, 13, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 14, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 15, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 16, 3) +#endif +#ifndef OVERRIDE_TABLE_32_stat +TRACE_SYSCALL_TABLE(stat, stat, 18, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mount +TRACE_SYSCALL_TABLE(mount, mount, 21, 5) +#endif +#ifndef OVERRIDE_TABLE_32_oldumount +TRACE_SYSCALL_TABLE(oldumount, oldumount, 22, 1) +#endif +#ifndef OVERRIDE_TABLE_32_stime +TRACE_SYSCALL_TABLE(stime, stime, 25, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fstat +TRACE_SYSCALL_TABLE(fstat, fstat, 28, 2) +#endif +#ifndef OVERRIDE_TABLE_32_utime +TRACE_SYSCALL_TABLE(utime, utime, 30, 2) +#endif +#ifndef OVERRIDE_TABLE_32_access +TRACE_SYSCALL_TABLE(access, access, 33, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rename +TRACE_SYSCALL_TABLE(rename, rename, 38, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 39, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 40, 1) +#endif +#ifndef OVERRIDE_TABLE_32_pipe +TRACE_SYSCALL_TABLE(pipe, pipe, 42, 1) +#endif +#ifndef OVERRIDE_TABLE_32_times +TRACE_SYSCALL_TABLE(times, times, 43, 1) +#endif +#ifndef OVERRIDE_TABLE_32_acct +TRACE_SYSCALL_TABLE(acct, acct, 51, 1) +#endif +#ifndef OVERRIDE_TABLE_32_umount +TRACE_SYSCALL_TABLE(umount, umount, 52, 2) +#endif +#ifndef OVERRIDE_TABLE_32_olduname +TRACE_SYSCALL_TABLE(olduname, olduname, 59, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 61, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 62, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigpending +TRACE_SYSCALL_TABLE(sigpending, sigpending, 73, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 74, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 75, 2) +#endif +#ifndef OVERRIDE_TABLE_32_old_getrlimit +TRACE_SYSCALL_TABLE(old_getrlimit, old_getrlimit, 76, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 77, 2) +#endif +#ifndef OVERRIDE_TABLE_32_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 78, 2) +#endif +#ifndef OVERRIDE_TABLE_32_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 79, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 80, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 81, 2) +#endif +#ifndef OVERRIDE_TABLE_32_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 83, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat +TRACE_SYSCALL_TABLE(lstat, lstat, 84, 2) +#endif +#ifndef OVERRIDE_TABLE_32_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 85, 3) +#endif +#ifndef OVERRIDE_TABLE_32_uselib +TRACE_SYSCALL_TABLE(uselib, uselib, 86, 1) +#endif +#ifndef OVERRIDE_TABLE_32_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 87, 2) +#endif +#ifndef OVERRIDE_TABLE_32_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 88, 4) +#endif +#ifndef OVERRIDE_TABLE_32_old_readdir +TRACE_SYSCALL_TABLE(old_readdir, old_readdir, 89, 3) +#endif +#ifndef OVERRIDE_TABLE_32_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 92, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 99, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 100, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socketcall +TRACE_SYSCALL_TABLE(socketcall, socketcall, 102, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 103, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 104, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 105, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 106, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 107, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 108, 2) +#endif +#ifndef OVERRIDE_TABLE_32_uname +TRACE_SYSCALL_TABLE(uname, uname, 109, 1) +#endif +#ifndef OVERRIDE_TABLE_32_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 114, 4) +#endif +#ifndef OVERRIDE_TABLE_32_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 115, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 116, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ipc +TRACE_SYSCALL_TABLE(ipc, ipc, 117, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 121, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 122, 1) +#endif +#ifndef OVERRIDE_TABLE_32_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 124, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigprocmask +TRACE_SYSCALL_TABLE(sigprocmask, sigprocmask, 126, 3) +#endif +#ifndef OVERRIDE_TABLE_32_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 128, 3) +#endif +#ifndef OVERRIDE_TABLE_32_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 129, 2) +#endif +#ifndef OVERRIDE_TABLE_32_llseek +TRACE_SYSCALL_TABLE(llseek, llseek, 140, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 141, 3) +#endif +#ifndef OVERRIDE_TABLE_32_select +TRACE_SYSCALL_TABLE(select, select, 142, 5) +#endif +#ifndef OVERRIDE_TABLE_32_readv +TRACE_SYSCALL_TABLE(readv, readv, 145, 3) +#endif +#ifndef OVERRIDE_TABLE_32_writev +TRACE_SYSCALL_TABLE(writev, writev, 146, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 149, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 154, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 155, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 156, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 161, 2) +#endif +#ifndef OVERRIDE_TABLE_32_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 162, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 165, 3) +#endif +#ifndef OVERRIDE_TABLE_32_poll +TRACE_SYSCALL_TABLE(poll, poll, 167, 3) +#endif +#ifndef OVERRIDE_TABLE_32_nfsservctl +TRACE_SYSCALL_TABLE(nfsservctl, nfsservctl, 168, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 170, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 173, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 174, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 175, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 176, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 177, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 178, 2) +#endif +#ifndef OVERRIDE_TABLE_32_chown +TRACE_SYSCALL_TABLE(chown, chown, 181, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 182, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile +TRACE_SYSCALL_TABLE(sendfile, sendfile, 186, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 190, 2) +#endif +#ifndef OVERRIDE_TABLE_32_stat64 +TRACE_SYSCALL_TABLE(stat64, stat64, 195, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat64 +TRACE_SYSCALL_TABLE(lstat64, lstat64, 196, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstat64 +TRACE_SYSCALL_TABLE(fstat64, fstat64, 197, 2) +#endif +#ifndef OVERRIDE_TABLE_32_pciconfig_read +TRACE_SYSCALL_TABLE(pciconfig_read, pciconfig_read, 198, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pciconfig_write +TRACE_SYSCALL_TABLE(pciconfig_write, pciconfig_write, 199, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 202, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 203, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 206, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 209, 5) +#endif +#ifndef OVERRIDE_TABLE_32_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 210, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 211, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 212, 4) +#endif +#ifndef OVERRIDE_TABLE_32_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 213, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 214, 4) +#endif +#ifndef OVERRIDE_TABLE_32_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 215, 3) +#endif +#ifndef OVERRIDE_TABLE_32_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 216, 3) +#endif +#ifndef OVERRIDE_TABLE_32_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 217, 3) +#endif +#ifndef OVERRIDE_TABLE_32_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 218, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 219, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 220, 2) +#endif +#ifndef OVERRIDE_TABLE_32_futex +TRACE_SYSCALL_TABLE(futex, futex, 221, 6) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 222, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 223, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 226, 4) +#endif +#ifndef OVERRIDE_TABLE_32_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 227, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 229, 5) +#endif +#ifndef OVERRIDE_TABLE_32_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 230, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 231, 3) +#endif +#ifndef OVERRIDE_TABLE_32_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 232, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 237, 4) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 238, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 240, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 241, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 242, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 245, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 246, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 247, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 248, 4) +#endif +#ifndef OVERRIDE_TABLE_32_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 251, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs64 +TRACE_SYSCALL_TABLE(statfs64, statfs64, 252, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs64 +TRACE_SYSCALL_TABLE(fstatfs64, fstatfs64, 253, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mq_open +TRACE_SYSCALL_TABLE(mq_open, mq_open, 262, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mq_unlink +TRACE_SYSCALL_TABLE(mq_unlink, mq_unlink, 263, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedsend +TRACE_SYSCALL_TABLE(mq_timedsend, mq_timedsend, 264, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedreceive +TRACE_SYSCALL_TABLE(mq_timedreceive, mq_timedreceive, 265, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_notify +TRACE_SYSCALL_TABLE(mq_notify, mq_notify, 266, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mq_getsetattr +TRACE_SYSCALL_TABLE(mq_getsetattr, mq_getsetattr, 267, 3) +#endif +#ifndef OVERRIDE_TABLE_32_add_key +TRACE_SYSCALL_TABLE(add_key, add_key, 269, 5) +#endif +#ifndef OVERRIDE_TABLE_32_request_key +TRACE_SYSCALL_TABLE(request_key, request_key, 270, 4) +#endif +#ifndef OVERRIDE_TABLE_32_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 272, 5) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 276, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 280, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 281, 5) +#endif +#ifndef OVERRIDE_TABLE_32_splice +TRACE_SYSCALL_TABLE(splice, splice, 283, 6) +#endif +#ifndef OVERRIDE_TABLE_32_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 285, 4) +#endif +#ifndef OVERRIDE_TABLE_32_openat +TRACE_SYSCALL_TABLE(openat, openat, 286, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 287, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 288, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 289, 5) +#endif +#ifndef OVERRIDE_TABLE_32_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 290, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatat64 +TRACE_SYSCALL_TABLE(fstatat64, fstatat64, 291, 4) +#endif +#ifndef OVERRIDE_TABLE_32_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 292, 3) +#endif +#ifndef OVERRIDE_TABLE_32_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 293, 4) +#endif +#ifndef OVERRIDE_TABLE_32_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 294, 5) +#endif +#ifndef OVERRIDE_TABLE_32_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 295, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 296, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 297, 3) +#endif +#ifndef OVERRIDE_TABLE_32_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 298, 3) +#endif +#ifndef OVERRIDE_TABLE_32_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 299, 3) +#endif +#ifndef OVERRIDE_TABLE_32_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 300, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 302, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 303, 6) +#endif +#ifndef OVERRIDE_TABLE_32_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 304, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 305, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 311, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 312, 2) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 313, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 317, 2) +#endif +#ifndef OVERRIDE_TABLE_32_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 319, 5) +#endif +#ifndef OVERRIDE_TABLE_32_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 320, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 321, 5) +#endif +#ifndef OVERRIDE_TABLE_32_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 322, 4) +#endif +#ifndef OVERRIDE_TABLE_32_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 325, 4) +#endif +#ifndef OVERRIDE_TABLE_32_bind +TRACE_SYSCALL_TABLE(bind, bind, 327, 3) +#endif +#ifndef OVERRIDE_TABLE_32_connect +TRACE_SYSCALL_TABLE(connect, connect, 328, 3) +#endif +#ifndef OVERRIDE_TABLE_32_accept +TRACE_SYSCALL_TABLE(accept, accept, 330, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 331, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 332, 3) +#endif +#ifndef OVERRIDE_TABLE_32_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 333, 4) +#endif +#ifndef OVERRIDE_TABLE_32_send +TRACE_SYSCALL_TABLE(send, send, 334, 4) +#endif +#ifndef OVERRIDE_TABLE_32_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 335, 6) +#endif +#ifndef OVERRIDE_TABLE_32_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 337, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 339, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 340, 5) +#endif +#ifndef OVERRIDE_TABLE_32_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 341, 3) +#endif +#ifndef OVERRIDE_TABLE_32_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 342, 3) +#endif +#ifndef OVERRIDE_TABLE_32_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 343, 5) +#endif +#ifndef OVERRIDE_TABLE_32_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 344, 4) +#endif +#ifndef OVERRIDE_TABLE_32_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 347, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 349, 4) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers_override.h new file mode 100644 index 000000000000..06704b90a699 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/powerpc-32-syscalls-3.0.34_pointers_override.h @@ -0,0 +1,22 @@ +#define OVERRIDE_TABLE_32_mmap2 + +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_user_array(int, fildes, fildes, 2)) + ) +) + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_execve +TRACE_SYSCALL_TABLE(execve, execve, 11, 3) +#define OVERRIDE_TABLE_32_clone +TRACE_SYSCALL_TABLE(clone, clone, 120, 5) + +#endif /* CREATE_SYSCALL_TABLE */ + diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers.h new file mode 100644 index 000000000000..1d50c86b766a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers.h @@ -0,0 +1,23 @@ +#ifdef CONFIG_X86_64 +#include "x86-64-syscalls-3.10.0-rc7_integers.h" +#endif + +#ifdef CONFIG_X86_32 +#include "x86-32-syscalls-3.1.0-rc6_integers.h" +#endif + +#ifdef CONFIG_ARM +#include "arm-32-syscalls-3.4.25_integers.h" +#endif + +#ifdef CONFIG_PPC +#include "powerpc-32-syscalls-3.0.34_integers.h" +#endif + +#ifdef CONFIG_CPU_MIPS32 +#include "mips-32-syscalls-3.18.0_integers.h" +#endif + +#ifdef CONFIG_ARM64 +#include "arm-64-syscalls-4.4.0_integers.h" +#endif diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers_override.h new file mode 100644 index 000000000000..29bcefbc849e --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_integers_override.h @@ -0,0 +1,21 @@ +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_mmap +#define OVERRIDE_64_mmap +SC_LTTNG_TRACEPOINT_EVENT(mmap, + TP_PROTO(sc_exit(unsigned long ret,) + unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long off), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, off), + TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret, ret)) + sc_in(ctf_integer_hex(unsigned long, addr, addr)) + sc_in(ctf_integer(size_t, len, len)) + sc_in(ctf_integer(int, prot, prot)) + sc_in(ctf_integer(int, flags, flags)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(off_t, offset, off)) + ) +) + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers.h new file mode 100644 index 000000000000..d60d38011cfb --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers.h @@ -0,0 +1,23 @@ +#ifdef CONFIG_X86_64 +#include "x86-64-syscalls-3.10.0-rc7_pointers.h" +#endif + +#ifdef CONFIG_X86_32 +#include "x86-32-syscalls-3.1.0-rc6_pointers.h" +#endif + +#ifdef CONFIG_ARM +#include "arm-32-syscalls-3.4.25_pointers.h" +#endif + +#ifdef CONFIG_PPC +#include "powerpc-32-syscalls-3.0.34_pointers.h" +#endif + +#ifdef CONFIG_CPU_MIPS32 +#include "mips-32-syscalls-3.18.0_pointers.h" +#endif + +#ifdef CONFIG_ARM64 +#include "arm-64-syscalls-4.4.0_pointers.h" +#endif diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers_override.h new file mode 100644 index 000000000000..cdc5645001a0 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_pointers_override.h @@ -0,0 +1,885 @@ +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_32_execve +#define OVERRIDE_64_execve +SC_LTTNG_TRACEPOINT_EVENT(execve, + TP_PROTO(sc_exit(long ret,) const char *filename, char *const *argv, char *const *envp), + TP_ARGS(sc_exit(ret,) filename, argv, envp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_user_string(filename, filename)) + sc_in(ctf_integer_hex(char *const *, argv, argv)) + sc_in(ctf_integer_hex(char *const *, envp, envp)) + ) +) + +#define OVERRIDE_32_clone +#define OVERRIDE_64_clone +SC_LTTNG_TRACEPOINT_EVENT(clone, + TP_PROTO(sc_exit(long ret,) unsigned long clone_flags, unsigned long newsp, + void __user *parent_tid, + void __user *child_tid), + TP_ARGS(sc_exit(ret,) clone_flags, newsp, parent_tid, child_tid), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer_hex(unsigned long, clone_flags, clone_flags)) + sc_in(ctf_integer_hex(unsigned long, newsp, newsp)) + sc_in(ctf_integer_hex(void *, parent_tid, parent_tid)) + sc_in(ctf_integer_hex(void *, child_tid, child_tid)) + ) +) + +/* present in 32, missing in 64 due to old kernel headers */ +#define OVERRIDE_32_getcpu +#define OVERRIDE_64_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned __user *cpup, unsigned __user *nodep, void *tcache), + TP_ARGS(sc_exit(ret,) cpup, nodep, tcache), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_integer_hex(unsigned *, cpup, cpup)) + sc_out(ctf_integer_hex(unsigned *, nodep, nodep)) + sc_inout(ctf_integer_hex(void *, tcache, tcache)) + ) +) + +#define OVERRIDE_32_pipe2 +#define OVERRIDE_64_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_user_array(int, fildes, fildes, 2)) + sc_in(ctf_integer(int, flags, flags)) + ) +) + +#define LTTNG_SYSCALL_SELECT_locvar \ + unsigned long *fds_in, *fds_out, *fds_ex; \ + unsigned long nr_bytes, nr_ulong; \ + uint8_t overflow; + +#define LTTNG_SYSCALL_SELECT_code_pre \ + sc_inout( \ + { \ + int err; \ + unsigned int n_in_bytes; \ + \ + tp_locvar->fds_in = NULL; \ + tp_locvar->fds_out = NULL; \ + tp_locvar->fds_ex = NULL; \ + tp_locvar->overflow = 0; \ + \ + sc_out( \ + if (ret <= 0) \ + goto error; \ + ) \ + \ + if (n <= 0) \ + goto error; \ + \ + /* On error or bogus input, don't copy anything. */ \ + if (n >__FD_SETSIZE) \ + goto error; \ + \ + n_in_bytes = DIV_ROUND_UP((unsigned int) n, BITS_PER_BYTE); \ + \ + /* \ + * Limit atomic memory allocation to one page, since n \ + * is limited to 1024 and the smallest page size on Linux \ + * is 4k, this should not happen, don't try to make it work. \ + */ \ + if (n_in_bytes > PAGE_SIZE) { \ + WARN_ON_ONCE(1); \ + /* Inform the user that we did not output everything. */ \ + tp_locvar->overflow = 1; \ + goto error; \ + } else { \ + tp_locvar->nr_bytes = n_in_bytes; \ + tp_locvar->nr_ulong = DIV_ROUND_UP(n_in_bytes, \ + sizeof(unsigned long)); \ + } \ + \ + if (inp) { \ + tp_locvar->fds_in = lttng_tp_mempool_alloc( \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (!tp_locvar->fds_in) \ + goto error; \ + \ + err = lib_ring_buffer_copy_from_user_check_nofault( \ + tp_locvar->fds_in, inp, \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (err != 0) \ + goto error; \ + } \ + if (outp) { \ + tp_locvar->fds_out = lttng_tp_mempool_alloc( \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (!tp_locvar->fds_out) \ + goto error; \ + \ + err = lib_ring_buffer_copy_from_user_check_nofault( \ + tp_locvar->fds_out, outp, \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (err != 0) \ + goto error; \ + } \ + if (exp) { \ + tp_locvar->fds_ex = lttng_tp_mempool_alloc( \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (!tp_locvar->fds_ex) \ + goto error; \ + \ + err = lib_ring_buffer_copy_from_user_check_nofault( \ + tp_locvar->fds_ex, exp, \ + tp_locvar->nr_ulong * sizeof(unsigned long)); \ + if (err != 0) \ + goto error; \ + } \ + goto end; \ + \ +error: \ + tp_locvar->nr_bytes = 0; \ + tp_locvar->nr_ulong = 0; \ +end: ; /* Label at end of compound statement. */ \ + } \ + ) + +#define LTTNG_SYSCALL_SELECT_fds_field_LE(name, input) \ + ctf_custom_field( \ + ctf_custom_type( \ + .atype = atype_sequence, \ + .u.sequence.length_type = __type_integer( \ + uint8_t, 0, 0, 0, __BYTE_ORDER, 10, none), \ + .u.sequence.elem_type = __type_integer(uint8_t, 0, 0, 0, \ + __BYTE_ORDER, 16, none), \ + ), \ + name, \ + ctf_custom_code( \ + unsigned int src; \ + unsigned int nr_bytes_out = 0; \ + \ + if (input) { \ + ctf_integer_type(uint8_t, tp_locvar->nr_bytes) \ + ctf_align(uint8_t) \ + } else { \ + ctf_integer_type(uint8_t, 0) \ + ctf_align(uint8_t) \ + goto skip_##name; \ + } \ + \ + for (src = 0; src < tp_locvar->nr_ulong; src++) { \ + int dst; \ + for (dst = 0; dst < sizeof(long); dst++) { \ + if (nr_bytes_out++ >= tp_locvar->nr_bytes) { \ + goto skip_##name; \ + } \ + ctf_user_integer_type(uint8_t, \ + ((uint8_t __user *) (input->fds_bits + src))[dst]); \ + } \ + } \ + skip_##name: ; \ + ) \ + ) + +#define LTTNG_SYSCALL_SELECT_fds_field_BE(name, input) \ + ctf_custom_field( \ + ctf_custom_type( \ + .atype = atype_sequence, \ + .u.sequence.length_type = __type_integer( \ + uint8_t, 0, 0, 0, __BYTE_ORDER, 10, none), \ + .u.sequence.elem_type = __type_integer(uint8_t, 0, 0, 0, \ + __BYTE_ORDER, 16, none), \ + ), \ + name, \ + ctf_custom_code( \ + unsigned int src, nr_bytes_out = 0; \ + \ + if (input) { \ + ctf_integer_type(uint8_t, tp_locvar->nr_bytes) \ + ctf_align(uint8_t) \ + } else { \ + ctf_integer_type(uint8_t, 0) \ + ctf_align(uint8_t) \ + goto skip_##name; \ + } \ + \ + for (src = 0; src < tp_locvar->nr_ulong; src++) { \ + int dst; \ + for (dst = sizeof(long); dst >= 0; dst--) { \ + if (nr_bytes_out++ >= tp_locvar->nr_bytes) { \ + goto skip_##name; \ + } \ + ctf_user_integer_type(uint8_t, \ + ((uint8_t __user *) (input->fds_bits + src))[dst]); \ + } \ + } \ + skip_##name: ; \ + ) \ + ) + +#define LTTNG_SYSCALL_SELECT_code_post \ + lttng_tp_mempool_free(tp_locvar->fds_in); \ + lttng_tp_mempool_free(tp_locvar->fds_out); \ + lttng_tp_mempool_free(tp_locvar->fds_ex); + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) +#define OVERRIDE_32_select +#define OVERRIDE_64_select +SC_LTTNG_TRACEPOINT_EVENT_CODE(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set __user *inp, fd_set __user *outp, + fd_set __user *exp, struct timeval *tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_locvar( + LTTNG_SYSCALL_SELECT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_SELECT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, n, n)) + sc_inout(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + sc_inout(ctf_integer(struct timeval *, tvp, tvp)) + + sc_inout( +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + LTTNG_SYSCALL_SELECT_fds_field_LE(readfds, inp) + LTTNG_SYSCALL_SELECT_fds_field_LE(writefds, outp) + LTTNG_SYSCALL_SELECT_fds_field_LE(exceptfds, exp) +#else + LTTNG_SYSCALL_SELECT_fds_field_BE(readfds, inp) + LTTNG_SYSCALL_SELECT_fds_field_BE(writefds, outp) + LTTNG_SYSCALL_SELECT_fds_field_BE(exceptfds, exp) +#endif + ) + ), + TP_code_post( + LTTNG_SYSCALL_SELECT_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) */ + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#define OVERRIDE_32_pselect6 +#define OVERRIDE_64_pselect6 +SC_LTTNG_TRACEPOINT_EVENT_CODE(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set __user * inp, fd_set __user * outp, + fd_set __user * exp, struct timeval __user * tvp, void __user * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp, sig), + TP_locvar( + LTTNG_SYSCALL_SELECT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_SELECT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, n, n)) + sc_inout(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + sc_inout(ctf_integer(struct timeval *, tvp, tvp)) + sc_in(ctf_integer_hex(void *, sig, sig)) + + sc_inout( +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + LTTNG_SYSCALL_SELECT_fds_field_LE(readfds, inp) + LTTNG_SYSCALL_SELECT_fds_field_LE(writefds, outp) + LTTNG_SYSCALL_SELECT_fds_field_LE(exceptfds, exp) +#else + LTTNG_SYSCALL_SELECT_fds_field_BE(readfds, inp) + LTTNG_SYSCALL_SELECT_fds_field_BE(writefds, outp) + LTTNG_SYSCALL_SELECT_fds_field_BE(exceptfds, exp) +#endif + ) + ), + TP_code_post( + LTTNG_SYSCALL_SELECT_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ + +#ifndef ONCE_LTTNG_TRACE_POLL_H +#define ONCE_LTTNG_TRACE_POLL_H + +#define LTTNG_POLL_NRFLAGS (POLLNVAL + 1) +#define POLL_FLAGS_PADDING_SIZE (sizeof(uint8_t) * BITS_PER_BYTE) - \ + ilog2(LTTNG_POLL_NRFLAGS - 1) + +/* + * Only extract the values specified by iBCS2 for now. + */ +static struct lttng_event_field lttng_pollfd_flag_fields[] = { + [ilog2(POLLIN)] = { + .name = "POLLIN", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(POLLPRI)] = { + .name = "POLLPRI", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(POLLOUT)] = { + .name = "POLLOUT", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(POLLERR)] = { + .name = "POLLERR", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(POLLHUP)] = { + .name = "POLLHUP", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(POLLNVAL)] = { + .name = "POLLNVAL", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(LTTNG_POLL_NRFLAGS)] = { + .name = "padding", + .type = __type_integer(int, POLL_FLAGS_PADDING_SIZE, 1, 0, + __LITTLE_ENDIAN, 10, none), + }, +}; + +static struct lttng_event_field lttng_pollfd_fields[] = { + [0] = { + .name = "fd", + .type = __type_integer(int, 0, 0, 0, __BYTE_ORDER, 10, none), + }, + [1] = { + .name = "raw_events", + .type = __type_integer(short, 0, 0, 0, __BYTE_ORDER, 16, none), + }, + [2] = { + .name = "events", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_pollfd_flag_fields), + .u._struct.fields = lttng_pollfd_flag_fields, + } + }, +}; + +static struct lttng_type lttng_pollfd_elem = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_pollfd_fields), + .u._struct.fields = lttng_pollfd_fields, +}; +#endif /* ONCE_LTTNG_TRACE_POLL_H */ + +#define LTTNG_SYSCALL_POLL_locvar \ + unsigned int fds_length, fds_max_len, alloc_fds; \ + struct pollfd *fds; \ + uint8_t overflow; + +#define LTTNG_SYSCALL_POLL_code_pre \ + BUILD_BUG_ON(((ARRAY_SIZE(lttng_pollfd_flag_fields) - 1) + \ + POLL_FLAGS_PADDING_SIZE) != \ + sizeof(uint8_t) * BITS_PER_BYTE); \ + tp_locvar->fds = NULL; \ + tp_locvar->overflow = 0; \ + \ + sc_in( \ + if (nfds > PAGE_SIZE / sizeof(struct pollfd)) { \ + tp_locvar->fds_length = PAGE_SIZE / sizeof(struct pollfd); \ + tp_locvar->fds_max_len = PAGE_SIZE / sizeof(struct pollfd); \ + tp_locvar->overflow = 1; \ + } else { \ + tp_locvar->fds_length = nfds; \ + tp_locvar->fds_max_len = nfds; \ + } \ + tp_locvar->alloc_fds = tp_locvar->fds_length * sizeof(struct pollfd); \ + ) \ + /* \ + * On exit, the number of active FDs is determined by ret, \ + * nfds stays the same as the entry, but we only want to \ + * output the FDs that are relevant. \ + */ \ + sc_out( \ + if (ret <= 0 || ret > nfds) \ + goto error; \ + \ + if (nfds > PAGE_SIZE / sizeof(struct pollfd)) { \ + tp_locvar->fds_length = PAGE_SIZE / sizeof(struct pollfd); \ + tp_locvar->fds_max_len = PAGE_SIZE / sizeof(struct pollfd); \ + tp_locvar->overflow = 1; \ + } else { \ + tp_locvar->fds_length = ret; \ + tp_locvar->fds_max_len = nfds; \ + } \ + tp_locvar->alloc_fds = tp_locvar->fds_max_len * sizeof(struct pollfd); \ + ) \ + { \ + int err; \ + \ + tp_locvar->fds = lttng_tp_mempool_alloc(tp_locvar->alloc_fds); \ + if (!tp_locvar->fds) \ + goto error; \ + err = lib_ring_buffer_copy_from_user_check_nofault( \ + tp_locvar->fds, ufds, tp_locvar->alloc_fds); \ + if (err != 0) \ + goto error; \ + } \ + goto end; \ + \ +error: \ + tp_locvar->fds_length = 0; \ + tp_locvar->fds_max_len = 0; \ +end: \ + ; + +#define LTTNG_SYSCALL_POLL_fds_field \ + sc_in( \ + ctf_custom_field( \ + ctf_custom_type( \ + .atype = atype_sequence_compound, \ + .u.sequence_compound.length_name = "fds_length", \ + .u.sequence_compound.elem_type = <tng_pollfd_elem, \ + ), \ + fds, \ + ctf_custom_code( \ + uint32_t i; \ + \ + ctf_align(int) /* Align on largest field in struct. */ \ + for (i = 0; i < tp_locvar->fds_length; i++) { \ + ctf_integer_type(int, tp_locvar->fds[i].fd) \ + ctf_integer_type(short, tp_locvar->fds[i].events) \ + ctf_integer_bitfield_type(uint8_t, \ + (uint8_t) tp_locvar->fds[i].events) \ + } \ + ) \ + ) \ + ) \ + sc_out( \ + ctf_custom_field( \ + ctf_custom_type( \ + .atype = atype_sequence_compound, \ + .u.sequence_compound.length_name = "fds_length", \ + .u.sequence_compound.elem_type = <tng_pollfd_elem, \ + ), \ + fds, \ + ctf_custom_code( \ + unsigned int i, nr = 0; \ + \ + ctf_align(int) /* Align on largest field in struct. */ \ + /* \ + * Iterate over the complete array, but only output \ + * "ret" active FDs. \ + */ \ + for (i = 0; i < tp_locvar->fds_max_len; i++) { \ + if (!tp_locvar->fds[i].revents) \ + continue; \ + if (nr++ >= tp_locvar->fds_length) \ + break; \ + ctf_integer_type(int, tp_locvar->fds[i].fd) \ + ctf_integer_type(short, tp_locvar->fds[i].revents) \ + ctf_integer_bitfield_type(uint8_t, \ + (uint8_t) tp_locvar->fds[i].revents) \ + } \ + /* \ + * If there is a discrepancy between ret and the \ + * content of revents (e.g. caused by userspace corrupting \ + * the array from a concurrent thread), we have to output \ + * zeros to keep the trace readable. \ + */ \ + for (i = nr; i < tp_locvar->fds_length; i++) { \ + ctf_integer_type(int, 0) \ + ctf_integer_type(short, 0) \ + ctf_integer_bitfield_type(uint8_t, 0) \ + } \ + ) \ + ) \ + ) + +#define LTTNG_SYSCALL_POLL_code_post \ + lttng_tp_mempool_free(tp_locvar->fds); + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) +#define OVERRIDE_32_poll +#define OVERRIDE_64_poll +SC_LTTNG_TRACEPOINT_EVENT_CODE(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd __user * ufds, + unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_locvar( + LTTNG_SYSCALL_POLL_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_POLL_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, timeout_msecs, timeout_msecs)) + sc_inout(ctf_integer(unsigned int, nfds, nfds)) + sc_inout(ctf_integer(unsigned int, fds_length, tp_locvar->fds_length)) + sc_in(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + LTTNG_SYSCALL_POLL_fds_field + ), + TP_code_post( + LTTNG_SYSCALL_POLL_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) */ + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#define OVERRIDE_32_ppoll +#define OVERRIDE_64_ppoll +SC_LTTNG_TRACEPOINT_EVENT_CODE(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd __user * ufds, + unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_locvar( + LTTNG_SYSCALL_POLL_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_POLL_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(struct timespec *, tsp, tsp)) + sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) + sc_in(ctf_integer(size_t, sigsetsize, sigsetsize)) + sc_inout(ctf_integer(unsigned int, nfds, nfds)) + sc_inout(ctf_integer(unsigned int, fds_length, tp_locvar->fds_length)) + sc_inout(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + LTTNG_SYSCALL_POLL_fds_field + ), + TP_code_post( + LTTNG_SYSCALL_POLL_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ + +#include + +SC_LTTNG_TRACEPOINT_ENUM(lttng_epoll_op, + TP_ENUM_VALUES( + ctf_enum_value("EPOLL_CTL_ADD", EPOLL_CTL_ADD) + ctf_enum_value("EPOLL_CTL_DEL", EPOLL_CTL_DEL) + ctf_enum_value("EPOLL_CTL_MOD", EPOLL_CTL_MOD) + ) +) + +#ifndef ONCE_LTTNG_TRACE_EPOLL_CTL_H +#define ONCE_LTTNG_TRACE_EPOLL_CTL_H + +#define LTTNG_EPOLL_NRFLAGS (POLLHUP + 1) +#define EPOLL_FLAGS_PADDING_SIZE (sizeof(uint8_t) * BITS_PER_BYTE) - \ + ilog2(LTTNG_EPOLL_NRFLAGS - 1) + +/* + * Only extract the values specified by iBCS2 for now. + */ +static struct lttng_event_field lttng_epoll_ctl_events_fields[] = { + /* 0x0001 */ + [ilog2(POLLIN)] = { + .name = "EPOLLIN", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + /* 0x0002 */ + [ilog2(POLLPRI)] = { + .name = "EPOLLPRI", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + /* 0x0004 */ + [ilog2(POLLOUT)] = { + .name = "EPOLLOUT", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + /* 0x0008 */ + [ilog2(POLLERR)] = { + .name = "EPOLLERR", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + /* 0x0010 */ + [ilog2(POLLHUP)] = { + .name = "EPOLLHUP", + .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), + }, + [ilog2(LTTNG_EPOLL_NRFLAGS)] = { + .name = "padding", + .type = __type_integer(int, EPOLL_FLAGS_PADDING_SIZE, 1, 0, + __LITTLE_ENDIAN, 10, none), + }, + +}; + +static struct lttng_event_field lttng_epoll_data_fields[] = { + [0] = { + .name = "u64", + .type = __type_integer(uint64_t, 0, 0, 0, __BYTE_ORDER, 16, none), + }, + [1] = { + .name = "fd", + .type = __type_integer(int, 0, 0, 0, __BYTE_ORDER, 10, none), + }, +}; + +static struct lttng_event_field epoll_ctl_fields[] = { + [0] = { + .name = "data_union", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_epoll_data_fields), + .u._struct.fields = lttng_epoll_data_fields, + } + }, + [1] = { + .name = "raw_events", + .type = __type_integer(uint32_t, 0, 0, 0, __BYTE_ORDER, 16, none), + }, + [2] = { + .name = "events", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_epoll_ctl_events_fields), + .u._struct.fields = lttng_epoll_ctl_events_fields, + } + }, +}; +#endif /* ONCE_LTTNG_TRACE_EPOLL_CTL_H */ + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#define OVERRIDE_32_epoll_ctl +#define OVERRIDE_64_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT_CODE(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, + struct epoll_event __user * uevent), + TP_ARGS(sc_exit(ret,) epfd, op, fd, uevent), + TP_locvar( + struct epoll_event event; + int err; + ), + TP_code_pre( + tp_locvar->err = lib_ring_buffer_copy_from_user_check_nofault( + &tp_locvar->event, uevent, sizeof(struct epoll_event)); + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, epfd, epfd)) + sc_in(ctf_enum(lttng_epoll_op, int, op_enum, op)) + sc_in(ctf_integer(int, fd, fd)) + sc_in( + ctf_custom_field( + ctf_custom_type( + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(epoll_ctl_fields), + .u._struct.fields = epoll_ctl_fields, + ), + event, + ctf_custom_code( + ctf_align(uint64_t) + if (!tp_locvar->err) { + ctf_integer_type(uint64_t, tp_locvar->event.data) + ctf_integer_type(int, tp_locvar->event.data) + ctf_integer_bitfield_type(uint32_t, + tp_locvar->event.events) + ctf_integer_bitfield_type(uint8_t, + (uint8_t) tp_locvar->event.events) + } else { + ctf_integer_type(uint64_t, 0) + ctf_integer_type(int, 0) + ctf_integer_bitfield_type(uint32_t, 0) + ctf_integer_bitfield_type(uint8_t, 0) + } + ) + ) + ) + ), + TP_code_post() +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ + +#ifndef ONCE_LTTNG_TRACE_EPOLL_H +#define ONCE_LTTNG_TRACE_EPOLL_H + +static struct lttng_event_field lttng_epoll_wait_fields[] = { + [0] = { + .name = "data_union", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_epoll_data_fields), + .u._struct.fields = lttng_epoll_data_fields, + } + }, + [1] = { + .name = "raw_events", + .type = __type_integer(uint32_t, 0, 0, 0, __BYTE_ORDER, 16, none), + }, + [2] = { + .name = "events", + .type = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_epoll_ctl_events_fields), + .u._struct.fields = lttng_epoll_ctl_events_fields, + } + }, +}; + +static struct lttng_type lttng_epoll_wait_elem = { + .atype = atype_struct, + .u._struct.nr_fields = ARRAY_SIZE(lttng_epoll_wait_fields), + .u._struct.fields = lttng_epoll_wait_fields, +}; + +#endif /* ONCE_LTTNG_TRACE_EPOLL_H */ + +#define LTTNG_SYSCALL_EPOLL_WAIT_locvar \ + sc_out( \ + unsigned int fds_length; \ + uint8_t overflow; \ + struct epoll_event *events; \ + ) + +#define LTTNG_SYSCALL_EPOLL_WAIT_code_pre \ + BUILD_BUG_ON(((ARRAY_SIZE(lttng_epoll_ctl_events_fields) - 1) + \ + EPOLL_FLAGS_PADDING_SIZE) != \ + sizeof(uint8_t) * BITS_PER_BYTE); \ + sc_out({ \ + int err; \ + unsigned long maxalloc; \ + \ + tp_locvar->fds_length = 0; \ + tp_locvar->events = NULL; \ + tp_locvar->overflow = 0; \ + \ + if (maxevents <= 0 || ret <= 0 || ret > maxevents) \ + goto skip_code; \ + \ + if (maxevents > PAGE_SIZE / sizeof(struct epoll_event)) { \ + maxalloc = PAGE_SIZE / sizeof(struct epoll_event); \ + } else { \ + maxalloc = maxevents; \ + } \ + \ + if (ret > maxalloc) { \ + tp_locvar->fds_length = maxalloc; \ + tp_locvar->overflow = 1; \ + } else { \ + tp_locvar->fds_length = ret; \ + } \ + \ + tp_locvar->events = lttng_tp_mempool_alloc( \ + maxalloc * sizeof(struct epoll_event)); \ + if (!tp_locvar->events) { \ + tp_locvar->fds_length = 0; \ + goto skip_code; \ + } \ + \ + err = lib_ring_buffer_copy_from_user_check_nofault( \ + tp_locvar->events, uevents, \ + maxalloc * sizeof(struct epoll_event)); \ + if (err != 0) \ + tp_locvar->fds_length = 0; \ + } \ + skip_code: \ + ) + +#define LTTNG_SYSCALL_EPOLL_WAIT_fds_field \ + ctf_custom_field( \ + ctf_custom_type( \ + .atype = atype_sequence_compound, \ + .u.sequence_compound.length_name = \ + "fds_length", \ + .u.sequence_compound.elem_type = \ + <tng_epoll_wait_elem, \ + ), \ + fds, \ + ctf_custom_code( \ + uint32_t i; \ + \ + ctf_align(uint64_t) \ + for (i = 0; i < tp_locvar->fds_length; i++) { \ + ctf_integer_type(uint64_t, tp_locvar->events[i].data) \ + ctf_integer_type(int, tp_locvar->events[i].data) \ + ctf_integer_bitfield_type(uint32_t, \ + tp_locvar->events[i].events) \ + ctf_integer_bitfield_type(uint8_t, \ + (uint8_t) tp_locvar->events[i].events) \ + } \ + ) \ + ) + +#define LTTNG_SYSCALL_EPOLL_WAIT_code_post \ + sc_out( \ + lttng_tp_mempool_free(tp_locvar->events); \ + ) + + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) +#define OVERRIDE_32_epoll_wait +#define OVERRIDE_64_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT_CODE(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event __user * uevents, + int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, uevents, maxevents, timeout), + TP_locvar( + LTTNG_SYSCALL_EPOLL_WAIT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_EPOLL_WAIT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, epfd, epfd)) + sc_in(ctf_integer(int, maxevents, maxevents)) + sc_in(ctf_integer(int, timeout, timeout)) + sc_out(ctf_integer(unsigned int, fds_length, tp_locvar->fds_length)) + sc_out(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + sc_out( + LTTNG_SYSCALL_EPOLL_WAIT_fds_field + ) + ), + TP_code_post( + LTTNG_SYSCALL_EPOLL_WAIT_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM) */ + +#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#define OVERRIDE_32_epoll_pwait +#define OVERRIDE_64_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT_CODE(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event __user * uevents, + int maxevents, int timeout, const sigset_t __user * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, uevents, maxevents, timeout, sigmask, sigsetsize), + TP_locvar( + LTTNG_SYSCALL_EPOLL_WAIT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_EPOLL_WAIT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, epfd, epfd)) + sc_in(ctf_integer(int, maxevents, maxevents)) + sc_in(ctf_integer(int, timeout, timeout)) + sc_in(ctf_integer_hex(const sigset_t *, sigmask, sigmask)) + sc_in(ctf_integer(size_t, sigsetsize, sigsetsize)) + sc_out(ctf_integer(unsigned int, fds_length, tp_locvar->fds_length)) + sc_out(ctf_integer(uint8_t, overflow, tp_locvar->overflow)) + sc_out( + LTTNG_SYSCALL_EPOLL_WAIT_fds_field + ) + ), + TP_code_post( + LTTNG_SYSCALL_EPOLL_WAIT_code_post + ) +) +#endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ + +#if (defined(CONFIG_X86_64) && !defined(LTTNG_SC_COMPAT)) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#define OVERRIDE_32_socketpair +#define OVERRIDE_64_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int *usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, family, family)) + sc_in(ctf_integer(int, type, type)) + sc_in(ctf_integer(int, protocol, protocol)) + sc_out(ctf_user_array(int, socket, usockvec, 2)) + ) +) +#endif /* (defined(CONFIG_X86_64) && !defined(LTTNG_SC_COMPAT)) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_unknown.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_unknown.h new file mode 100644 index 000000000000..c72e7d0e8c1b --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/syscalls_unknown.h @@ -0,0 +1,53 @@ +#if !defined(_TRACE_SYSCALLS_UNKNOWN_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_UNKNOWN_H + +#include +#include + +#define UNKNOWN_SYSCALL_NRARGS 6 + +#undef TP_PROBE_CB +#define TP_PROBE_CB(_template) &syscall_entry_probe + +LTTNG_TRACEPOINT_EVENT(syscall_entry_unknown, + TP_PROTO(int id, unsigned long *args), + TP_ARGS(id, args), + TP_FIELDS( + ctf_integer(int, id, id) + ctf_array(unsigned long, args, args, UNKNOWN_SYSCALL_NRARGS) + ) +) +LTTNG_TRACEPOINT_EVENT(compat_syscall_entry_unknown, + TP_PROTO(int id, unsigned long *args), + TP_ARGS(id, args), + TP_FIELDS( + ctf_integer(int, id, id) + ctf_array(unsigned long, args, args, UNKNOWN_SYSCALL_NRARGS) + ) +) + +#undef TP_PROBE_CB +#define TP_PROBE_CB(_template) &syscall_exit_probe + +LTTNG_TRACEPOINT_EVENT(syscall_exit_unknown, + TP_PROTO(int id, long ret, unsigned long *args), + TP_ARGS(id, ret, args), + TP_FIELDS( + ctf_integer(int, id, id) + ctf_integer(long, ret, ret) + ctf_array(unsigned long, args, args, UNKNOWN_SYSCALL_NRARGS) + ) +) +LTTNG_TRACEPOINT_EVENT(compat_syscall_exit_unknown, + TP_PROTO(int id, long ret, unsigned long *args), + TP_ARGS(id, ret, args), + TP_FIELDS( + ctf_integer(int, id, id) + ctf_integer(long, ret, ret) + ctf_array(unsigned long, args, args, UNKNOWN_SYSCALL_NRARGS) + ) +) +#endif /* _TRACE_SYSCALLS_UNKNOWN_H */ + +/* This part must be outside protection */ +#include diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers.h new file mode 100644 index 000000000000..9d5dba0854fd --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers.h @@ -0,0 +1,1209 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "x86-32-syscalls-3.1.0-rc6_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_32_getuid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid16) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_32_getgid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid16) +#endif +#ifndef OVERRIDE_32_geteuid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid16) +#endif +#ifndef OVERRIDE_32_getegid16 +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid16) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sgetmask) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid16 +SC_LTTNG_TRACEPOINT_EVENT(getuid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid16 +SC_LTTNG_TRACEPOINT_EVENT(getgid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid16 +SC_LTTNG_TRACEPOINT_EVENT(geteuid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid16 +SC_LTTNG_TRACEPOINT_EVENT(getegid16, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sgetmask +SC_LTTNG_TRACEPOINT_EVENT(sgetmask, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_32_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_32_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_setuid16 +SC_LTTNG_TRACEPOINT_EVENT(setuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_32_nice +SC_LTTNG_TRACEPOINT_EVENT(nice, + TP_PROTO(sc_exit(long ret,) int increment), + TP_ARGS(sc_exit(ret,) increment), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, increment, increment))) +) +#endif +#ifndef OVERRIDE_32_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_32_setgid16 +SC_LTTNG_TRACEPOINT_EVENT(setgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_ssetmask +SC_LTTNG_TRACEPOINT_EVENT(ssetmask, + TP_PROTO(sc_exit(long ret,) int newmask), + TP_ARGS(sc_exit(ret,) newmask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, newmask, newmask))) +) +#endif +#ifndef OVERRIDE_32_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_32_setfsuid16 +SC_LTTNG_TRACEPOINT_EVENT(setfsuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid16 +SC_LTTNG_TRACEPOINT_EVENT(setfsgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_32_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_32_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_32_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_32_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_32_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_32_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_32_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_32_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_signal +SC_LTTNG_TRACEPOINT_EVENT(signal, + TP_PROTO(sc_exit(long ret,) int sig, __sighandler_t handler), + TP_ARGS(sc_exit(ret,) sig, handler), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, sig, sig)) sc_inout(ctf_integer(__sighandler_t, handler, handler))) +) +#endif +#ifndef OVERRIDE_32_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_32_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_32_setreuid16 +SC_LTTNG_TRACEPOINT_EVENT(setreuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t ruid, old_uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, ruid, ruid)) sc_inout(ctf_integer(old_uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid16 +SC_LTTNG_TRACEPOINT_EVENT(setregid16, + TP_PROTO(sc_exit(long ret,) old_gid_t rgid, old_gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, rgid, rgid)) sc_inout(ctf_integer(old_gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_32_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, mode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_bdflush +SC_LTTNG_TRACEPOINT_EVENT(bdflush, + TP_PROTO(sc_exit(long ret,) int func, long data), + TP_ARGS(sc_exit(ret,) func, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, func, func)) sc_inout(ctf_integer(long, data, data))) +) +#endif +#ifndef OVERRIDE_32_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_32_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_32_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_32_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_32_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_32_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fanotify_init +SC_LTTNG_TRACEPOINT_EVENT(fanotify_init, + TP_PROTO(sc_exit(long ret,) unsigned int flags, unsigned int event_f_flags), + TP_ARGS(sc_exit(ret,) flags, event_f_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(unsigned int, event_f_flags, event_f_flags))) +) +#endif +#ifndef OVERRIDE_32_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_32_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_fchown16 +SC_LTTNG_TRACEPOINT_EVENT(fchown16, + TP_PROTO(sc_exit(long ret,) unsigned int fd, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_32_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_32_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_32_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_setresuid16 +SC_LTTNG_TRACEPOINT_EVENT(setresuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t ruid, old_uid_t euid, old_uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t, ruid, ruid)) sc_inout(ctf_integer(old_uid_t, euid, euid)) sc_inout(ctf_integer(old_uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid16 +SC_LTTNG_TRACEPOINT_EVENT(setresgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t rgid, old_gid_t egid, old_gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t, rgid, rgid)) sc_inout(ctf_integer(old_gid_t, egid, egid)) sc_inout(ctf_integer(old_gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_32_fcntl64 +SC_LTTNG_TRACEPOINT_EVENT(fcntl64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_32_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_32_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_32_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_keyctl +SC_LTTNG_TRACEPOINT_EVENT(keyctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_inout(ctf_integer(unsigned long, arg3, arg3)) sc_inout(ctf_integer(unsigned long, arg4, arg4)) sc_inout(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_32_mmap_pgoff +SC_LTTNG_TRACEPOINT_EVENT(mmap_pgoff, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, len, len)) sc_inout(ctf_integer(unsigned long, prot, prot)) sc_inout(ctf_integer(unsigned long, flags, flags)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(unsigned long, pgoff, pgoff))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "x86-32-syscalls-3.1.0-rc6_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid16, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid16, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid16, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid16 +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid16, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(syscalls_noargs, sgetmask, 68, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 199, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 200, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 201, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 202, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 224, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 291, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 0, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 20, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid16 +TRACE_SYSCALL_TABLE(getuid16, getuid16, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_32_pause +TRACE_SYSCALL_TABLE(pause, pause, 29, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sync +TRACE_SYSCALL_TABLE(sync, sync, 36, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid16 +TRACE_SYSCALL_TABLE(getgid16, getgid16, 47, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid16 +TRACE_SYSCALL_TABLE(geteuid16, geteuid16, 49, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid16 +TRACE_SYSCALL_TABLE(getegid16, getegid16, 50, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 64, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 65, 0) +#endif +#ifndef OVERRIDE_TABLE_32_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 66, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sgetmask +TRACE_SYSCALL_TABLE(sgetmask, sgetmask, 68, 0) +#endif +#ifndef OVERRIDE_TABLE_32_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_32_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_32_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 158, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 199, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 200, 0) +#endif +#ifndef OVERRIDE_TABLE_32_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 201, 0) +#endif +#ifndef OVERRIDE_TABLE_32_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 202, 0) +#endif +#ifndef OVERRIDE_TABLE_32_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 224, 0) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 291, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_32_exit +TRACE_SYSCALL_TABLE(exit, exit, 1, 1) +#endif +#ifndef OVERRIDE_TABLE_32_close +TRACE_SYSCALL_TABLE(close, close, 6, 1) +#endif +#ifndef OVERRIDE_TABLE_32_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 19, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid16 +TRACE_SYSCALL_TABLE(setuid16, setuid16, 23, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 26, 4) +#endif +#ifndef OVERRIDE_TABLE_32_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 27, 1) +#endif +#ifndef OVERRIDE_TABLE_32_nice +TRACE_SYSCALL_TABLE(nice, nice, 34, 1) +#endif +#ifndef OVERRIDE_TABLE_32_kill +TRACE_SYSCALL_TABLE(kill, kill, 37, 2) +#endif +#ifndef OVERRIDE_TABLE_32_dup +TRACE_SYSCALL_TABLE(dup, dup, 41, 1) +#endif +#ifndef OVERRIDE_TABLE_32_brk +TRACE_SYSCALL_TABLE(brk, brk, 45, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid16 +TRACE_SYSCALL_TABLE(setgid16, setgid16, 46, 1) +#endif +#ifndef OVERRIDE_TABLE_32_signal +TRACE_SYSCALL_TABLE(signal, signal, 48, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 54, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 55, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 57, 2) +#endif +#ifndef OVERRIDE_TABLE_32_umask +TRACE_SYSCALL_TABLE(umask, umask, 60, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 63, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ssetmask +TRACE_SYSCALL_TABLE(ssetmask, ssetmask, 69, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid16 +TRACE_SYSCALL_TABLE(setreuid16, setreuid16, 70, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid16 +TRACE_SYSCALL_TABLE(setregid16, setregid16, 71, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 91, 2) +#endif +#ifndef OVERRIDE_TABLE_32_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 93, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 94, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown16 +TRACE_SYSCALL_TABLE(fchown16, fchown16, 95, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 96, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 97, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 118, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 125, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 132, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 133, 1) +#endif +#ifndef OVERRIDE_TABLE_32_bdflush +TRACE_SYSCALL_TABLE(bdflush, bdflush, 134, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 135, 3) +#endif +#ifndef OVERRIDE_TABLE_32_personality +TRACE_SYSCALL_TABLE(personality, personality, 136, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid16 +TRACE_SYSCALL_TABLE(setfsuid16, setfsuid16, 138, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid16 +TRACE_SYSCALL_TABLE(setfsgid16, setfsgid16, 139, 1) +#endif +#ifndef OVERRIDE_TABLE_32_flock +TRACE_SYSCALL_TABLE(flock, flock, 143, 2) +#endif +#ifndef OVERRIDE_TABLE_32_msync +TRACE_SYSCALL_TABLE(msync, msync, 144, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 147, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 148, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 150, 2) +#endif +#ifndef OVERRIDE_TABLE_32_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 151, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 152, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 157, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 159, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 160, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 163, 5) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid16 +TRACE_SYSCALL_TABLE(setresuid16, setresuid16, 164, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid16 +TRACE_SYSCALL_TABLE(setresgid16, setresgid16, 170, 3) +#endif +#ifndef OVERRIDE_TABLE_32_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 172, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mmap_pgoff +TRACE_SYSCALL_TABLE(mmap_pgoff, mmap_pgoff, 192, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 203, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 204, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 207, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 208, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 210, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 213, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 214, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 215, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 216, 1) +#endif +#ifndef OVERRIDE_TABLE_32_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 219, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fcntl64 +TRACE_SYSCALL_TABLE(fcntl64, fcntl64, 221, 3) +#endif +#ifndef OVERRIDE_TABLE_32_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 238, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 246, 1) +#endif +#ifndef OVERRIDE_TABLE_32_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 252, 1) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 254, 1) +#endif +#ifndef OVERRIDE_TABLE_32_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 257, 5) +#endif +#ifndef OVERRIDE_TABLE_32_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 262, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 263, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 270, 3) +#endif +#ifndef OVERRIDE_TABLE_32_keyctl +TRACE_SYSCALL_TABLE(keyctl, keyctl, 288, 5) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 289, 3) +#endif +#ifndef OVERRIDE_TABLE_32_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 290, 2) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 293, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 310, 1) +#endif +#ifndef OVERRIDE_TABLE_32_tee +TRACE_SYSCALL_TABLE(tee, tee, 315, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 322, 2) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 323, 1) +#endif +#ifndef OVERRIDE_TABLE_32_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 328, 2) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 329, 1) +#endif +#ifndef OVERRIDE_TABLE_32_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 330, 3) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 332, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fanotify_init +TRACE_SYSCALL_TABLE(fanotify_init, fanotify_init, 338, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 344, 1) +#endif +#ifndef OVERRIDE_TABLE_32_setns +TRACE_SYSCALL_TABLE(setns, setns, 346, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers_override.h new file mode 100644 index 000000000000..df814d30a754 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_integers_override.h @@ -0,0 +1,85 @@ +#ifndef CONFIG_UID16 + +#define OVERRIDE_32_getuid16 +#define OVERRIDE_32_getgid16 +#define OVERRIDE_32_geteuid16 +#define OVERRIDE_32_getegid16 +#define OVERRIDE_32_setuid16 +#define OVERRIDE_32_setgid16 +#define OVERRIDE_32_setfsuid16 +#define OVERRIDE_32_setfsgid16 +#define OVERRIDE_32_setreuid16 +#define OVERRIDE_32_setregid16 +#define OVERRIDE_32_fchown16 +#define OVERRIDE_32_setresuid16 +#define OVERRIDE_32_setresgid16 + +#define OVERRIDE_TABLE_32_getuid16 +#define OVERRIDE_TABLE_32_getgid16 +#define OVERRIDE_TABLE_32_geteuid16 +#define OVERRIDE_TABLE_32_getegid16 +#define OVERRIDE_TABLE_32_setuid16 +#define OVERRIDE_TABLE_32_setgid16 +#define OVERRIDE_TABLE_32_setreuid16 +#define OVERRIDE_TABLE_32_setregid16 +#define OVERRIDE_TABLE_32_fchown16 +#define OVERRIDE_TABLE_32_setfsuid16 +#define OVERRIDE_TABLE_32_setfsgid16 +#define OVERRIDE_TABLE_32_setresuid16 +#define OVERRIDE_TABLE_32_setresgid16 + +#endif + +#ifndef CREATE_SYSCALL_TABLE + +/* mmap_pgoff is kernel internal. mmap2 is exposed in unistd.h. */ +#define OVERRIDE_32_mmap_pgoff +#define OVERRIDE_32_mmap2 +SC_LTTNG_TRACEPOINT_EVENT(mmap2, + TP_PROTO(sc_exit(unsigned long ret,) + unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, pgoff), + TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret, ret)) + sc_in(ctf_integer_hex(unsigned long, addr, addr)) + sc_in(ctf_integer(size_t, len, len)) + sc_in(ctf_integer(int, prot, prot)) + sc_in(ctf_integer(int, flags, flags)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(off_t, pgoff, pgoff)) + ) +) + +#define OVERRIDE_32_sync_file_range +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range, + TP_PROTO(sc_exit(long ret,) int fd, + int32_t offset_low, int32_t offset_high, + int32_t nbytes_low, int32_t nbytes_high, + unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, offset_low, offset_high, + nbytes_low, nbytes_high, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer(loff_t, offset, + ((loff_t) offset_high << 32) | offset_low)) + sc_in(ctf_integer(loff_t, nbytes, + ((loff_t) nbytes_high << 32) | nbytes_low)) + sc_in(ctf_integer(unsigned int, flags, flags)) + ) +) + +#else /* #ifndef CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_32_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 90, 6) + +/* mmap_pgoff is kernel internal. mmap2 is exposed in unistd.h. */ +#define OVERRIDE_TABLE_32_mmap_pgoff +#define OVERRIDE_TABLE_32_mmap2 +TRACE_SYSCALL_TABLE(mmap2, mmap2, 192, 6) + +#define OVERRIDE_TABLE_32_sync_file_range +TRACE_SYSCALL_TABLE(sync_file_range, sync_file_range, 314, 6) + +#endif /* #else #ifndef CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers.h new file mode 100644 index 000000000000..19d9adead748 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers.h @@ -0,0 +1,1864 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "x86-32-syscalls-3.1.0-rc6_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_32_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_time +SC_LTTNG_TRACEPOINT_EVENT(time, + TP_PROTO(sc_exit(long ret,) time_t * tloc), + TP_ARGS(sc_exit(ret,) tloc), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(time_t *, tloc, tloc))) +) +#endif +#ifndef OVERRIDE_32_oldumount +SC_LTTNG_TRACEPOINT_EVENT(oldumount, + TP_PROTO(sc_exit(long ret,) char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_stime +SC_LTTNG_TRACEPOINT_EVENT(stime, + TP_PROTO(sc_exit(long ret,) time_t * tptr), + TP_ARGS(sc_exit(ret,) tptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(time_t *, tptr, tptr))) +) +#endif +#ifndef OVERRIDE_32_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_32_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_32_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_32_acct +SC_LTTNG_TRACEPOINT_EVENT(acct, + TP_PROTO(sc_exit(long ret,) const char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_olduname +SC_LTTNG_TRACEPOINT_EVENT(olduname, + TP_PROTO(sc_exit(long ret,) struct oldold_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct oldold_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_32_sigpending +SC_LTTNG_TRACEPOINT_EVENT(sigpending, + TP_PROTO(sc_exit(long ret,) old_sigset_t * set), + TP_ARGS(sc_exit(ret,) set), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_sigset_t *, set, set))) +) +#endif +#ifndef OVERRIDE_32_old_select +SC_LTTNG_TRACEPOINT_EVENT(old_select, + TP_PROTO(sc_exit(long ret,) struct sel_arg_struct * arg), + TP_ARGS(sc_exit(ret,) arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct sel_arg_struct *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_uselib +SC_LTTNG_TRACEPOINT_EVENT(uselib, + TP_PROTO(sc_exit(long ret,) const char * library), + TP_ARGS(sc_exit(ret,) library), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(const char *, library, library))) +) +#endif +#ifndef OVERRIDE_32_old_mmap +SC_LTTNG_TRACEPOINT_EVENT(old_mmap, + TP_PROTO(sc_exit(long ret,) struct mmap_arg_struct * arg), + TP_ARGS(sc_exit(ret,) arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct mmap_arg_struct *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_uname +SC_LTTNG_TRACEPOINT_EVENT(uname, + TP_PROTO(sc_exit(long ret,) struct old_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct old_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_32_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_32_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_32_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_32_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_32_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_32_mq_unlink +SC_LTTNG_TRACEPOINT_EVENT(mq_unlink, + TP_PROTO(sc_exit(long ret,) const char * u_name), + TP_ARGS(sc_exit(ret,) u_name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name))) +) +#endif +#ifndef OVERRIDE_32_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, mode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_stat +SC_LTTNG_TRACEPOINT_EVENT(stat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat +SC_LTTNG_TRACEPOINT_EVENT(fstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_32_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_32_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_old_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(old_getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, resource, resource)) sc_inout(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_32_getgroups16 +SC_LTTNG_TRACEPOINT_EVENT(getgroups16, + TP_PROTO(sc_exit(long ret,) int gidsetsize, old_gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, gidsetsize, gidsetsize)) sc_inout(ctf_integer(old_gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups16 +SC_LTTNG_TRACEPOINT_EVENT(setgroups16, + TP_PROTO(sc_exit(long ret,) int gidsetsize, old_gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, gidsetsize, gidsetsize)) sc_inout(ctf_integer(old_gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_lstat +SC_LTTNG_TRACEPOINT_EVENT(lstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct __old_kernel_stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct __old_kernel_stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_32_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_32_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_socketcall +SC_LTTNG_TRACEPOINT_EVENT(socketcall, + TP_PROTO(sc_exit(long ret,) int call, unsigned long * args), + TP_ARGS(sc_exit(ret,) call, args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, call, call)) sc_inout(ctf_integer(unsigned long *, args, args))) +) +#endif +#ifndef OVERRIDE_32_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_32_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_32_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * set, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) set, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, set, set)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_32_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_32_stat64 +SC_LTTNG_TRACEPOINT_EVENT(stat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_lstat64 +SC_LTTNG_TRACEPOINT_EVENT(lstat64, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_fstat64 +SC_LTTNG_TRACEPOINT_EVENT(fstat64, + TP_PROTO(sc_exit(long ret,) unsigned long fd, struct stat64 * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_32_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_32_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_32_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_32_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_32_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_32_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_32_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_mq_notify +SC_LTTNG_TRACEPOINT_EVENT(mq_notify, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct sigevent * u_notification), + TP_ARGS(sc_exit(ret,) mqdes, u_notification), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct sigevent *, u_notification, u_notification))) +) +#endif +#ifndef OVERRIDE_32_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_32_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_32_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, int mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_waitpid +SC_LTTNG_TRACEPOINT_EVENT(waitpid, + TP_PROTO(sc_exit(long ret,) pid_t pid, int * stat_addr, int options), + TP_ARGS(sc_exit(ret,) pid, stat_addr, options), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(pid_t, pid, pid)) sc_inout(ctf_integer(int *, stat_addr, stat_addr)) sc_inout(ctf_integer(int, options, options))) +) +#endif +#ifndef OVERRIDE_32_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_lchown16 +SC_LTTNG_TRACEPOINT_EVENT(lchown16, + TP_PROTO(sc_exit(long ret,) const char * filename, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_old_readdir +SC_LTTNG_TRACEPOINT_EVENT(old_readdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct old_linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(struct old_linux_dirent *, dirent, dirent)) sc_inout(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_32_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_32_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, old_sigset_t * nset, old_sigset_t * oset), + TP_ARGS(sc_exit(ret,) how, nset, oset), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, how, how)) sc_inout(ctf_integer(old_sigset_t *, nset, nset)) sc_inout(ctf_integer(old_sigset_t *, oset, oset))) +) +#endif +#ifndef OVERRIDE_32_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_32_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_32_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_32_getresuid16 +SC_LTTNG_TRACEPOINT_EVENT(getresuid16, + TP_PROTO(sc_exit(long ret,) old_uid_t * ruid, old_uid_t * euid, old_uid_t * suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_uid_t *, ruid, ruid)) sc_inout(ctf_integer(old_uid_t *, euid, euid)) sc_inout(ctf_integer(old_uid_t *, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, long timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(long, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_32_getresgid16 +SC_LTTNG_TRACEPOINT_EVENT(getresgid16, + TP_PROTO(sc_exit(long ret,) old_gid_t * rgid, old_gid_t * egid, old_gid_t * sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(old_gid_t *, rgid, rgid)) sc_inout(ctf_integer(old_gid_t *, egid, egid)) sc_inout(ctf_integer(old_gid_t *, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_chown16 +SC_LTTNG_TRACEPOINT_EVENT(chown16, + TP_PROTO(sc_exit(long ret,) const char * filename, old_uid_t user, old_gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(old_uid_t, user, user)) sc_inout(ctf_integer(old_gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruid, uid_t * euid, uid_t * suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruid, ruid)) sc_out(ctf_integer(uid_t *, euid, euid)) sc_out(ctf_integer(uid_t *, suid, suid))) +) +#endif +#ifndef OVERRIDE_32_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgid, gid_t * egid, gid_t * sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgid, rgid)) sc_out(ctf_integer(gid_t *, egid, egid)) sc_out(ctf_integer(gid_t *, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_32_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_32_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_32_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_32_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_32_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_32_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_32_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_32_statfs64 +SC_LTTNG_TRACEPOINT_EVENT(statfs64, + TP_PROTO(sc_exit(long ret,) const char * pathname, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) pathname, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_user_string(pathname, pathname)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_fstatfs64 +SC_LTTNG_TRACEPOINT_EVENT(fstatfs64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, size_t sz, struct statfs64 * buf), + TP_ARGS(sc_exit(ret,) fd, sz, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(size_t, sz, sz)) sc_inout(ctf_integer(struct statfs64 *, buf, buf))) +) +#endif +#ifndef OVERRIDE_32_mq_getsetattr +SC_LTTNG_TRACEPOINT_EVENT(mq_getsetattr, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct mq_attr * u_mqstat, struct mq_attr * u_omqstat), + TP_ARGS(sc_exit(ret,) mqdes, u_mqstat, u_omqstat), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct mq_attr *, u_mqstat, u_mqstat)) sc_out(ctf_integer(struct mq_attr *, u_omqstat, u_omqstat))) +) +#endif +#ifndef OVERRIDE_32_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_32_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_32_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, mode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(mode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_32_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_32_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_32_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_32_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_quotactl +SC_LTTNG_TRACEPOINT_EVENT(quotactl, + TP_PROTO(sc_exit(long ret,) unsigned int cmd, const char * special, qid_t id, void * addr), + TP_ARGS(sc_exit(ret,) cmd, special, id, addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(const char *, special, special)) sc_in(ctf_integer(qid_t, id, id)) sc_inout(ctf_integer(void *, addr, addr))) +) +#endif +#ifndef OVERRIDE_32_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_sendfile +SC_LTTNG_TRACEPOINT_EVENT(sendfile, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, off_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, out_fd, out_fd)) sc_inout(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(off_t *, offset, offset)) sc_inout(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_32_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_32_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_32_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_32_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_32_mq_open +SC_LTTNG_TRACEPOINT_EVENT(mq_open, + TP_PROTO(sc_exit(long ret,) const char * u_name, int oflag, mode_t mode, struct mq_attr * u_attr), + TP_ARGS(sc_exit(ret,) u_name, oflag, mode, u_attr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name)) sc_in(ctf_integer(int, oflag, oflag)) sc_in(ctf_integer(mode_t, mode, mode)) sc_in(ctf_integer(struct mq_attr *, u_attr, u_attr))) +) +#endif +#ifndef OVERRIDE_32_kexec_load +SC_LTTNG_TRACEPOINT_EVENT(kexec_load, + TP_PROTO(sc_exit(long ret,) unsigned long entry, unsigned long nr_segments, struct kexec_segment * segments, unsigned long flags), + TP_ARGS(sc_exit(ret,) entry, nr_segments, segments, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, entry, entry)) sc_in(ctf_integer(unsigned long, nr_segments, nr_segments)) sc_in(ctf_integer(struct kexec_segment *, segments, segments)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_request_key +SC_LTTNG_TRACEPOINT_EVENT(request_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const char * _callout_info, key_serial_t destringid), + TP_ARGS(sc_exit(ret,) _type, _description, _callout_info, destringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const char *, _callout_info, _callout_info)) sc_in(ctf_integer(key_serial_t, destringid, destringid))) +) +#endif +#ifndef OVERRIDE_32_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_32_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_32_fstatat64 +SC_LTTNG_TRACEPOINT_EVENT(fstatat64, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat64 * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(int, dfd, dfd)) sc_inout(ctf_user_string(filename, filename)) sc_inout(ctf_integer(struct stat64 *, statbuf, statbuf)) sc_inout(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_32_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_32_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_32_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_32_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_32_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_32_llseek +SC_LTTNG_TRACEPOINT_EVENT(llseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int origin), + TP_ARGS(sc_exit(ret,) fd, offset_high, offset_low, result, origin), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, fd, fd)) sc_inout(ctf_integer(unsigned long, offset_high, offset_high)) sc_inout(ctf_integer(unsigned long, offset_low, offset_low)) sc_inout(ctf_integer(loff_t *, result, result)) sc_inout(ctf_integer(unsigned int, origin, origin))) +) +#endif +#ifndef OVERRIDE_32_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_32_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedsend +SC_LTTNG_TRACEPOINT_EVENT(mq_timedsend, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const char * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_in(ctf_integer(unsigned int, msg_prio, msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_mq_timedreceive +SC_LTTNG_TRACEPOINT_EVENT(mq_timedreceive, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, char * u_msg_ptr, size_t msg_len, unsigned int * u_msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_out(ctf_integer(char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_out(ctf_integer(unsigned int *, u_msg_prio, u_msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_32_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_32_add_key +SC_LTTNG_TRACEPOINT_EVENT(add_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const void * _payload, size_t plen, key_serial_t ringid), + TP_ARGS(sc_exit(ret,) _type, _description, _payload, plen, ringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const void *, _payload, _payload)) sc_in(ctf_integer(size_t, plen, plen)) sc_in(ctf_integer(key_serial_t, ringid, ringid))) +) +#endif +#ifndef OVERRIDE_32_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_32_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_32_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_32_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_32_ipc +SC_LTTNG_TRACEPOINT_EVENT(ipc, + TP_PROTO(sc_exit(long ret,) unsigned int call, int first, unsigned long second, unsigned long third, void * ptr, long fifth), + TP_ARGS(sc_exit(ret,) call, first, second, third, ptr, fifth), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(unsigned int, call, call)) sc_inout(ctf_integer(int, first, first)) sc_inout(ctf_integer(unsigned long, second, second)) sc_inout(ctf_integer(unsigned long, third, third)) sc_inout(ctf_integer(void *, ptr, ptr)) sc_inout(ctf_integer(long, fifth, fifth))) +) +#endif +#ifndef OVERRIDE_32_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_32_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_32_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_32_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "x86-32-syscalls-3.1.0-rc6_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_32_read +TRACE_SYSCALL_TABLE(read, read, 3, 3) +#endif +#ifndef OVERRIDE_TABLE_32_write +TRACE_SYSCALL_TABLE(write, write, 4, 3) +#endif +#ifndef OVERRIDE_TABLE_32_open +TRACE_SYSCALL_TABLE(open, open, 5, 3) +#endif +#ifndef OVERRIDE_TABLE_32_waitpid +TRACE_SYSCALL_TABLE(waitpid, waitpid, 7, 3) +#endif +#ifndef OVERRIDE_TABLE_32_creat +TRACE_SYSCALL_TABLE(creat, creat, 8, 2) +#endif +#ifndef OVERRIDE_TABLE_32_link +TRACE_SYSCALL_TABLE(link, link, 9, 2) +#endif +#ifndef OVERRIDE_TABLE_32_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 10, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 12, 1) +#endif +#ifndef OVERRIDE_TABLE_32_time +TRACE_SYSCALL_TABLE(time, time, 13, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 14, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 15, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown16 +TRACE_SYSCALL_TABLE(lchown16, lchown16, 16, 3) +#endif +#ifndef OVERRIDE_TABLE_32_stat +TRACE_SYSCALL_TABLE(stat, stat, 18, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mount +TRACE_SYSCALL_TABLE(mount, mount, 21, 5) +#endif +#ifndef OVERRIDE_TABLE_32_oldumount +TRACE_SYSCALL_TABLE(oldumount, oldumount, 22, 1) +#endif +#ifndef OVERRIDE_TABLE_32_stime +TRACE_SYSCALL_TABLE(stime, stime, 25, 1) +#endif +#ifndef OVERRIDE_TABLE_32_fstat +TRACE_SYSCALL_TABLE(fstat, fstat, 28, 2) +#endif +#ifndef OVERRIDE_TABLE_32_utime +TRACE_SYSCALL_TABLE(utime, utime, 30, 2) +#endif +#ifndef OVERRIDE_TABLE_32_access +TRACE_SYSCALL_TABLE(access, access, 33, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rename +TRACE_SYSCALL_TABLE(rename, rename, 38, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 39, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 40, 1) +#endif +#ifndef OVERRIDE_TABLE_32_pipe +TRACE_SYSCALL_TABLE(pipe, pipe, 42, 1) +#endif +#ifndef OVERRIDE_TABLE_32_times +TRACE_SYSCALL_TABLE(times, times, 43, 1) +#endif +#ifndef OVERRIDE_TABLE_32_acct +TRACE_SYSCALL_TABLE(acct, acct, 51, 1) +#endif +#ifndef OVERRIDE_TABLE_32_umount +TRACE_SYSCALL_TABLE(umount, umount, 52, 2) +#endif +#ifndef OVERRIDE_TABLE_32_olduname +TRACE_SYSCALL_TABLE(olduname, olduname, 59, 1) +#endif +#ifndef OVERRIDE_TABLE_32_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 61, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 62, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sigpending +TRACE_SYSCALL_TABLE(sigpending, sigpending, 73, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 74, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 75, 2) +#endif +#ifndef OVERRIDE_TABLE_32_old_getrlimit +TRACE_SYSCALL_TABLE(old_getrlimit, old_getrlimit, 76, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 77, 2) +#endif +#ifndef OVERRIDE_TABLE_32_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 78, 2) +#endif +#ifndef OVERRIDE_TABLE_32_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 79, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups16 +TRACE_SYSCALL_TABLE(getgroups16, getgroups16, 80, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups16 +TRACE_SYSCALL_TABLE(setgroups16, setgroups16, 81, 2) +#endif +#ifndef OVERRIDE_TABLE_32_old_select +TRACE_SYSCALL_TABLE(old_select, old_select, 82, 1) +#endif +#ifndef OVERRIDE_TABLE_32_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 83, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat +TRACE_SYSCALL_TABLE(lstat, lstat, 84, 2) +#endif +#ifndef OVERRIDE_TABLE_32_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 85, 3) +#endif +#ifndef OVERRIDE_TABLE_32_uselib +TRACE_SYSCALL_TABLE(uselib, uselib, 86, 1) +#endif +#ifndef OVERRIDE_TABLE_32_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 87, 2) +#endif +#ifndef OVERRIDE_TABLE_32_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 88, 4) +#endif +#ifndef OVERRIDE_TABLE_32_old_readdir +TRACE_SYSCALL_TABLE(old_readdir, old_readdir, 89, 3) +#endif +#ifndef OVERRIDE_TABLE_32_old_mmap +TRACE_SYSCALL_TABLE(old_mmap, old_mmap, 90, 1) +#endif +#ifndef OVERRIDE_TABLE_32_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 92, 2) +#endif +#ifndef OVERRIDE_TABLE_32_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 99, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 100, 2) +#endif +#ifndef OVERRIDE_TABLE_32_socketcall +TRACE_SYSCALL_TABLE(socketcall, socketcall, 102, 2) +#endif +#ifndef OVERRIDE_TABLE_32_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 103, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 104, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 105, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 106, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 107, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 108, 2) +#endif +#ifndef OVERRIDE_TABLE_32_uname +TRACE_SYSCALL_TABLE(uname, uname, 109, 1) +#endif +#ifndef OVERRIDE_TABLE_32_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 114, 4) +#endif +#ifndef OVERRIDE_TABLE_32_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 115, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 116, 1) +#endif +#ifndef OVERRIDE_TABLE_32_ipc +TRACE_SYSCALL_TABLE(ipc, ipc, 117, 6) +#endif +#ifndef OVERRIDE_TABLE_32_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 121, 2) +#endif +#ifndef OVERRIDE_TABLE_32_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 122, 1) +#endif +#ifndef OVERRIDE_TABLE_32_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 124, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sigprocmask +TRACE_SYSCALL_TABLE(sigprocmask, sigprocmask, 126, 3) +#endif +#ifndef OVERRIDE_TABLE_32_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 128, 3) +#endif +#ifndef OVERRIDE_TABLE_32_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 129, 2) +#endif +#ifndef OVERRIDE_TABLE_32_quotactl +TRACE_SYSCALL_TABLE(quotactl, quotactl, 131, 4) +#endif +#ifndef OVERRIDE_TABLE_32_llseek +TRACE_SYSCALL_TABLE(llseek, llseek, 140, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 141, 3) +#endif +#ifndef OVERRIDE_TABLE_32_select +TRACE_SYSCALL_TABLE(select, select, 142, 5) +#endif +#ifndef OVERRIDE_TABLE_32_readv +TRACE_SYSCALL_TABLE(readv, readv, 145, 3) +#endif +#ifndef OVERRIDE_TABLE_32_writev +TRACE_SYSCALL_TABLE(writev, writev, 146, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 149, 1) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 154, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 155, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 156, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 161, 2) +#endif +#ifndef OVERRIDE_TABLE_32_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 162, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid16 +TRACE_SYSCALL_TABLE(getresuid16, getresuid16, 165, 3) +#endif +#ifndef OVERRIDE_TABLE_32_poll +TRACE_SYSCALL_TABLE(poll, poll, 168, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid16 +TRACE_SYSCALL_TABLE(getresgid16, getresgid16, 171, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 174, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 175, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 176, 2) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 177, 4) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 178, 3) +#endif +#ifndef OVERRIDE_TABLE_32_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 179, 2) +#endif +#ifndef OVERRIDE_TABLE_32_chown16 +TRACE_SYSCALL_TABLE(chown16, chown16, 182, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 183, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile +TRACE_SYSCALL_TABLE(sendfile, sendfile, 187, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 191, 2) +#endif +#ifndef OVERRIDE_TABLE_32_stat64 +TRACE_SYSCALL_TABLE(stat64, stat64, 195, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lstat64 +TRACE_SYSCALL_TABLE(lstat64, lstat64, 196, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fstat64 +TRACE_SYSCALL_TABLE(fstat64, fstat64, 197, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 198, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 205, 2) +#endif +#ifndef OVERRIDE_TABLE_32_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 206, 2) +#endif +#ifndef OVERRIDE_TABLE_32_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 209, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 211, 3) +#endif +#ifndef OVERRIDE_TABLE_32_chown +TRACE_SYSCALL_TABLE(chown, chown, 212, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 217, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 218, 3) +#endif +#ifndef OVERRIDE_TABLE_32_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 220, 3) +#endif +#ifndef OVERRIDE_TABLE_32_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 226, 5) +#endif +#ifndef OVERRIDE_TABLE_32_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 227, 5) +#endif +#ifndef OVERRIDE_TABLE_32_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 228, 5) +#endif +#ifndef OVERRIDE_TABLE_32_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 229, 4) +#endif +#ifndef OVERRIDE_TABLE_32_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 230, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 231, 4) +#endif +#ifndef OVERRIDE_TABLE_32_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 232, 3) +#endif +#ifndef OVERRIDE_TABLE_32_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 233, 3) +#endif +#ifndef OVERRIDE_TABLE_32_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 234, 3) +#endif +#ifndef OVERRIDE_TABLE_32_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 235, 2) +#endif +#ifndef OVERRIDE_TABLE_32_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 236, 2) +#endif +#ifndef OVERRIDE_TABLE_32_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 237, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 239, 4) +#endif +#ifndef OVERRIDE_TABLE_32_futex +TRACE_SYSCALL_TABLE(futex, futex, 240, 6) +#endif +#ifndef OVERRIDE_TABLE_32_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 241, 3) +#endif +#ifndef OVERRIDE_TABLE_32_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 242, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 245, 2) +#endif +#ifndef OVERRIDE_TABLE_32_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 247, 5) +#endif +#ifndef OVERRIDE_TABLE_32_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 248, 3) +#endif +#ifndef OVERRIDE_TABLE_32_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 249, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 255, 4) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 256, 4) +#endif +#ifndef OVERRIDE_TABLE_32_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 258, 1) +#endif +#ifndef OVERRIDE_TABLE_32_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 259, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 260, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 261, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 264, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 265, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 266, 2) +#endif +#ifndef OVERRIDE_TABLE_32_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 267, 4) +#endif +#ifndef OVERRIDE_TABLE_32_statfs64 +TRACE_SYSCALL_TABLE(statfs64, statfs64, 268, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatfs64 +TRACE_SYSCALL_TABLE(fstatfs64, fstatfs64, 269, 3) +#endif +#ifndef OVERRIDE_TABLE_32_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 271, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mq_open +TRACE_SYSCALL_TABLE(mq_open, mq_open, 277, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mq_unlink +TRACE_SYSCALL_TABLE(mq_unlink, mq_unlink, 278, 1) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedsend +TRACE_SYSCALL_TABLE(mq_timedsend, mq_timedsend, 279, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_timedreceive +TRACE_SYSCALL_TABLE(mq_timedreceive, mq_timedreceive, 280, 5) +#endif +#ifndef OVERRIDE_TABLE_32_mq_notify +TRACE_SYSCALL_TABLE(mq_notify, mq_notify, 281, 2) +#endif +#ifndef OVERRIDE_TABLE_32_mq_getsetattr +TRACE_SYSCALL_TABLE(mq_getsetattr, mq_getsetattr, 282, 3) +#endif +#ifndef OVERRIDE_TABLE_32_kexec_load +TRACE_SYSCALL_TABLE(kexec_load, kexec_load, 283, 4) +#endif +#ifndef OVERRIDE_TABLE_32_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 284, 5) +#endif +#ifndef OVERRIDE_TABLE_32_add_key +TRACE_SYSCALL_TABLE(add_key, add_key, 286, 5) +#endif +#ifndef OVERRIDE_TABLE_32_request_key +TRACE_SYSCALL_TABLE(request_key, request_key, 287, 4) +#endif +#ifndef OVERRIDE_TABLE_32_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 292, 3) +#endif +#ifndef OVERRIDE_TABLE_32_openat +TRACE_SYSCALL_TABLE(openat, openat, 295, 4) +#endif +#ifndef OVERRIDE_TABLE_32_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 296, 3) +#endif +#ifndef OVERRIDE_TABLE_32_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 297, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 298, 5) +#endif +#ifndef OVERRIDE_TABLE_32_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 299, 3) +#endif +#ifndef OVERRIDE_TABLE_32_fstatat64 +TRACE_SYSCALL_TABLE(fstatat64, fstatat64, 300, 4) +#endif +#ifndef OVERRIDE_TABLE_32_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 301, 3) +#endif +#ifndef OVERRIDE_TABLE_32_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 302, 4) +#endif +#ifndef OVERRIDE_TABLE_32_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 303, 5) +#endif +#ifndef OVERRIDE_TABLE_32_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 304, 3) +#endif +#ifndef OVERRIDE_TABLE_32_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 305, 4) +#endif +#ifndef OVERRIDE_TABLE_32_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 306, 3) +#endif +#ifndef OVERRIDE_TABLE_32_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 307, 3) +#endif +#ifndef OVERRIDE_TABLE_32_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 308, 6) +#endif +#ifndef OVERRIDE_TABLE_32_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 309, 5) +#endif +#ifndef OVERRIDE_TABLE_32_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 311, 2) +#endif +#ifndef OVERRIDE_TABLE_32_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 312, 3) +#endif +#ifndef OVERRIDE_TABLE_32_splice +TRACE_SYSCALL_TABLE(splice, splice, 313, 6) +#endif +#ifndef OVERRIDE_TABLE_32_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 316, 4) +#endif +#ifndef OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 318, 3) +#endif +#ifndef OVERRIDE_TABLE_32_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 319, 6) +#endif +#ifndef OVERRIDE_TABLE_32_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 320, 4) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 321, 3) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 325, 4) +#endif +#ifndef OVERRIDE_TABLE_32_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 326, 2) +#endif +#ifndef OVERRIDE_TABLE_32_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 327, 4) +#endif +#ifndef OVERRIDE_TABLE_32_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 331, 2) +#endif +#ifndef OVERRIDE_TABLE_32_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 333, 5) +#endif +#ifndef OVERRIDE_TABLE_32_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 334, 5) +#endif +#ifndef OVERRIDE_TABLE_32_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 335, 4) +#endif +#ifndef OVERRIDE_TABLE_32_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 336, 5) +#endif +#ifndef OVERRIDE_TABLE_32_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 337, 5) +#endif +#ifndef OVERRIDE_TABLE_32_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 340, 4) +#endif +#ifndef OVERRIDE_TABLE_32_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 343, 2) +#endif +#ifndef OVERRIDE_TABLE_32_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 345, 4) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers_override.h new file mode 100644 index 000000000000..7c804a67e3cb --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-32-syscalls-3.1.0-rc6_pointers_override.h @@ -0,0 +1,43 @@ + +#ifndef CREATE_SYSCALL_TABLE + +# ifndef CONFIG_UID16 +# define OVERRIDE_32_getgroups16 +# define OVERRIDE_32_setgroups16 +# define OVERRIDE_32_lchown16 +# define OVERRIDE_32_getresuid16 +# define OVERRIDE_32_getresgid16 +# define OVERRIDE_32_chown16 +# endif + +#define OVERRIDE_32_pipe +#define OVERRIDE_64_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_user_array(int, fildes, fildes, 2)) + ) +) + +#else /* CREATE_SYSCALL_TABLE */ + +# ifndef CONFIG_UID16 +# define OVERRIDE_TABLE_32_getgroups16 +# define OVERRIDE_TABLE_32_setgroups16 +# define OVERRIDE_TABLE_32_lchown16 +# define OVERRIDE_TABLE_32_getresuid16 +# define OVERRIDE_TABLE_32_getresgid16 +# define OVERRIDE_TABLE_32_chown16 +# endif + +#define OVERRIDE_TABLE_32_execve +TRACE_SYSCALL_TABLE(execve, execve, 11, 3) +#define OVERRIDE_TABLE_32_clone +TRACE_SYSCALL_TABLE(clone, clone, 120, 5) +#define OVERRIDE_TABLE_32_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 318, 3) + +#endif /* CREATE_SYSCALL_TABLE */ + + diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers.h new file mode 100644 index 000000000000..f7cf7c1d6866 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers.h @@ -0,0 +1,1099 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_INTEGERS_H + +#include +#include +#include "x86-64-syscalls-3.10.0-rc7_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs, + TP_FIELDS() +) +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sched_yield) +#endif +#ifndef OVERRIDE_64_pause +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, pause) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpid) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getuid) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getgid) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, geteuid) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getegid) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getppid) +#endif +#ifndef OVERRIDE_64_getpgrp +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, getpgrp) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, setsid) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, munlockall) +#endif +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, vhangup) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, sync) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, gettid) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, restart_syscall) +#endif +#ifndef OVERRIDE_64_inotify_init +SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, inotify_init) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_sched_yield +SC_LTTNG_TRACEPOINT_EVENT(sched_yield, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_pause +SC_LTTNG_TRACEPOINT_EVENT(pause, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getpid +SC_LTTNG_TRACEPOINT_EVENT(getpid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getuid +SC_LTTNG_TRACEPOINT_EVENT(getuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getgid +SC_LTTNG_TRACEPOINT_EVENT(getgid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_geteuid +SC_LTTNG_TRACEPOINT_EVENT(geteuid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getegid +SC_LTTNG_TRACEPOINT_EVENT(getegid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getppid +SC_LTTNG_TRACEPOINT_EVENT(getppid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_getpgrp +SC_LTTNG_TRACEPOINT_EVENT(getpgrp, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_setsid +SC_LTTNG_TRACEPOINT_EVENT(setsid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_munlockall +SC_LTTNG_TRACEPOINT_EVENT(munlockall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_vhangup +SC_LTTNG_TRACEPOINT_EVENT(vhangup, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_sync +SC_LTTNG_TRACEPOINT_EVENT(sync, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_gettid +SC_LTTNG_TRACEPOINT_EVENT(gettid, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_restart_syscall +SC_LTTNG_TRACEPOINT_EVENT(restart_syscall, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#ifndef OVERRIDE_64_inotify_init +SC_LTTNG_TRACEPOINT_EVENT(inotify_init, + TP_PROTO(sc_exit(long ret)), + TP_ARGS(sc_exit(ret)), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))) +) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_64_close +SC_LTTNG_TRACEPOINT_EVENT(close, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_brk +SC_LTTNG_TRACEPOINT_EVENT(brk, + TP_PROTO(sc_exit(long ret,) unsigned long brk), + TP_ARGS(sc_exit(ret,) brk), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, brk, brk))) +) +#endif +#ifndef OVERRIDE_64_dup +SC_LTTNG_TRACEPOINT_EVENT(dup, + TP_PROTO(sc_exit(long ret,) unsigned int fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_64_alarm +SC_LTTNG_TRACEPOINT_EVENT(alarm, + TP_PROTO(sc_exit(long ret,) unsigned int seconds), + TP_ARGS(sc_exit(ret,) seconds), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, seconds, seconds))) +) +#endif +#ifndef OVERRIDE_64_exit +SC_LTTNG_TRACEPOINT_EVENT(exit, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_fsync +SC_LTTNG_TRACEPOINT_EVENT(fsync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fdatasync +SC_LTTNG_TRACEPOINT_EVENT(fdatasync, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_fchdir +SC_LTTNG_TRACEPOINT_EVENT(fchdir, + TP_PROTO(sc_exit(long ret,) unsigned int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_umask +SC_LTTNG_TRACEPOINT_EVENT(umask, + TP_PROTO(sc_exit(long ret,) int mask), + TP_ARGS(sc_exit(ret,) mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_setuid +SC_LTTNG_TRACEPOINT_EVENT(setuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setgid +SC_LTTNG_TRACEPOINT_EVENT(setgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_getpgid +SC_LTTNG_TRACEPOINT_EVENT(getpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_setfsuid +SC_LTTNG_TRACEPOINT_EVENT(setfsuid, + TP_PROTO(sc_exit(long ret,) uid_t uid), + TP_ARGS(sc_exit(ret,) uid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, uid, uid))) +) +#endif +#ifndef OVERRIDE_64_setfsgid +SC_LTTNG_TRACEPOINT_EVENT(setfsgid, + TP_PROTO(sc_exit(long ret,) gid_t gid), + TP_ARGS(sc_exit(ret,) gid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, gid, gid))) +) +#endif +#ifndef OVERRIDE_64_getsid +SC_LTTNG_TRACEPOINT_EVENT(getsid, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_personality +SC_LTTNG_TRACEPOINT_EVENT(personality, + TP_PROTO(sc_exit(long ret,) unsigned int personality), + TP_ARGS(sc_exit(ret,) personality), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, personality, personality))) +) +#endif +#ifndef OVERRIDE_64_sched_getscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_getscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid), + TP_ARGS(sc_exit(ret,) pid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_max +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_max, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_sched_get_priority_min +SC_LTTNG_TRACEPOINT_EVENT(sched_get_priority_min, + TP_PROTO(sc_exit(long ret,) int policy), + TP_ARGS(sc_exit(ret,) policy), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, policy, policy))) +) +#endif +#ifndef OVERRIDE_64_mlockall +SC_LTTNG_TRACEPOINT_EVENT(mlockall, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_io_destroy +SC_LTTNG_TRACEPOINT_EVENT(io_destroy, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx), + TP_ARGS(sc_exit(ret,) ctx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx, ctx))) +) +#endif +#ifndef OVERRIDE_64_epoll_create +SC_LTTNG_TRACEPOINT_EVENT(epoll_create, + TP_PROTO(sc_exit(long ret,) int size), + TP_ARGS(sc_exit(ret,) size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, size, size))) +) +#endif +#ifndef OVERRIDE_64_timer_getoverrun +SC_LTTNG_TRACEPOINT_EVENT(timer_getoverrun, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_timer_delete +SC_LTTNG_TRACEPOINT_EVENT(timer_delete, + TP_PROTO(sc_exit(long ret,) timer_t timer_id), + TP_ARGS(sc_exit(ret,) timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id))) +) +#endif +#ifndef OVERRIDE_64_exit_group +SC_LTTNG_TRACEPOINT_EVENT(exit_group, + TP_PROTO(sc_exit(long ret,) int error_code), + TP_ARGS(sc_exit(ret,) error_code), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, error_code, error_code))) +) +#endif +#ifndef OVERRIDE_64_unshare +SC_LTTNG_TRACEPOINT_EVENT(unshare, + TP_PROTO(sc_exit(long ret,) unsigned long unshare_flags), + TP_ARGS(sc_exit(ret,) unshare_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, unshare_flags, unshare_flags))) +) +#endif +#ifndef OVERRIDE_64_eventfd +SC_LTTNG_TRACEPOINT_EVENT(eventfd, + TP_PROTO(sc_exit(long ret,) unsigned int count), + TP_ARGS(sc_exit(ret,) count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_epoll_create1 +SC_LTTNG_TRACEPOINT_EVENT(epoll_create1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_inotify_init1 +SC_LTTNG_TRACEPOINT_EVENT(inotify_init1, + TP_PROTO(sc_exit(long ret,) int flags), + TP_ARGS(sc_exit(ret,) flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_syncfs +SC_LTTNG_TRACEPOINT_EVENT(syncfs, + TP_PROTO(sc_exit(long ret,) int fd), + TP_ARGS(sc_exit(ret,) fd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd))) +) +#endif +#ifndef OVERRIDE_64_munmap +SC_LTTNG_TRACEPOINT_EVENT(munmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, size_t len), + TP_ARGS(sc_exit(ret,) addr, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_dup2 +SC_LTTNG_TRACEPOINT_EVENT(dup2, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd), + TP_ARGS(sc_exit(ret,) oldfd, newfd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd))) +) +#endif +#ifndef OVERRIDE_64_shutdown +SC_LTTNG_TRACEPOINT_EVENT(shutdown, + TP_PROTO(sc_exit(long ret,) int fd, int how), + TP_ARGS(sc_exit(ret,) fd, how), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, how, how))) +) +#endif +#ifndef OVERRIDE_64_listen +SC_LTTNG_TRACEPOINT_EVENT(listen, + TP_PROTO(sc_exit(long ret,) int fd, int backlog), + TP_ARGS(sc_exit(ret,) fd, backlog), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, backlog, backlog))) +) +#endif +#ifndef OVERRIDE_64_kill +SC_LTTNG_TRACEPOINT_EVENT(kill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_msgget +SC_LTTNG_TRACEPOINT_EVENT(msgget, + TP_PROTO(sc_exit(long ret,) key_t key, int msgflg), + TP_ARGS(sc_exit(ret,) key, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_flock +SC_LTTNG_TRACEPOINT_EVENT(flock, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd), + TP_ARGS(sc_exit(ret,) fd, cmd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd))) +) +#endif +#ifndef OVERRIDE_64_ftruncate +SC_LTTNG_TRACEPOINT_EVENT(ftruncate, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned long length), + TP_ARGS(sc_exit(ret,) fd, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned long, length, length))) +) +#endif +#ifndef OVERRIDE_64_fchmod +SC_LTTNG_TRACEPOINT_EVENT(fchmod, + TP_PROTO(sc_exit(long ret,) unsigned int fd, umode_t mode), + TP_ARGS(sc_exit(ret,) fd, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_setpgid +SC_LTTNG_TRACEPOINT_EVENT(setpgid, + TP_PROTO(sc_exit(long ret,) pid_t pid, pid_t pgid), + TP_ARGS(sc_exit(ret,) pid, pgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(pid_t, pgid, pgid))) +) +#endif +#ifndef OVERRIDE_64_setreuid +SC_LTTNG_TRACEPOINT_EVENT(setreuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid), + TP_ARGS(sc_exit(ret,) ruid, euid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid))) +) +#endif +#ifndef OVERRIDE_64_setregid +SC_LTTNG_TRACEPOINT_EVENT(setregid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid), + TP_ARGS(sc_exit(ret,) rgid, egid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid))) +) +#endif +#ifndef OVERRIDE_64_getpriority +SC_LTTNG_TRACEPOINT_EVENT(getpriority, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_mlock +SC_LTTNG_TRACEPOINT_EVENT(mlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_munlock +SC_LTTNG_TRACEPOINT_EVENT(munlock, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len), + TP_ARGS(sc_exit(ret,) start, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_tkill +SC_LTTNG_TRACEPOINT_EVENT(tkill, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_ioprio_get +SC_LTTNG_TRACEPOINT_EVENT(ioprio_get, + TP_PROTO(sc_exit(long ret,) int which, int who), + TP_ARGS(sc_exit(ret,) which, who), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who))) +) +#endif +#ifndef OVERRIDE_64_inotify_rm_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_rm_watch, + TP_PROTO(sc_exit(long ret,) int fd, __s32 wd), + TP_ARGS(sc_exit(ret,) fd, wd), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(__s32, wd, wd))) +) +#endif +#ifndef OVERRIDE_64_timerfd_create +SC_LTTNG_TRACEPOINT_EVENT(timerfd_create, + TP_PROTO(sc_exit(long ret,) int clockid, int flags), + TP_ARGS(sc_exit(ret,) clockid, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, clockid, clockid)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_eventfd2 +SC_LTTNG_TRACEPOINT_EVENT(eventfd2, + TP_PROTO(sc_exit(long ret,) unsigned int count, int flags), + TP_ARGS(sc_exit(ret,) count, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, count, count)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fanotify_init +SC_LTTNG_TRACEPOINT_EVENT(fanotify_init, + TP_PROTO(sc_exit(long ret,) unsigned int flags, unsigned int event_f_flags), + TP_ARGS(sc_exit(ret,) flags, event_f_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(unsigned int, event_f_flags, event_f_flags))) +) +#endif +#ifndef OVERRIDE_64_setns +SC_LTTNG_TRACEPOINT_EVENT(setns, + TP_PROTO(sc_exit(long ret,) int fd, int nstype), + TP_ARGS(sc_exit(ret,) fd, nstype), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, nstype, nstype))) +) +#endif +#ifndef OVERRIDE_64_lseek +SC_LTTNG_TRACEPOINT_EVENT(lseek, + TP_PROTO(sc_exit(long ret,) unsigned int fd, off_t offset, unsigned int whence), + TP_ARGS(sc_exit(ret,) fd, offset, whence), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(off_t, offset, offset)) sc_in(ctf_integer(unsigned int, whence, whence))) +) +#endif +#ifndef OVERRIDE_64_mprotect +SC_LTTNG_TRACEPOINT_EVENT(mprotect, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned long prot), + TP_ARGS(sc_exit(ret,) start, len, prot), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned long, prot, prot))) +) +#endif +#ifndef OVERRIDE_64_ioctl +SC_LTTNG_TRACEPOINT_EVENT(ioctl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_msync +SC_LTTNG_TRACEPOINT_EVENT(msync, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, int flags), + TP_ARGS(sc_exit(ret,) start, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_madvise +SC_LTTNG_TRACEPOINT_EVENT(madvise, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len_in, int behavior), + TP_ARGS(sc_exit(ret,) start, len_in, behavior), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len_in, len_in)) sc_in(ctf_integer(int, behavior, behavior))) +) +#endif +#ifndef OVERRIDE_64_shmget +SC_LTTNG_TRACEPOINT_EVENT(shmget, + TP_PROTO(sc_exit(long ret,) key_t key, size_t size, int shmflg), + TP_ARGS(sc_exit(ret,) key, size, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_socket +SC_LTTNG_TRACEPOINT_EVENT(socket, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol), + TP_ARGS(sc_exit(ret,) family, type, protocol), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol))) +) +#endif +#ifndef OVERRIDE_64_semget +SC_LTTNG_TRACEPOINT_EVENT(semget, + TP_PROTO(sc_exit(long ret,) key_t key, int nsems, int semflg), + TP_ARGS(sc_exit(ret,) key, nsems, semflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(key_t, key, key)) sc_in(ctf_integer(int, nsems, nsems)) sc_in(ctf_integer(int, semflg, semflg))) +) +#endif +#ifndef OVERRIDE_64_fcntl +SC_LTTNG_TRACEPOINT_EVENT(fcntl, + TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) fd, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_fchown +SC_LTTNG_TRACEPOINT_EVENT(fchown, + TP_PROTO(sc_exit(long ret,) unsigned int fd, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) fd, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_setresuid +SC_LTTNG_TRACEPOINT_EVENT(setresuid, + TP_PROTO(sc_exit(long ret,) uid_t ruid, uid_t euid, uid_t suid), + TP_ARGS(sc_exit(ret,) ruid, euid, suid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(uid_t, ruid, ruid)) sc_in(ctf_integer(uid_t, euid, euid)) sc_in(ctf_integer(uid_t, suid, suid))) +) +#endif +#ifndef OVERRIDE_64_setresgid +SC_LTTNG_TRACEPOINT_EVENT(setresgid, + TP_PROTO(sc_exit(long ret,) gid_t rgid, gid_t egid, gid_t sgid), + TP_ARGS(sc_exit(ret,) rgid, egid, sgid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(gid_t, rgid, rgid)) sc_in(ctf_integer(gid_t, egid, egid)) sc_in(ctf_integer(gid_t, sgid, sgid))) +) +#endif +#ifndef OVERRIDE_64_sysfs +SC_LTTNG_TRACEPOINT_EVENT(sysfs, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg1, unsigned long arg2), + TP_ARGS(sc_exit(ret,) option, arg1, arg2), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_in(ctf_integer(unsigned long, arg1, arg1)) sc_in(ctf_integer(unsigned long, arg2, arg2))) +) +#endif +#ifndef OVERRIDE_64_setpriority +SC_LTTNG_TRACEPOINT_EVENT(setpriority, + TP_PROTO(sc_exit(long ret,) int which, int who, int niceval), + TP_ARGS(sc_exit(ret,) which, who, niceval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, niceval, niceval))) +) +#endif +#ifndef OVERRIDE_64_readahead +SC_LTTNG_TRACEPOINT_EVENT(readahead, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, size_t count), + TP_ARGS(sc_exit(ret,) fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_tgkill +SC_LTTNG_TRACEPOINT_EVENT(tgkill, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig), + TP_ARGS(sc_exit(ret,) tgid, pid, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_ioprio_set +SC_LTTNG_TRACEPOINT_EVENT(ioprio_set, + TP_PROTO(sc_exit(long ret,) int which, int who, int ioprio), + TP_ARGS(sc_exit(ret,) which, who, ioprio), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(int, who, who)) sc_in(ctf_integer(int, ioprio, ioprio))) +) +#endif +#ifndef OVERRIDE_64_dup3 +SC_LTTNG_TRACEPOINT_EVENT(dup3, + TP_PROTO(sc_exit(long ret,) unsigned int oldfd, unsigned int newfd, int flags), + TP_ARGS(sc_exit(ret,) oldfd, newfd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, oldfd, oldfd)) sc_in(ctf_integer(unsigned int, newfd, newfd)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_semctl +SC_LTTNG_TRACEPOINT_EVENT(semctl, + TP_PROTO(sc_exit(long ret,) int semid, int semnum, int cmd, unsigned long arg), + TP_ARGS(sc_exit(ret,) semid, semnum, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(int, semnum, semnum)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(unsigned long, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_ptrace +SC_LTTNG_TRACEPOINT_EVENT(ptrace, + TP_PROTO(sc_exit(long ret,) long request, long pid, unsigned long addr, unsigned long data), + TP_ARGS(sc_exit(ret,) request, pid, addr, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(long, request, request)) sc_in(ctf_integer(long, pid, pid)) sc_inout(ctf_integer(unsigned long, addr, addr)) sc_inout(ctf_integer(unsigned long, data, data))) +) +#endif +#ifndef OVERRIDE_64_fadvise64 +SC_LTTNG_TRACEPOINT_EVENT(fadvise64, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, size_t len, int advice), + TP_ARGS(sc_exit(ret,) fd, offset, len, advice), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(int, advice, advice))) +) +#endif +#ifndef OVERRIDE_64_tee +SC_LTTNG_TRACEPOINT_EVENT(tee, + TP_PROTO(sc_exit(long ret,) int fdin, int fdout, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fdin, fdout, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fdin, fdin)) sc_in(ctf_integer(int, fdout, fdout)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_sync_file_range +SC_LTTNG_TRACEPOINT_EVENT(sync_file_range, + TP_PROTO(sc_exit(long ret,) int fd, loff_t offset, loff_t nbytes, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, offset, nbytes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, nbytes, nbytes)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fallocate +SC_LTTNG_TRACEPOINT_EVENT(fallocate, + TP_PROTO(sc_exit(long ret,) int fd, int mode, loff_t offset, loff_t len), + TP_ARGS(sc_exit(ret,) fd, mode, offset, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(loff_t, offset, offset)) sc_in(ctf_integer(loff_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_mremap +SC_LTTNG_TRACEPOINT_EVENT(mremap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr), + TP_ARGS(sc_exit(ret,) addr, old_len, new_len, flags, new_addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, old_len, old_len)) sc_in(ctf_integer(unsigned long, new_len, new_len)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, new_addr, new_addr))) +) +#endif +#ifndef OVERRIDE_64_prctl +SC_LTTNG_TRACEPOINT_EVENT(prctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_in(ctf_integer(unsigned long, arg3, arg3)) sc_in(ctf_integer(unsigned long, arg4, arg4)) sc_in(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_64_remap_file_pages +SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags), + TP_ARGS(sc_exit(ret,) start, size, prot, pgoff, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, size, size)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, pgoff, pgoff)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_keyctl +SC_LTTNG_TRACEPOINT_EVENT(keyctl, + TP_PROTO(sc_exit(long ret,) int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5), + TP_ARGS(sc_exit(ret,) option, arg2, arg3, arg4, arg5), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, option, option)) sc_inout(ctf_integer(unsigned long, arg2, arg2)) sc_inout(ctf_integer(unsigned long, arg3, arg3)) sc_inout(ctf_integer(unsigned long, arg4, arg4)) sc_inout(ctf_integer(unsigned long, arg5, arg5))) +) +#endif +#ifndef OVERRIDE_64_mmap +SC_LTTNG_TRACEPOINT_EVENT(mmap, + TP_PROTO(sc_exit(long ret,) unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long off), + TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, off), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(unsigned long, prot, prot)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(unsigned long, off, off))) +) +#endif + +#endif /* _TRACE_SYSCALLS_INTEGERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "x86-64-syscalls-3.10.0-rc7_integers_override.h" +#include "syscalls_integers_override.h" + +#ifdef SC_ENTER +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(syscalls_noargs, sched_yield, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_64_pause +TRACE_SYSCALL_TABLE(syscalls_noargs, pause, 34, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(syscalls_noargs, getpid, 39, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(syscalls_noargs, getuid, 102, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(syscalls_noargs, getgid, 104, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(syscalls_noargs, geteuid, 107, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(syscalls_noargs, getegid, 108, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(syscalls_noargs, getppid, 110, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpgrp +TRACE_SYSCALL_TABLE(syscalls_noargs, getpgrp, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(syscalls_noargs, setsid, 112, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(syscalls_noargs, munlockall, 152, 0) +#endif +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(syscalls_noargs, vhangup, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(syscalls_noargs, sync, 162, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(syscalls_noargs, gettid, 186, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(syscalls_noargs, restart_syscall, 219, 0) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init +TRACE_SYSCALL_TABLE(syscalls_noargs, inotify_init, 253, 0) +#endif +#else /* #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_sched_yield +TRACE_SYSCALL_TABLE(sched_yield, sched_yield, 24, 0) +#endif +#ifndef OVERRIDE_TABLE_64_pause +TRACE_SYSCALL_TABLE(pause, pause, 34, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpid +TRACE_SYSCALL_TABLE(getpid, getpid, 39, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getuid +TRACE_SYSCALL_TABLE(getuid, getuid, 102, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getgid +TRACE_SYSCALL_TABLE(getgid, getgid, 104, 0) +#endif +#ifndef OVERRIDE_TABLE_64_geteuid +TRACE_SYSCALL_TABLE(geteuid, geteuid, 107, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getegid +TRACE_SYSCALL_TABLE(getegid, getegid, 108, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getppid +TRACE_SYSCALL_TABLE(getppid, getppid, 110, 0) +#endif +#ifndef OVERRIDE_TABLE_64_getpgrp +TRACE_SYSCALL_TABLE(getpgrp, getpgrp, 111, 0) +#endif +#ifndef OVERRIDE_TABLE_64_setsid +TRACE_SYSCALL_TABLE(setsid, setsid, 112, 0) +#endif +#ifndef OVERRIDE_TABLE_64_munlockall +TRACE_SYSCALL_TABLE(munlockall, munlockall, 152, 0) +#endif +#ifndef OVERRIDE_TABLE_64_vhangup +TRACE_SYSCALL_TABLE(vhangup, vhangup, 153, 0) +#endif +#ifndef OVERRIDE_TABLE_64_sync +TRACE_SYSCALL_TABLE(sync, sync, 162, 0) +#endif +#ifndef OVERRIDE_TABLE_64_gettid +TRACE_SYSCALL_TABLE(gettid, gettid, 186, 0) +#endif +#ifndef OVERRIDE_TABLE_64_restart_syscall +TRACE_SYSCALL_TABLE(restart_syscall, restart_syscall, 219, 0) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init +TRACE_SYSCALL_TABLE(inotify_init, inotify_init, 253, 0) +#endif +#endif /* else #ifdef SC_ENTER */ +#ifndef OVERRIDE_TABLE_64_close +TRACE_SYSCALL_TABLE(close, close, 3, 1) +#endif +#ifndef OVERRIDE_TABLE_64_lseek +TRACE_SYSCALL_TABLE(lseek, lseek, 8, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mmap +TRACE_SYSCALL_TABLE(mmap, mmap, 9, 6) +#endif +#ifndef OVERRIDE_TABLE_64_mprotect +TRACE_SYSCALL_TABLE(mprotect, mprotect, 10, 3) +#endif +#ifndef OVERRIDE_TABLE_64_munmap +TRACE_SYSCALL_TABLE(munmap, munmap, 11, 2) +#endif +#ifndef OVERRIDE_TABLE_64_brk +TRACE_SYSCALL_TABLE(brk, brk, 12, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ioctl +TRACE_SYSCALL_TABLE(ioctl, ioctl, 16, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mremap +TRACE_SYSCALL_TABLE(mremap, mremap, 25, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msync +TRACE_SYSCALL_TABLE(msync, msync, 26, 3) +#endif +#ifndef OVERRIDE_TABLE_64_madvise +TRACE_SYSCALL_TABLE(madvise, madvise, 28, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmget +TRACE_SYSCALL_TABLE(shmget, shmget, 29, 3) +#endif +#ifndef OVERRIDE_TABLE_64_dup +TRACE_SYSCALL_TABLE(dup, dup, 32, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup2 +TRACE_SYSCALL_TABLE(dup2, dup2, 33, 2) +#endif +#ifndef OVERRIDE_TABLE_64_alarm +TRACE_SYSCALL_TABLE(alarm, alarm, 37, 1) +#endif +#ifndef OVERRIDE_TABLE_64_socket +TRACE_SYSCALL_TABLE(socket, socket, 41, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shutdown +TRACE_SYSCALL_TABLE(shutdown, shutdown, 48, 2) +#endif +#ifndef OVERRIDE_TABLE_64_listen +TRACE_SYSCALL_TABLE(listen, listen, 50, 2) +#endif +#ifndef OVERRIDE_TABLE_64_exit +TRACE_SYSCALL_TABLE(exit, exit, 60, 1) +#endif +#ifndef OVERRIDE_TABLE_64_kill +TRACE_SYSCALL_TABLE(kill, kill, 62, 2) +#endif +#ifndef OVERRIDE_TABLE_64_semget +TRACE_SYSCALL_TABLE(semget, semget, 64, 3) +#endif +#ifndef OVERRIDE_TABLE_64_semctl +TRACE_SYSCALL_TABLE(semctl, semctl, 66, 4) +#endif +#ifndef OVERRIDE_TABLE_64_msgget +TRACE_SYSCALL_TABLE(msgget, msgget, 68, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fcntl +TRACE_SYSCALL_TABLE(fcntl, fcntl, 72, 3) +#endif +#ifndef OVERRIDE_TABLE_64_flock +TRACE_SYSCALL_TABLE(flock, flock, 73, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fsync +TRACE_SYSCALL_TABLE(fsync, fsync, 74, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fdatasync +TRACE_SYSCALL_TABLE(fdatasync, fdatasync, 75, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ftruncate +TRACE_SYSCALL_TABLE(ftruncate, ftruncate, 77, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fchdir +TRACE_SYSCALL_TABLE(fchdir, fchdir, 81, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fchmod +TRACE_SYSCALL_TABLE(fchmod, fchmod, 91, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fchown +TRACE_SYSCALL_TABLE(fchown, fchown, 93, 3) +#endif +#ifndef OVERRIDE_TABLE_64_umask +TRACE_SYSCALL_TABLE(umask, umask, 95, 1) +#endif +#ifndef OVERRIDE_TABLE_64_ptrace +TRACE_SYSCALL_TABLE(ptrace, ptrace, 101, 4) +#endif +#ifndef OVERRIDE_TABLE_64_setuid +TRACE_SYSCALL_TABLE(setuid, setuid, 105, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setgid +TRACE_SYSCALL_TABLE(setgid, setgid, 106, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setpgid +TRACE_SYSCALL_TABLE(setpgid, setpgid, 109, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setreuid +TRACE_SYSCALL_TABLE(setreuid, setreuid, 113, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setregid +TRACE_SYSCALL_TABLE(setregid, setregid, 114, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setresuid +TRACE_SYSCALL_TABLE(setresuid, setresuid, 117, 3) +#endif +#ifndef OVERRIDE_TABLE_64_setresgid +TRACE_SYSCALL_TABLE(setresgid, setresgid, 119, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpgid +TRACE_SYSCALL_TABLE(getpgid, getpgid, 121, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setfsuid +TRACE_SYSCALL_TABLE(setfsuid, setfsuid, 122, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setfsgid +TRACE_SYSCALL_TABLE(setfsgid, setfsgid, 123, 1) +#endif +#ifndef OVERRIDE_TABLE_64_getsid +TRACE_SYSCALL_TABLE(getsid, getsid, 124, 1) +#endif +#ifndef OVERRIDE_TABLE_64_personality +TRACE_SYSCALL_TABLE(personality, personality, 135, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sysfs +TRACE_SYSCALL_TABLE(sysfs, sysfs, 139, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpriority +TRACE_SYSCALL_TABLE(getpriority, getpriority, 140, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setpriority +TRACE_SYSCALL_TABLE(setpriority, setpriority, 141, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getscheduler +TRACE_SYSCALL_TABLE(sched_getscheduler, sched_getscheduler, 145, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_max +TRACE_SYSCALL_TABLE(sched_get_priority_max, sched_get_priority_max, 146, 1) +#endif +#ifndef OVERRIDE_TABLE_64_sched_get_priority_min +TRACE_SYSCALL_TABLE(sched_get_priority_min, sched_get_priority_min, 147, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mlock +TRACE_SYSCALL_TABLE(mlock, mlock, 149, 2) +#endif +#ifndef OVERRIDE_TABLE_64_munlock +TRACE_SYSCALL_TABLE(munlock, munlock, 150, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mlockall +TRACE_SYSCALL_TABLE(mlockall, mlockall, 151, 1) +#endif +#ifndef OVERRIDE_TABLE_64_prctl +TRACE_SYSCALL_TABLE(prctl, prctl, 157, 5) +#endif +#ifndef OVERRIDE_TABLE_64_readahead +TRACE_SYSCALL_TABLE(readahead, readahead, 187, 3) +#endif +#ifndef OVERRIDE_TABLE_64_tkill +TRACE_SYSCALL_TABLE(tkill, tkill, 200, 2) +#endif +#ifndef OVERRIDE_TABLE_64_io_destroy +TRACE_SYSCALL_TABLE(io_destroy, io_destroy, 207, 1) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_create +TRACE_SYSCALL_TABLE(epoll_create, epoll_create, 213, 1) +#endif +#ifndef OVERRIDE_TABLE_64_remap_file_pages +TRACE_SYSCALL_TABLE(remap_file_pages, remap_file_pages, 216, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fadvise64 +TRACE_SYSCALL_TABLE(fadvise64, fadvise64, 221, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timer_getoverrun +TRACE_SYSCALL_TABLE(timer_getoverrun, timer_getoverrun, 225, 1) +#endif +#ifndef OVERRIDE_TABLE_64_timer_delete +TRACE_SYSCALL_TABLE(timer_delete, timer_delete, 226, 1) +#endif +#ifndef OVERRIDE_TABLE_64_exit_group +TRACE_SYSCALL_TABLE(exit_group, exit_group, 231, 1) +#endif +#ifndef OVERRIDE_TABLE_64_tgkill +TRACE_SYSCALL_TABLE(tgkill, tgkill, 234, 3) +#endif +#ifndef OVERRIDE_TABLE_64_keyctl +TRACE_SYSCALL_TABLE(keyctl, keyctl, 250, 5) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_set +TRACE_SYSCALL_TABLE(ioprio_set, ioprio_set, 251, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ioprio_get +TRACE_SYSCALL_TABLE(ioprio_get, ioprio_get, 252, 2) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_rm_watch +TRACE_SYSCALL_TABLE(inotify_rm_watch, inotify_rm_watch, 255, 2) +#endif +#ifndef OVERRIDE_TABLE_64_unshare +TRACE_SYSCALL_TABLE(unshare, unshare, 272, 1) +#endif +#ifndef OVERRIDE_TABLE_64_tee +TRACE_SYSCALL_TABLE(tee, tee, 276, 4) +#endif +#ifndef OVERRIDE_TABLE_64_sync_file_range +TRACE_SYSCALL_TABLE(sync_file_range, sync_file_range, 277, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_create +TRACE_SYSCALL_TABLE(timerfd_create, timerfd_create, 283, 2) +#endif +#ifndef OVERRIDE_TABLE_64_eventfd +TRACE_SYSCALL_TABLE(eventfd, eventfd, 284, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fallocate +TRACE_SYSCALL_TABLE(fallocate, fallocate, 285, 4) +#endif +#ifndef OVERRIDE_TABLE_64_eventfd2 +TRACE_SYSCALL_TABLE(eventfd2, eventfd2, 290, 2) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_create1 +TRACE_SYSCALL_TABLE(epoll_create1, epoll_create1, 291, 1) +#endif +#ifndef OVERRIDE_TABLE_64_dup3 +TRACE_SYSCALL_TABLE(dup3, dup3, 292, 3) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_init1 +TRACE_SYSCALL_TABLE(inotify_init1, inotify_init1, 294, 1) +#endif +#ifndef OVERRIDE_TABLE_64_fanotify_init +TRACE_SYSCALL_TABLE(fanotify_init, fanotify_init, 300, 2) +#endif +#ifndef OVERRIDE_TABLE_64_syncfs +TRACE_SYSCALL_TABLE(syncfs, syncfs, 306, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setns +TRACE_SYSCALL_TABLE(setns, setns, 308, 2) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers_override.h new file mode 100644 index 000000000000..5f971e70435a --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_integers_override.h @@ -0,0 +1,3 @@ +/* + * this is a place-holder for x86_64 integer syscall definition override. + */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers.h new file mode 100644 index 000000000000..9d9a1b5caf96 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers.h @@ -0,0 +1,1924 @@ +/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */ +#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_POINTERS_H + +#include +#include +#include "x86-64-syscalls-3.10.0-rc7_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_64_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes))) +) +#endif +#ifndef OVERRIDE_64_newuname +SC_LTTNG_TRACEPOINT_EVENT(newuname, + TP_PROTO(sc_exit(long ret,) struct new_utsname * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct new_utsname *, name, name))) +) +#endif +#ifndef OVERRIDE_64_shmdt +SC_LTTNG_TRACEPOINT_EVENT(shmdt, + TP_PROTO(sc_exit(long ret,) char * shmaddr), + TP_ARGS(sc_exit(ret,) shmaddr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(char *, shmaddr, shmaddr))) +) +#endif +#ifndef OVERRIDE_64_chdir +SC_LTTNG_TRACEPOINT_EVENT(chdir, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_rmdir +SC_LTTNG_TRACEPOINT_EVENT(rmdir, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_unlink +SC_LTTNG_TRACEPOINT_EVENT(unlink, + TP_PROTO(sc_exit(long ret,) const char * pathname), + TP_ARGS(sc_exit(ret,) pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_sysinfo +SC_LTTNG_TRACEPOINT_EVENT(sysinfo, + TP_PROTO(sc_exit(long ret,) struct sysinfo * info), + TP_ARGS(sc_exit(ret,) info), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct sysinfo *, info, info))) +) +#endif +#ifndef OVERRIDE_64_times +SC_LTTNG_TRACEPOINT_EVENT(times, + TP_PROTO(sc_exit(long ret,) struct tms * tbuf), + TP_ARGS(sc_exit(ret,) tbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct tms *, tbuf, tbuf))) +) +#endif +#ifndef OVERRIDE_64_sysctl +SC_LTTNG_TRACEPOINT_EVENT(sysctl, + TP_PROTO(sc_exit(long ret,) struct __sysctl_args * args), + TP_ARGS(sc_exit(ret,) args), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct __sysctl_args *, args, args))) +) +#endif +#ifndef OVERRIDE_64_adjtimex +SC_LTTNG_TRACEPOINT_EVENT(adjtimex, + TP_PROTO(sc_exit(long ret,) struct timex * txc_p), + TP_ARGS(sc_exit(ret,) txc_p), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct timex *, txc_p, txc_p))) +) +#endif +#ifndef OVERRIDE_64_chroot +SC_LTTNG_TRACEPOINT_EVENT(chroot, + TP_PROTO(sc_exit(long ret,) const char * filename), + TP_ARGS(sc_exit(ret,) filename), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename))) +) +#endif +#ifndef OVERRIDE_64_acct +SC_LTTNG_TRACEPOINT_EVENT(acct, + TP_PROTO(sc_exit(long ret,) const char * name), + TP_ARGS(sc_exit(ret,) name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_swapoff +SC_LTTNG_TRACEPOINT_EVENT(swapoff, + TP_PROTO(sc_exit(long ret,) const char * specialfile), + TP_ARGS(sc_exit(ret,) specialfile), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile))) +) +#endif +#ifndef OVERRIDE_64_time +SC_LTTNG_TRACEPOINT_EVENT(time, + TP_PROTO(sc_exit(long ret,) time_t * tloc), + TP_ARGS(sc_exit(ret,) tloc), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(time_t *, tloc, tloc))) +) +#endif +#ifndef OVERRIDE_64_set_tid_address +SC_LTTNG_TRACEPOINT_EVENT(set_tid_address, + TP_PROTO(sc_exit(long ret,) int * tidptr), + TP_ARGS(sc_exit(ret,) tidptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int *, tidptr, tidptr))) +) +#endif +#ifndef OVERRIDE_64_mq_unlink +SC_LTTNG_TRACEPOINT_EVENT(mq_unlink, + TP_PROTO(sc_exit(long ret,) const char * u_name), + TP_ARGS(sc_exit(ret,) u_name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name))) +) +#endif +#ifndef OVERRIDE_64_newstat +SC_LTTNG_TRACEPOINT_EVENT(newstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_newfstat +SC_LTTNG_TRACEPOINT_EVENT(newfstat, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) fd, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_newlstat +SC_LTTNG_TRACEPOINT_EVENT(newlstat, + TP_PROTO(sc_exit(long ret,) const char * filename, struct stat * statbuf), + TP_ARGS(sc_exit(ret,) filename, statbuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf))) +) +#endif +#ifndef OVERRIDE_64_access +SC_LTTNG_TRACEPOINT_EVENT(access, + TP_PROTO(sc_exit(long ret,) const char * filename, int mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(nanosleep, + TP_PROTO(sc_exit(long ret,) struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_getitimer +SC_LTTNG_TRACEPOINT_EVENT(getitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value), + TP_ARGS(sc_exit(ret,) which, value), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_out(ctf_integer(struct itimerval *, value, value))) +) +#endif +#ifndef OVERRIDE_64_truncate +SC_LTTNG_TRACEPOINT_EVENT(truncate, + TP_PROTO(sc_exit(long ret,) const char * path, long length), + TP_ARGS(sc_exit(ret,) path, length), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_in(ctf_integer(long, length, length))) +) +#endif +#ifndef OVERRIDE_64_getcwd +SC_LTTNG_TRACEPOINT_EVENT(getcwd, + TP_PROTO(sc_exit(long ret,) char * buf, unsigned long size), + TP_ARGS(sc_exit(ret,) buf, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(unsigned long, size, size))) +) +#endif +#ifndef OVERRIDE_64_rename +SC_LTTNG_TRACEPOINT_EVENT(rename, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_mkdir +SC_LTTNG_TRACEPOINT_EVENT(mkdir, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_creat +SC_LTTNG_TRACEPOINT_EVENT(creat, + TP_PROTO(sc_exit(long ret,) const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_link +SC_LTTNG_TRACEPOINT_EVENT(link, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_symlink +SC_LTTNG_TRACEPOINT_EVENT(symlink, + TP_PROTO(sc_exit(long ret,) const char * oldname, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_chmod +SC_LTTNG_TRACEPOINT_EVENT(chmod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_gettimeofday +SC_LTTNG_TRACEPOINT_EVENT(gettimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(struct timeval *, tv, tv)) sc_out(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_getrlimit +SC_LTTNG_TRACEPOINT_EVENT(getrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_out(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_getrusage +SC_LTTNG_TRACEPOINT_EVENT(getrusage, + TP_PROTO(sc_exit(long ret,) int who, struct rusage * ru), + TP_ARGS(sc_exit(ret,) who, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, who, who)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_getgroups +SC_LTTNG_TRACEPOINT_EVENT(getgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_out(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_setgroups +SC_LTTNG_TRACEPOINT_EVENT(setgroups, + TP_PROTO(sc_exit(long ret,) int gidsetsize, gid_t * grouplist), + TP_ARGS(sc_exit(ret,) gidsetsize, grouplist), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, gidsetsize, gidsetsize)) sc_in(ctf_integer(gid_t *, grouplist, grouplist))) +) +#endif +#ifndef OVERRIDE_64_rt_sigpending +SC_LTTNG_TRACEPOINT_EVENT(rt_sigpending, + TP_PROTO(sc_exit(long ret,) sigset_t * uset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(sigset_t *, uset, uset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigsuspend +SC_LTTNG_TRACEPOINT_EVENT(rt_sigsuspend, + TP_PROTO(sc_exit(long ret,) sigset_t * unewset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) unewset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(sigset_t *, unewset, unewset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_sigaltstack +SC_LTTNG_TRACEPOINT_EVENT(sigaltstack, + TP_PROTO(sc_exit(long ret,) const stack_t * uss, stack_t * uoss), + TP_ARGS(sc_exit(ret,) uss, uoss), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const stack_t *, uss, uss)) sc_inout(ctf_integer(stack_t *, uoss, uoss))) +) +#endif +#ifndef OVERRIDE_64_utime +SC_LTTNG_TRACEPOINT_EVENT(utime, + TP_PROTO(sc_exit(long ret,) char * filename, struct utimbuf * times), + TP_ARGS(sc_exit(ret,) filename, times), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct utimbuf *, times, times))) +) +#endif +#ifndef OVERRIDE_64_ustat +SC_LTTNG_TRACEPOINT_EVENT(ustat, + TP_PROTO(sc_exit(long ret,) unsigned dev, struct ustat * ubuf), + TP_ARGS(sc_exit(ret,) dev, ubuf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, dev, dev)) sc_out(ctf_integer(struct ustat *, ubuf, ubuf))) +) +#endif +#ifndef OVERRIDE_64_statfs +SC_LTTNG_TRACEPOINT_EVENT(statfs, + TP_PROTO(sc_exit(long ret,) const char * pathname, struct statfs * buf), + TP_ARGS(sc_exit(ret,) pathname, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_fstatfs +SC_LTTNG_TRACEPOINT_EVENT(fstatfs, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct statfs * buf), + TP_ARGS(sc_exit(ret,) fd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct statfs *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_sched_setparam +SC_LTTNG_TRACEPOINT_EVENT(sched_setparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_getparam +SC_LTTNG_TRACEPOINT_EVENT(sched_getparam, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_sched_rr_get_interval +SC_LTTNG_TRACEPOINT_EVENT(sched_rr_get_interval, + TP_PROTO(sc_exit(long ret,) pid_t pid, struct timespec * interval), + TP_ARGS(sc_exit(ret,) pid, interval), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(struct timespec *, interval, interval))) +) +#endif +#ifndef OVERRIDE_64_pivot_root +SC_LTTNG_TRACEPOINT_EVENT(pivot_root, + TP_PROTO(sc_exit(long ret,) const char * new_root, const char * put_old), + TP_ARGS(sc_exit(ret,) new_root, put_old), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(new_root, new_root)) sc_in(ctf_user_string(put_old, put_old))) +) +#endif +#ifndef OVERRIDE_64_setrlimit +SC_LTTNG_TRACEPOINT_EVENT(setrlimit, + TP_PROTO(sc_exit(long ret,) unsigned int resource, struct rlimit * rlim), + TP_ARGS(sc_exit(ret,) resource, rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(struct rlimit *, rlim, rlim))) +) +#endif +#ifndef OVERRIDE_64_settimeofday +SC_LTTNG_TRACEPOINT_EVENT(settimeofday, + TP_PROTO(sc_exit(long ret,) struct timeval * tv, struct timezone * tz), + TP_ARGS(sc_exit(ret,) tv, tz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct timeval *, tv, tv)) sc_in(ctf_integer(struct timezone *, tz, tz))) +) +#endif +#ifndef OVERRIDE_64_umount +SC_LTTNG_TRACEPOINT_EVENT(umount, + TP_PROTO(sc_exit(long ret,) char * name, int flags), + TP_ARGS(sc_exit(ret,) name, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_swapon +SC_LTTNG_TRACEPOINT_EVENT(swapon, + TP_PROTO(sc_exit(long ret,) const char * specialfile, int swap_flags), + TP_ARGS(sc_exit(ret,) specialfile, swap_flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(specialfile, specialfile)) sc_in(ctf_integer(int, swap_flags, swap_flags))) +) +#endif +#ifndef OVERRIDE_64_sethostname +SC_LTTNG_TRACEPOINT_EVENT(sethostname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_setdomainname +SC_LTTNG_TRACEPOINT_EVENT(setdomainname, + TP_PROTO(sc_exit(long ret,) char * name, int len), + TP_ARGS(sc_exit(ret,) name, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_delete_module +SC_LTTNG_TRACEPOINT_EVENT(delete_module, + TP_PROTO(sc_exit(long ret,) const char * name_user, unsigned int flags), + TP_ARGS(sc_exit(ret,) name_user, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(name_user, name_user)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_removexattr +SC_LTTNG_TRACEPOINT_EVENT(removexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_lremovexattr +SC_LTTNG_TRACEPOINT_EVENT(lremovexattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name), + TP_ARGS(sc_exit(ret,) pathname, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_fremovexattr +SC_LTTNG_TRACEPOINT_EVENT(fremovexattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name), + TP_ARGS(sc_exit(ret,) fd, name), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name))) +) +#endif +#ifndef OVERRIDE_64_io_setup +SC_LTTNG_TRACEPOINT_EVENT(io_setup, + TP_PROTO(sc_exit(long ret,) unsigned nr_events, aio_context_t * ctxp), + TP_ARGS(sc_exit(ret,) nr_events, ctxp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned, nr_events, nr_events)) sc_in(ctf_integer(aio_context_t *, ctxp, ctxp))) +) +#endif +#ifndef OVERRIDE_64_timer_gettime +SC_LTTNG_TRACEPOINT_EVENT(timer_gettime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, struct itimerspec * setting), + TP_ARGS(sc_exit(ret,) timer_id, setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_out(ctf_integer(struct itimerspec *, setting, setting))) +) +#endif +#ifndef OVERRIDE_64_clock_settime +SC_LTTNG_TRACEPOINT_EVENT(clock_settime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, const struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(const struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_gettime +SC_LTTNG_TRACEPOINT_EVENT(clock_gettime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_clock_getres +SC_LTTNG_TRACEPOINT_EVENT(clock_getres, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timespec * tp), + TP_ARGS(sc_exit(ret,) which_clock, tp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_out(ctf_integer(struct timespec *, tp, tp))) +) +#endif +#ifndef OVERRIDE_64_utimes +SC_LTTNG_TRACEPOINT_EVENT(utimes, + TP_PROTO(sc_exit(long ret,) char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_64_mq_notify +SC_LTTNG_TRACEPOINT_EVENT(mq_notify, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct sigevent * u_notification), + TP_ARGS(sc_exit(ret,) mqdes, u_notification), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct sigevent *, u_notification, u_notification))) +) +#endif +#ifndef OVERRIDE_64_set_robust_list +SC_LTTNG_TRACEPOINT_EVENT(set_robust_list, + TP_PROTO(sc_exit(long ret,) struct robust_list_head * head, size_t len), + TP_ARGS(sc_exit(ret,) head, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct robust_list_head *, head, head)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_timerfd_gettime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_gettime, + TP_PROTO(sc_exit(long ret,) int ufd, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_pipe2 +SC_LTTNG_TRACEPOINT_EVENT(pipe2, + TP_PROTO(sc_exit(long ret,) int * fildes, int flags), + TP_ARGS(sc_exit(ret,) fildes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, fildes, fildes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_clock_adjtime +SC_LTTNG_TRACEPOINT_EVENT(clock_adjtime, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct timex * utx), + TP_ARGS(sc_exit(ret,) which_clock, utx), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_inout(ctf_integer(struct timex *, utx, utx))) +) +#endif +#ifndef OVERRIDE_64_read +SC_LTTNG_TRACEPOINT_EVENT(read, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_write +SC_LTTNG_TRACEPOINT_EVENT(write, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count), + TP_ARGS(sc_exit(ret,) fd, buf, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_open +SC_LTTNG_TRACEPOINT_EVENT(open, + TP_PROTO(sc_exit(long ret,) const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_poll +SC_LTTNG_TRACEPOINT_EVENT(poll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, int timeout_msecs), + TP_ARGS(sc_exit(ret,) ufds, nfds, timeout_msecs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(int, timeout_msecs, timeout_msecs))) +) +#endif +#ifndef OVERRIDE_64_readv +SC_LTTNG_TRACEPOINT_EVENT(readv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_writev +SC_LTTNG_TRACEPOINT_EVENT(writev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen), + TP_ARGS(sc_exit(ret,) fd, vec, vlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_inout(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen))) +) +#endif +#ifndef OVERRIDE_64_mincore +SC_LTTNG_TRACEPOINT_EVENT(mincore, + TP_PROTO(sc_exit(long ret,) unsigned long start, size_t len, unsigned char * vec), + TP_ARGS(sc_exit(ret,) start, len, vec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(size_t, len, len)) sc_out(ctf_integer(unsigned char *, vec, vec))) +) +#endif +#ifndef OVERRIDE_64_shmat +SC_LTTNG_TRACEPOINT_EVENT(shmat, + TP_PROTO(sc_exit(long ret,) int shmid, char * shmaddr, int shmflg), + TP_ARGS(sc_exit(ret,) shmid, shmaddr, shmflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(char *, shmaddr, shmaddr)) sc_in(ctf_integer(int, shmflg, shmflg))) +) +#endif +#ifndef OVERRIDE_64_shmctl +SC_LTTNG_TRACEPOINT_EVENT(shmctl, + TP_PROTO(sc_exit(long ret,) int shmid, int cmd, struct shmid_ds * buf), + TP_ARGS(sc_exit(ret,) shmid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, shmid, shmid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct shmid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_setitimer +SC_LTTNG_TRACEPOINT_EVENT(setitimer, + TP_PROTO(sc_exit(long ret,) int which, struct itimerval * value, struct itimerval * ovalue), + TP_ARGS(sc_exit(ret,) which, value, ovalue), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(struct itimerval *, value, value)) sc_out(ctf_integer(struct itimerval *, ovalue, ovalue))) +) +#endif +#ifndef OVERRIDE_64_connect +SC_LTTNG_TRACEPOINT_EVENT(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, uservaddr, uservaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_accept +SC_LTTNG_TRACEPOINT_EVENT(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen))) +) +#endif +#ifndef OVERRIDE_64_sendmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_recvmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct msghdr * msg, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, msg, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_inout(ctf_integer(struct msghdr *, msg, msg)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_bind +SC_LTTNG_TRACEPOINT_EVENT(bind, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * umyaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, umyaddr, addrlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct sockaddr *, umyaddr, umyaddr)) sc_in(ctf_integer(int, addrlen, addrlen))) +) +#endif +#ifndef OVERRIDE_64_getsockname +SC_LTTNG_TRACEPOINT_EVENT(getsockname, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_getpeername +SC_LTTNG_TRACEPOINT_EVENT(getpeername, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * usockaddr, int * usockaddr_len), + TP_ARGS(sc_exit(ret,) fd, usockaddr, usockaddr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, usockaddr, usockaddr)) sc_inout(ctf_integer(int *, usockaddr_len, usockaddr_len))) +) +#endif +#ifndef OVERRIDE_64_semop +SC_LTTNG_TRACEPOINT_EVENT(semop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops))) +) +#endif +#ifndef OVERRIDE_64_msgctl +SC_LTTNG_TRACEPOINT_EVENT(msgctl, + TP_PROTO(sc_exit(long ret,) int msqid, int cmd, struct msqid_ds * buf), + TP_ARGS(sc_exit(ret,) msqid, cmd, buf), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(int, cmd, cmd)) sc_inout(ctf_integer(struct msqid_ds *, buf, buf))) +) +#endif +#ifndef OVERRIDE_64_getdents +SC_LTTNG_TRACEPOINT_EVENT(getdents, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_readlink +SC_LTTNG_TRACEPOINT_EVENT(readlink, + TP_PROTO(sc_exit(long ret,) const char * path, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) path, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(path, path)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_64_chown +SC_LTTNG_TRACEPOINT_EVENT(chown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_lchown +SC_LTTNG_TRACEPOINT_EVENT(lchown, + TP_PROTO(sc_exit(long ret,) const char * filename, uid_t user, gid_t group), + TP_ARGS(sc_exit(ret,) filename, user, group), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group))) +) +#endif +#ifndef OVERRIDE_64_syslog +SC_LTTNG_TRACEPOINT_EVENT(syslog, + TP_PROTO(sc_exit(long ret,) int type, char * buf, int len), + TP_ARGS(sc_exit(ret,) type, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, type, type)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, len, len))) +) +#endif +#ifndef OVERRIDE_64_getresuid +SC_LTTNG_TRACEPOINT_EVENT(getresuid, + TP_PROTO(sc_exit(long ret,) uid_t * ruidp, uid_t * euidp, uid_t * suidp), + TP_ARGS(sc_exit(ret,) ruidp, euidp, suidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(uid_t *, ruidp, ruidp)) sc_out(ctf_integer(uid_t *, euidp, euidp)) sc_out(ctf_integer(uid_t *, suidp, suidp))) +) +#endif +#ifndef OVERRIDE_64_getresgid +SC_LTTNG_TRACEPOINT_EVENT(getresgid, + TP_PROTO(sc_exit(long ret,) gid_t * rgidp, gid_t * egidp, gid_t * sgidp), + TP_ARGS(sc_exit(ret,) rgidp, egidp, sgidp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(gid_t *, rgidp, rgidp)) sc_out(ctf_integer(gid_t *, egidp, egidp)) sc_out(ctf_integer(gid_t *, sgidp, sgidp))) +) +#endif +#ifndef OVERRIDE_64_rt_sigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_sigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_mknod +SC_LTTNG_TRACEPOINT_EVENT(mknod, + TP_PROTO(sc_exit(long ret,) const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_64_sched_setscheduler +SC_LTTNG_TRACEPOINT_EVENT(sched_setscheduler, + TP_PROTO(sc_exit(long ret,) pid_t pid, int policy, struct sched_param * param), + TP_ARGS(sc_exit(ret,) pid, policy, param), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, policy, policy)) sc_in(ctf_integer(struct sched_param *, param, param))) +) +#endif +#ifndef OVERRIDE_64_init_module +SC_LTTNG_TRACEPOINT_EVENT(init_module, + TP_PROTO(sc_exit(long ret,) void * umod, unsigned long len, const char * uargs), + TP_ARGS(sc_exit(ret,) umod, len, uargs), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(void *, umod, umod)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(const char *, uargs, uargs))) +) +#endif +#ifndef OVERRIDE_64_listxattr +SC_LTTNG_TRACEPOINT_EVENT(listxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_llistxattr +SC_LTTNG_TRACEPOINT_EVENT(llistxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, char * list, size_t size), + TP_ARGS(sc_exit(ret,) pathname, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_flistxattr +SC_LTTNG_TRACEPOINT_EVENT(flistxattr, + TP_PROTO(sc_exit(long ret,) int fd, char * list, size_t size), + TP_ARGS(sc_exit(ret,) fd, list, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(char *, list, list)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_sched_setaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_setaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_in(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_sched_getaffinity +SC_LTTNG_TRACEPOINT_EVENT(sched_getaffinity, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int len, unsigned long * user_mask_ptr), + TP_ARGS(sc_exit(ret,) pid, len, user_mask_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, len, len)) sc_out(ctf_integer(unsigned long *, user_mask_ptr, user_mask_ptr))) +) +#endif +#ifndef OVERRIDE_64_io_submit +SC_LTTNG_TRACEPOINT_EVENT(io_submit, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long nr, struct iocb * * iocbpp), + TP_ARGS(sc_exit(ret,) ctx_id, nr, iocbpp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, nr, nr)) sc_in(ctf_integer(struct iocb * *, iocbpp, iocbpp))) +) +#endif +#ifndef OVERRIDE_64_io_cancel +SC_LTTNG_TRACEPOINT_EVENT(io_cancel, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, struct iocb * iocb, struct io_event * result), + TP_ARGS(sc_exit(ret,) ctx_id, iocb, result), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(struct iocb *, iocb, iocb)) sc_out(ctf_integer(struct io_event *, result, result))) +) +#endif +#ifndef OVERRIDE_64_lookup_dcookie +SC_LTTNG_TRACEPOINT_EVENT(lookup_dcookie, + TP_PROTO(sc_exit(long ret,) u64 cookie64, char * buf, size_t len), + TP_ARGS(sc_exit(ret,) cookie64, buf, len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(u64, cookie64, cookie64)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, len, len))) +) +#endif +#ifndef OVERRIDE_64_getdents64 +SC_LTTNG_TRACEPOINT_EVENT(getdents64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, struct linux_dirent64 * dirent, unsigned int count), + TP_ARGS(sc_exit(ret,) fd, dirent, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(struct linux_dirent64 *, dirent, dirent)) sc_in(ctf_integer(unsigned int, count, count))) +) +#endif +#ifndef OVERRIDE_64_timer_create +SC_LTTNG_TRACEPOINT_EVENT(timer_create, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, struct sigevent * timer_event_spec, timer_t * created_timer_id), + TP_ARGS(sc_exit(ret,) which_clock, timer_event_spec, created_timer_id), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(struct sigevent *, timer_event_spec, timer_event_spec)) sc_out(ctf_integer(timer_t *, created_timer_id, created_timer_id))) +) +#endif +#ifndef OVERRIDE_64_set_mempolicy +SC_LTTNG_TRACEPOINT_EVENT(set_mempolicy, + TP_PROTO(sc_exit(long ret,) int mode, unsigned long * nmask, unsigned long maxnode), + TP_ARGS(sc_exit(ret,) mode, nmask, maxnode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mode, mode)) sc_in(ctf_integer(unsigned long *, nmask, nmask)) sc_in(ctf_integer(unsigned long, maxnode, maxnode))) +) +#endif +#ifndef OVERRIDE_64_mq_getsetattr +SC_LTTNG_TRACEPOINT_EVENT(mq_getsetattr, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const struct mq_attr * u_mqstat, struct mq_attr * u_omqstat), + TP_ARGS(sc_exit(ret,) mqdes, u_mqstat, u_omqstat), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const struct mq_attr *, u_mqstat, u_mqstat)) sc_out(ctf_integer(struct mq_attr *, u_omqstat, u_omqstat))) +) +#endif +#ifndef OVERRIDE_64_inotify_add_watch +SC_LTTNG_TRACEPOINT_EVENT(inotify_add_watch, + TP_PROTO(sc_exit(long ret,) int fd, const char * pathname, u32 mask), + TP_ARGS(sc_exit(ret,) fd, pathname, mask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(u32, mask, mask))) +) +#endif +#ifndef OVERRIDE_64_mkdirat +SC_LTTNG_TRACEPOINT_EVENT(mkdirat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, pathname, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_futimesat +SC_LTTNG_TRACEPOINT_EVENT(futimesat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timeval * utimes), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timeval *, utimes, utimes))) +) +#endif +#ifndef OVERRIDE_64_unlinkat +SC_LTTNG_TRACEPOINT_EVENT(unlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, int flag), + TP_ARGS(sc_exit(ret,) dfd, pathname, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_symlinkat +SC_LTTNG_TRACEPOINT_EVENT(symlinkat, + TP_PROTO(sc_exit(long ret,) const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_fchmodat +SC_LTTNG_TRACEPOINT_EVENT(fchmodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_faccessat +SC_LTTNG_TRACEPOINT_EVENT(faccessat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int mode), + TP_ARGS(sc_exit(ret,) dfd, filename, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_get_robust_list +SC_LTTNG_TRACEPOINT_EVENT(get_robust_list, + TP_PROTO(sc_exit(long ret,) int pid, struct robust_list_head * * head_ptr, size_t * len_ptr), + TP_ARGS(sc_exit(ret,) pid, head_ptr, len_ptr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, pid, pid)) sc_out(ctf_integer(struct robust_list_head * *, head_ptr, head_ptr)) sc_out(ctf_integer(size_t *, len_ptr, len_ptr))) +) +#endif +#ifndef OVERRIDE_64_signalfd +SC_LTTNG_TRACEPOINT_EVENT(signalfd, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask))) +) +#endif +#ifndef OVERRIDE_64_open_by_handle_at +SC_LTTNG_TRACEPOINT_EVENT(open_by_handle_at, + TP_PROTO(sc_exit(long ret,) int mountdirfd, struct file_handle * handle, int flags), + TP_ARGS(sc_exit(ret,) mountdirfd, handle, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, mountdirfd, mountdirfd)) sc_in(ctf_integer(struct file_handle *, handle, handle)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_getcpu +SC_LTTNG_TRACEPOINT_EVENT(getcpu, + TP_PROTO(sc_exit(long ret,) unsigned * cpup, unsigned * nodep, struct getcpu_cache * unused), + TP_ARGS(sc_exit(ret,) cpup, nodep, unused), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(unsigned *, cpup, cpup)) sc_out(ctf_integer(unsigned *, nodep, nodep)) sc_inout(ctf_integer(struct getcpu_cache *, unused, unused))) +) +#endif +#ifndef OVERRIDE_64_finit_module +SC_LTTNG_TRACEPOINT_EVENT(finit_module, + TP_PROTO(sc_exit(long ret,) int fd, const char * uargs, int flags), + TP_ARGS(sc_exit(ret,) fd, uargs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const char *, uargs, uargs)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_rt_sigaction +SC_LTTNG_TRACEPOINT_EVENT(rt_sigaction, + TP_PROTO(sc_exit(long ret,) int sig, const struct sigaction * act, struct sigaction * oact, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) sig, act, oact, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(const struct sigaction *, act, act)) sc_out(ctf_integer(struct sigaction *, oact, oact)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_rt_sigprocmask +SC_LTTNG_TRACEPOINT_EVENT(rt_sigprocmask, + TP_PROTO(sc_exit(long ret,) int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) how, nset, oset, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, how, how)) sc_in(ctf_integer(sigset_t *, nset, nset)) sc_out(ctf_integer(sigset_t *, oset, oset)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_pread64 +SC_LTTNG_TRACEPOINT_EVENT(pread64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_64_pwrite64 +SC_LTTNG_TRACEPOINT_EVENT(pwrite64, + TP_PROTO(sc_exit(long ret,) unsigned int fd, const char * buf, size_t count, loff_t pos), + TP_ARGS(sc_exit(ret,) fd, buf, count, pos), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, fd, fd)) sc_in(ctf_integer(const char *, buf, buf)) sc_in(ctf_integer(size_t, count, count)) sc_in(ctf_integer(loff_t, pos, pos))) +) +#endif +#ifndef OVERRIDE_64_sendfile64 +SC_LTTNG_TRACEPOINT_EVENT(sendfile64, + TP_PROTO(sc_exit(long ret,) int out_fd, int in_fd, loff_t * offset, size_t count), + TP_ARGS(sc_exit(ret,) out_fd, in_fd, offset, count), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, out_fd, out_fd)) sc_in(ctf_integer(int, in_fd, in_fd)) sc_inout(ctf_integer(loff_t *, offset, offset)) sc_in(ctf_integer(size_t, count, count))) +) +#endif +#ifndef OVERRIDE_64_socketpair +SC_LTTNG_TRACEPOINT_EVENT(socketpair, + TP_PROTO(sc_exit(long ret,) int family, int type, int protocol, int * usockvec), + TP_ARGS(sc_exit(ret,) family, type, protocol, usockvec), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, family, family)) sc_in(ctf_integer(int, type, type)) sc_in(ctf_integer(int, protocol, protocol)) sc_out(ctf_integer(int *, usockvec, usockvec))) +) +#endif +#ifndef OVERRIDE_64_wait4 +SC_LTTNG_TRACEPOINT_EVENT(wait4, + TP_PROTO(sc_exit(long ret,) pid_t upid, int * stat_addr, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) upid, stat_addr, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(int *, stat_addr, stat_addr)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_msgsnd +SC_LTTNG_TRACEPOINT_EVENT(msgsnd, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_in(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_rt_sigtimedwait +SC_LTTNG_TRACEPOINT_EVENT(rt_sigtimedwait, + TP_PROTO(sc_exit(long ret,) const sigset_t * uthese, siginfo_t * uinfo, const struct timespec * uts, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) uthese, uinfo, uts, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(const sigset_t *, uthese, uthese)) sc_out(ctf_integer(siginfo_t *, uinfo, uinfo)) sc_in(ctf_integer(const struct timespec *, uts, uts)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_reboot +SC_LTTNG_TRACEPOINT_EVENT(reboot, + TP_PROTO(sc_exit(long ret,) int magic1, int magic2, unsigned int cmd, void * arg), + TP_ARGS(sc_exit(ret,) magic1, magic2, cmd, arg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, magic1, magic1)) sc_in(ctf_integer(int, magic2, magic2)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(void *, arg, arg))) +) +#endif +#ifndef OVERRIDE_64_quotactl +SC_LTTNG_TRACEPOINT_EVENT(quotactl, + TP_PROTO(sc_exit(long ret,) unsigned int cmd, const char * special, qid_t id, void * addr), + TP_ARGS(sc_exit(ret,) cmd, special, id, addr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned int, cmd, cmd)) sc_in(ctf_integer(const char *, special, special)) sc_in(ctf_integer(qid_t, id, id)) sc_inout(ctf_integer(void *, addr, addr))) +) +#endif +#ifndef OVERRIDE_64_getxattr +SC_LTTNG_TRACEPOINT_EVENT(getxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_lgetxattr +SC_LTTNG_TRACEPOINT_EVENT(lgetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) pathname, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_fgetxattr +SC_LTTNG_TRACEPOINT_EVENT(fgetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, void * value, size_t size), + TP_ARGS(sc_exit(ret,) fd, name, value, size), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_out(ctf_integer(void *, value, value)) sc_in(ctf_integer(size_t, size, size))) +) +#endif +#ifndef OVERRIDE_64_semtimedop +SC_LTTNG_TRACEPOINT_EVENT(semtimedop, + TP_PROTO(sc_exit(long ret,) int semid, struct sembuf * tsops, unsigned nsops, const struct timespec * timeout), + TP_ARGS(sc_exit(ret,) semid, tsops, nsops, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, semid, semid)) sc_in(ctf_integer(struct sembuf *, tsops, tsops)) sc_in(ctf_integer(unsigned, nsops, nsops)) sc_inout(ctf_integer(const struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_timer_settime +SC_LTTNG_TRACEPOINT_EVENT(timer_settime, + TP_PROTO(sc_exit(long ret,) timer_t timer_id, int flags, const struct itimerspec * new_setting, struct itimerspec * old_setting), + TP_ARGS(sc_exit(ret,) timer_id, flags, new_setting, old_setting), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(timer_t, timer_id, timer_id)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, new_setting, new_setting)) sc_out(ctf_integer(struct itimerspec *, old_setting, old_setting))) +) +#endif +#ifndef OVERRIDE_64_clock_nanosleep +SC_LTTNG_TRACEPOINT_EVENT(clock_nanosleep, + TP_PROTO(sc_exit(long ret,) const clockid_t which_clock, int flags, const struct timespec * rqtp, struct timespec * rmtp), + TP_ARGS(sc_exit(ret,) which_clock, flags, rqtp, rmtp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(const clockid_t, which_clock, which_clock)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct timespec *, rqtp, rqtp)) sc_out(ctf_integer(struct timespec *, rmtp, rmtp))) +) +#endif +#ifndef OVERRIDE_64_epoll_wait +SC_LTTNG_TRACEPOINT_EVENT(epoll_wait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_epoll_ctl +SC_LTTNG_TRACEPOINT_EVENT(epoll_ctl, + TP_PROTO(sc_exit(long ret,) int epfd, int op, int fd, struct epoll_event * event), + TP_ARGS(sc_exit(ret,) epfd, op, fd, event), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct epoll_event *, event, event))) +) +#endif +#ifndef OVERRIDE_64_mq_open +SC_LTTNG_TRACEPOINT_EVENT(mq_open, + TP_PROTO(sc_exit(long ret,) const char * u_name, int oflag, umode_t mode, struct mq_attr * u_attr), + TP_ARGS(sc_exit(ret,) u_name, oflag, mode, u_attr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(u_name, u_name)) sc_in(ctf_integer(int, oflag, oflag)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(struct mq_attr *, u_attr, u_attr))) +) +#endif +#ifndef OVERRIDE_64_kexec_load +SC_LTTNG_TRACEPOINT_EVENT(kexec_load, + TP_PROTO(sc_exit(long ret,) unsigned long entry, unsigned long nr_segments, struct kexec_segment * segments, unsigned long flags), + TP_ARGS(sc_exit(ret,) entry, nr_segments, segments, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, entry, entry)) sc_in(ctf_integer(unsigned long, nr_segments, nr_segments)) sc_in(ctf_integer(struct kexec_segment *, segments, segments)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_request_key +SC_LTTNG_TRACEPOINT_EVENT(request_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const char * _callout_info, key_serial_t destringid), + TP_ARGS(sc_exit(ret,) _type, _description, _callout_info, destringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const char *, _callout_info, _callout_info)) sc_in(ctf_integer(key_serial_t, destringid, destringid))) +) +#endif +#ifndef OVERRIDE_64_migrate_pages +SC_LTTNG_TRACEPOINT_EVENT(migrate_pages, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned long maxnode, const unsigned long * old_nodes, const unsigned long * new_nodes), + TP_ARGS(sc_exit(ret,) pid, maxnode, old_nodes, new_nodes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned long, maxnode, maxnode)) sc_in(ctf_integer(const unsigned long *, old_nodes, old_nodes)) sc_in(ctf_integer(const unsigned long *, new_nodes, new_nodes))) +) +#endif +#ifndef OVERRIDE_64_openat +SC_LTTNG_TRACEPOINT_EVENT(openat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, int flags, umode_t mode), + TP_ARGS(sc_exit(ret,) dfd, filename, flags, mode), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(umode_t, mode, mode))) +) +#endif +#ifndef OVERRIDE_64_mknodat +SC_LTTNG_TRACEPOINT_EVENT(mknodat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, umode_t mode, unsigned dev), + TP_ARGS(sc_exit(ret,) dfd, filename, mode, dev), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(umode_t, mode, mode)) sc_in(ctf_integer(unsigned, dev, dev))) +) +#endif +#ifndef OVERRIDE_64_newfstatat +SC_LTTNG_TRACEPOINT_EVENT(newfstatat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct stat * statbuf, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, statbuf, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_out(ctf_integer(struct stat *, statbuf, statbuf)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_renameat +SC_LTTNG_TRACEPOINT_EVENT(renameat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname))) +) +#endif +#ifndef OVERRIDE_64_readlinkat +SC_LTTNG_TRACEPOINT_EVENT(readlinkat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * pathname, char * buf, int bufsiz), + TP_ARGS(sc_exit(ret,) dfd, pathname, buf, bufsiz), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname)) sc_out(ctf_integer(char *, buf, buf)) sc_in(ctf_integer(int, bufsiz, bufsiz))) +) +#endif +#ifndef OVERRIDE_64_vmsplice +SC_LTTNG_TRACEPOINT_EVENT(vmsplice, + TP_PROTO(sc_exit(long ret,) int fd, const struct iovec * iov, unsigned long nr_segs, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, iov, nr_segs, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(const struct iovec *, iov, iov)) sc_in(ctf_integer(unsigned long, nr_segs, nr_segs)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_utimensat +SC_LTTNG_TRACEPOINT_EVENT(utimensat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, struct timespec * utimes, int flags), + TP_ARGS(sc_exit(ret,) dfd, filename, utimes, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(struct timespec *, utimes, utimes)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_timerfd_settime +SC_LTTNG_TRACEPOINT_EVENT(timerfd_settime, + TP_PROTO(sc_exit(long ret,) int ufd, int flags, const struct itimerspec * utmr, struct itimerspec * otmr), + TP_ARGS(sc_exit(ret,) ufd, flags, utmr, otmr), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(int, flags, flags)) sc_in(ctf_integer(const struct itimerspec *, utmr, utmr)) sc_out(ctf_integer(struct itimerspec *, otmr, otmr))) +) +#endif +#ifndef OVERRIDE_64_accept4 +SC_LTTNG_TRACEPOINT_EVENT(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) sc_inout(ctf_integer(int *, upeer_addrlen, upeer_addrlen)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_signalfd4 +SC_LTTNG_TRACEPOINT_EVENT(signalfd4, + TP_PROTO(sc_exit(long ret,) int ufd, sigset_t * user_mask, size_t sizemask, int flags), + TP_ARGS(sc_exit(ret,) ufd, user_mask, sizemask, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, ufd, ufd)) sc_in(ctf_integer(sigset_t *, user_mask, user_mask)) sc_in(ctf_integer(size_t, sizemask, sizemask)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_rt_tgsigqueueinfo +SC_LTTNG_TRACEPOINT_EVENT(rt_tgsigqueueinfo, + TP_PROTO(sc_exit(long ret,) pid_t tgid, pid_t pid, int sig, siginfo_t * uinfo), + TP_ARGS(sc_exit(ret,) tgid, pid, sig, uinfo), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, tgid, tgid)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, sig, sig)) sc_in(ctf_integer(siginfo_t *, uinfo, uinfo))) +) +#endif +#ifndef OVERRIDE_64_prlimit64 +SC_LTTNG_TRACEPOINT_EVENT(prlimit64, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned int resource, const struct rlimit64 * new_rlim, struct rlimit64 * old_rlim), + TP_ARGS(sc_exit(ret,) pid, resource, new_rlim, old_rlim), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned int, resource, resource)) sc_in(ctf_integer(const struct rlimit64 *, new_rlim, new_rlim)) sc_out(ctf_integer(struct rlimit64 *, old_rlim, old_rlim))) +) +#endif +#ifndef OVERRIDE_64_sendmmsg +SC_LTTNG_TRACEPOINT_EVENT(sendmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_select +SC_LTTNG_TRACEPOINT_EVENT(select, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval * tvp), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tvp), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timeval *, tvp, tvp))) +) +#endif +#ifndef OVERRIDE_64_setsockopt +SC_LTTNG_TRACEPOINT_EVENT(setsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_in(ctf_integer(char *, optval, optval)) sc_in(ctf_integer(int, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_getsockopt +SC_LTTNG_TRACEPOINT_EVENT(getsockopt, + TP_PROTO(sc_exit(long ret,) int fd, int level, int optname, char * optval, int * optlen), + TP_ARGS(sc_exit(ret,) fd, level, optname, optval, optlen), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(int, level, level)) sc_in(ctf_integer(int, optname, optname)) sc_out(ctf_integer(char *, optval, optval)) sc_inout(ctf_integer(int *, optlen, optlen))) +) +#endif +#ifndef OVERRIDE_64_msgrcv +SC_LTTNG_TRACEPOINT_EVENT(msgrcv, + TP_PROTO(sc_exit(long ret,) int msqid, struct msgbuf * msgp, size_t msgsz, long msgtyp, int msgflg), + TP_ARGS(sc_exit(ret,) msqid, msgp, msgsz, msgtyp, msgflg), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, msqid, msqid)) sc_out(ctf_integer(struct msgbuf *, msgp, msgp)) sc_in(ctf_integer(size_t, msgsz, msgsz)) sc_in(ctf_integer(long, msgtyp, msgtyp)) sc_in(ctf_integer(int, msgflg, msgflg))) +) +#endif +#ifndef OVERRIDE_64_mount +SC_LTTNG_TRACEPOINT_EVENT(mount, + TP_PROTO(sc_exit(long ret,) char * dev_name, char * dir_name, char * type, unsigned long flags, void * data), + TP_ARGS(sc_exit(ret,) dev_name, dir_name, type, flags, data), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(dev_name, dev_name)) sc_in(ctf_user_string(dir_name, dir_name)) sc_in(ctf_user_string(type, type)) sc_in(ctf_integer(unsigned long, flags, flags)) sc_in(ctf_integer(void *, data, data))) +) +#endif +#ifndef OVERRIDE_64_setxattr +SC_LTTNG_TRACEPOINT_EVENT(setxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_lsetxattr +SC_LTTNG_TRACEPOINT_EVENT(lsetxattr, + TP_PROTO(sc_exit(long ret,) const char * pathname, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) pathname, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(pathname, pathname)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_fsetxattr +SC_LTTNG_TRACEPOINT_EVENT(fsetxattr, + TP_PROTO(sc_exit(long ret,) int fd, const char * name, const void * value, size_t size, int flags), + TP_ARGS(sc_exit(ret,) fd, name, value, size, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_user_string(name, name)) sc_in(ctf_integer(const void *, value, value)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_io_getevents +SC_LTTNG_TRACEPOINT_EVENT(io_getevents, + TP_PROTO(sc_exit(long ret,) aio_context_t ctx_id, long min_nr, long nr, struct io_event * events, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) ctx_id, min_nr, nr, events, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(aio_context_t, ctx_id, ctx_id)) sc_in(ctf_integer(long, min_nr, min_nr)) sc_in(ctf_integer(long, nr, nr)) sc_out(ctf_integer(struct io_event *, events, events)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_get_mempolicy +SC_LTTNG_TRACEPOINT_EVENT(get_mempolicy, + TP_PROTO(sc_exit(long ret,) int * policy, unsigned long * nmask, unsigned long maxnode, unsigned long addr, unsigned long flags), + TP_ARGS(sc_exit(ret,) policy, nmask, maxnode, addr, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_out(ctf_integer(int *, policy, policy)) sc_out(ctf_integer(unsigned long *, nmask, nmask)) sc_in(ctf_integer(unsigned long, maxnode, maxnode)) sc_in(ctf_integer(unsigned long, addr, addr)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_mq_timedsend +SC_LTTNG_TRACEPOINT_EVENT(mq_timedsend, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, const char * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_in(ctf_integer(const char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_in(ctf_integer(unsigned int, msg_prio, msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_64_mq_timedreceive +SC_LTTNG_TRACEPOINT_EVENT(mq_timedreceive, + TP_PROTO(sc_exit(long ret,) mqd_t mqdes, char * u_msg_ptr, size_t msg_len, unsigned int * u_msg_prio, const struct timespec * u_abs_timeout), + TP_ARGS(sc_exit(ret,) mqdes, u_msg_ptr, msg_len, u_msg_prio, u_abs_timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(mqd_t, mqdes, mqdes)) sc_out(ctf_integer(char *, u_msg_ptr, u_msg_ptr)) sc_in(ctf_integer(size_t, msg_len, msg_len)) sc_out(ctf_integer(unsigned int *, u_msg_prio, u_msg_prio)) sc_in(ctf_integer(const struct timespec *, u_abs_timeout, u_abs_timeout))) +) +#endif +#ifndef OVERRIDE_64_waitid +SC_LTTNG_TRACEPOINT_EVENT(waitid, + TP_PROTO(sc_exit(long ret,) int which, pid_t upid, struct siginfo * infop, int options, struct rusage * ru), + TP_ARGS(sc_exit(ret,) which, upid, infop, options, ru), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, which, which)) sc_in(ctf_integer(pid_t, upid, upid)) sc_out(ctf_integer(struct siginfo *, infop, infop)) sc_in(ctf_integer(int, options, options)) sc_out(ctf_integer(struct rusage *, ru, ru))) +) +#endif +#ifndef OVERRIDE_64_add_key +SC_LTTNG_TRACEPOINT_EVENT(add_key, + TP_PROTO(sc_exit(long ret,) const char * _type, const char * _description, const void * _payload, size_t plen, key_serial_t ringid), + TP_ARGS(sc_exit(ret,) _type, _description, _payload, plen, ringid), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_user_string(_type, _type)) sc_in(ctf_integer(const char *, _description, _description)) sc_in(ctf_integer(const void *, _payload, _payload)) sc_in(ctf_integer(size_t, plen, plen)) sc_in(ctf_integer(key_serial_t, ringid, ringid))) +) +#endif +#ifndef OVERRIDE_64_fchownat +SC_LTTNG_TRACEPOINT_EVENT(fchownat, + TP_PROTO(sc_exit(long ret,) int dfd, const char * filename, uid_t user, gid_t group, int flag), + TP_ARGS(sc_exit(ret,) dfd, filename, user, group, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(filename, filename)) sc_in(ctf_integer(uid_t, user, user)) sc_in(ctf_integer(gid_t, group, group)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_linkat +SC_LTTNG_TRACEPOINT_EVENT(linkat, + TP_PROTO(sc_exit(long ret,) int olddfd, const char * oldname, int newdfd, const char * newname, int flags), + TP_ARGS(sc_exit(ret,) olddfd, oldname, newdfd, newname, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, olddfd, olddfd)) sc_in(ctf_user_string(oldname, oldname)) sc_in(ctf_integer(int, newdfd, newdfd)) sc_in(ctf_user_string(newname, newname)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_ppoll +SC_LTTNG_TRACEPOINT_EVENT(ppoll, + TP_PROTO(sc_exit(long ret,) struct pollfd * ufds, unsigned int nfds, struct timespec * tsp, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) ufds, nfds, tsp, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(struct pollfd *, ufds, ufds)) sc_in(ctf_integer(unsigned int, nfds, nfds)) sc_in(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_preadv +SC_LTTNG_TRACEPOINT_EVENT(preadv, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_out(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_pwritev +SC_LTTNG_TRACEPOINT_EVENT(pwritev, + TP_PROTO(sc_exit(long ret,) unsigned long fd, const struct iovec * vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h), + TP_ARGS(sc_exit(ret,) fd, vec, vlen, pos_l, pos_h), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, fd, fd)) sc_in(ctf_integer(const struct iovec *, vec, vec)) sc_in(ctf_integer(unsigned long, vlen, vlen)) sc_in(ctf_integer(unsigned long, pos_l, pos_l)) sc_in(ctf_integer(unsigned long, pos_h, pos_h))) +) +#endif +#ifndef OVERRIDE_64_perf_event_open +SC_LTTNG_TRACEPOINT_EVENT(perf_event_open, + TP_PROTO(sc_exit(long ret,) struct perf_event_attr * attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags), + TP_ARGS(sc_exit(ret,) attr_uptr, pid, cpu, group_fd, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(struct perf_event_attr *, attr_uptr, attr_uptr)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(int, cpu, cpu)) sc_in(ctf_integer(int, group_fd, group_fd)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_recvmmsg +SC_LTTNG_TRACEPOINT_EVENT(recvmmsg, + TP_PROTO(sc_exit(long ret,) int fd, struct mmsghdr * mmsg, unsigned int vlen, unsigned int flags, struct timespec * timeout), + TP_ARGS(sc_exit(ret,) fd, mmsg, vlen, flags, timeout), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(struct mmsghdr *, mmsg, mmsg)) sc_in(ctf_integer(unsigned int, vlen, vlen)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_inout(ctf_integer(struct timespec *, timeout, timeout))) +) +#endif +#ifndef OVERRIDE_64_fanotify_mark +SC_LTTNG_TRACEPOINT_EVENT(fanotify_mark, + TP_PROTO(sc_exit(long ret,) int fanotify_fd, unsigned int flags, __u64 mask, int dfd, const char * pathname), + TP_ARGS(sc_exit(ret,) fanotify_fd, flags, mask, dfd, pathname), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fanotify_fd, fanotify_fd)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(__u64, mask, mask)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(pathname, pathname))) +) +#endif +#ifndef OVERRIDE_64_name_to_handle_at +SC_LTTNG_TRACEPOINT_EVENT(name_to_handle_at, + TP_PROTO(sc_exit(long ret,) int dfd, const char * name, struct file_handle * handle, int * mnt_id, int flag), + TP_ARGS(sc_exit(ret,) dfd, name, handle, mnt_id, flag), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, dfd, dfd)) sc_in(ctf_user_string(name, name)) sc_inout(ctf_integer(struct file_handle *, handle, handle)) sc_out(ctf_integer(int *, mnt_id, mnt_id)) sc_in(ctf_integer(int, flag, flag))) +) +#endif +#ifndef OVERRIDE_64_sendto +SC_LTTNG_TRACEPOINT_EVENT(sendto, + TP_PROTO(sc_exit(long ret,) int fd, void * buff, size_t len, unsigned int flags, struct sockaddr * addr, int addr_len), + TP_ARGS(sc_exit(ret,) fd, buff, len, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_in(ctf_integer(void *, buff, buff)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_in(ctf_integer(struct sockaddr *, addr, addr)) sc_in(ctf_integer(int, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_recvfrom +SC_LTTNG_TRACEPOINT_EVENT(recvfrom, + TP_PROTO(sc_exit(long ret,) int fd, void * ubuf, size_t size, unsigned int flags, struct sockaddr * addr, int * addr_len), + TP_ARGS(sc_exit(ret,) fd, ubuf, size, flags, addr, addr_len), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd, fd)) sc_out(ctf_integer(void *, ubuf, ubuf)) sc_in(ctf_integer(size_t, size, size)) sc_in(ctf_integer(unsigned int, flags, flags)) sc_out(ctf_integer(struct sockaddr *, addr, addr)) sc_inout(ctf_integer(int *, addr_len, addr_len))) +) +#endif +#ifndef OVERRIDE_64_futex +SC_LTTNG_TRACEPOINT_EVENT(futex, + TP_PROTO(sc_exit(long ret,) u32 * uaddr, int op, u32 val, struct timespec * utime, u32 * uaddr2, u32 val3), + TP_ARGS(sc_exit(ret,) uaddr, op, val, utime, uaddr2, val3), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_inout(ctf_integer(u32 *, uaddr, uaddr)) sc_in(ctf_integer(int, op, op)) sc_in(ctf_integer(u32, val, val)) sc_in(ctf_integer(struct timespec *, utime, utime)) sc_inout(ctf_integer(u32 *, uaddr2, uaddr2)) sc_in(ctf_integer(u32, val3, val3))) +) +#endif +#ifndef OVERRIDE_64_mbind +SC_LTTNG_TRACEPOINT_EVENT(mbind, + TP_PROTO(sc_exit(long ret,) unsigned long start, unsigned long len, unsigned long mode, unsigned long * nmask, unsigned long maxnode, unsigned flags), + TP_ARGS(sc_exit(ret,) start, len, mode, nmask, maxnode, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(unsigned long, start, start)) sc_in(ctf_integer(unsigned long, len, len)) sc_in(ctf_integer(unsigned long, mode, mode)) sc_in(ctf_integer(unsigned long *, nmask, nmask)) sc_in(ctf_integer(unsigned long, maxnode, maxnode)) sc_in(ctf_integer(unsigned, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_pselect6 +SC_LTTNG_TRACEPOINT_EVENT(pselect6, + TP_PROTO(sc_exit(long ret,) int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timespec * tsp, void * sig), + TP_ARGS(sc_exit(ret,) n, inp, outp, exp, tsp, sig), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, n, n)) sc_inout(ctf_integer(fd_set *, inp, inp)) sc_inout(ctf_integer(fd_set *, outp, outp)) sc_inout(ctf_integer(fd_set *, exp, exp)) sc_inout(ctf_integer(struct timespec *, tsp, tsp)) sc_in(ctf_integer(void *, sig, sig))) +) +#endif +#ifndef OVERRIDE_64_splice +SC_LTTNG_TRACEPOINT_EVENT(splice, + TP_PROTO(sc_exit(long ret,) int fd_in, loff_t * off_in, int fd_out, loff_t * off_out, size_t len, unsigned int flags), + TP_ARGS(sc_exit(ret,) fd_in, off_in, fd_out, off_out, len, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, fd_in, fd_in)) sc_in(ctf_integer(loff_t *, off_in, off_in)) sc_in(ctf_integer(int, fd_out, fd_out)) sc_in(ctf_integer(loff_t *, off_out, off_out)) sc_in(ctf_integer(size_t, len, len)) sc_in(ctf_integer(unsigned int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_move_pages +SC_LTTNG_TRACEPOINT_EVENT(move_pages, + TP_PROTO(sc_exit(long ret,) pid_t pid, unsigned long nr_pages, const void * * pages, const int * nodes, int * status, int flags), + TP_ARGS(sc_exit(ret,) pid, nr_pages, pages, nodes, status, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(unsigned long, nr_pages, nr_pages)) sc_in(ctf_integer(const void * *, pages, pages)) sc_in(ctf_integer(const int *, nodes, nodes)) sc_out(ctf_integer(int *, status, status)) sc_in(ctf_integer(int, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_epoll_pwait +SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, + TP_PROTO(sc_exit(long ret,) int epfd, struct epoll_event * events, int maxevents, int timeout, const sigset_t * sigmask, size_t sigsetsize), + TP_ARGS(sc_exit(ret,) epfd, events, maxevents, timeout, sigmask, sigsetsize), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(int, epfd, epfd)) sc_out(ctf_integer(struct epoll_event *, events, events)) sc_in(ctf_integer(int, maxevents, maxevents)) sc_in(ctf_integer(int, timeout, timeout)) sc_in(ctf_integer(const sigset_t *, sigmask, sigmask)) sc_in(ctf_integer(size_t, sigsetsize, sigsetsize))) +) +#endif +#ifndef OVERRIDE_64_process_vm_readv +SC_LTTNG_TRACEPOINT_EVENT(process_vm_readv, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_out(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif +#ifndef OVERRIDE_64_process_vm_writev +SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, + TP_PROTO(sc_exit(long ret,) pid_t pid, const struct iovec * lvec, unsigned long liovcnt, const struct iovec * rvec, unsigned long riovcnt, unsigned long flags), + TP_ARGS(sc_exit(ret,) pid, lvec, liovcnt, rvec, riovcnt, flags), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) sc_in(ctf_integer(pid_t, pid, pid)) sc_in(ctf_integer(const struct iovec *, lvec, lvec)) sc_in(ctf_integer(unsigned long, liovcnt, liovcnt)) sc_in(ctf_integer(const struct iovec *, rvec, rvec)) sc_in(ctf_integer(unsigned long, riovcnt, riovcnt)) sc_in(ctf_integer(unsigned long, flags, flags))) +) +#endif + +#endif /* _TRACE_SYSCALLS_POINTERS_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include "x86-64-syscalls-3.10.0-rc7_pointers_override.h" +#include "syscalls_pointers_override.h" + +#ifndef OVERRIDE_TABLE_64_read +TRACE_SYSCALL_TABLE(read, read, 0, 3) +#endif +#ifndef OVERRIDE_TABLE_64_write +TRACE_SYSCALL_TABLE(write, write, 1, 3) +#endif +#ifndef OVERRIDE_TABLE_64_open +TRACE_SYSCALL_TABLE(open, open, 2, 3) +#endif +#ifndef OVERRIDE_TABLE_64_newstat +TRACE_SYSCALL_TABLE(newstat, newstat, 4, 2) +#endif +#ifndef OVERRIDE_TABLE_64_newfstat +TRACE_SYSCALL_TABLE(newfstat, newfstat, 5, 2) +#endif +#ifndef OVERRIDE_TABLE_64_newlstat +TRACE_SYSCALL_TABLE(newlstat, newlstat, 6, 2) +#endif +#ifndef OVERRIDE_TABLE_64_poll +TRACE_SYSCALL_TABLE(poll, poll, 7, 3) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigaction +TRACE_SYSCALL_TABLE(rt_sigaction, rt_sigaction, 13, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigprocmask +TRACE_SYSCALL_TABLE(rt_sigprocmask, rt_sigprocmask, 14, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pread64 +TRACE_SYSCALL_TABLE(pread64, pread64, 17, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pwrite64 +TRACE_SYSCALL_TABLE(pwrite64, pwrite64, 18, 4) +#endif +#ifndef OVERRIDE_TABLE_64_readv +TRACE_SYSCALL_TABLE(readv, readv, 19, 3) +#endif +#ifndef OVERRIDE_TABLE_64_writev +TRACE_SYSCALL_TABLE(writev, writev, 20, 3) +#endif +#ifndef OVERRIDE_TABLE_64_access +TRACE_SYSCALL_TABLE(access, access, 21, 2) +#endif +#ifndef OVERRIDE_TABLE_64_pipe +TRACE_SYSCALL_TABLE(pipe, pipe, 22, 1) +#endif +#ifndef OVERRIDE_TABLE_64_select +TRACE_SYSCALL_TABLE(select, select, 23, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mincore +TRACE_SYSCALL_TABLE(mincore, mincore, 27, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmat +TRACE_SYSCALL_TABLE(shmat, shmat, 30, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmctl +TRACE_SYSCALL_TABLE(shmctl, shmctl, 31, 3) +#endif +#ifndef OVERRIDE_TABLE_64_nanosleep +TRACE_SYSCALL_TABLE(nanosleep, nanosleep, 35, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getitimer +TRACE_SYSCALL_TABLE(getitimer, getitimer, 36, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setitimer +TRACE_SYSCALL_TABLE(setitimer, setitimer, 38, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sendfile64 +TRACE_SYSCALL_TABLE(sendfile64, sendfile64, 40, 4) +#endif +#ifndef OVERRIDE_TABLE_64_connect +TRACE_SYSCALL_TABLE(connect, connect, 42, 3) +#endif +#ifndef OVERRIDE_TABLE_64_accept +TRACE_SYSCALL_TABLE(accept, accept, 43, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sendto +TRACE_SYSCALL_TABLE(sendto, sendto, 44, 6) +#endif +#ifndef OVERRIDE_TABLE_64_recvfrom +TRACE_SYSCALL_TABLE(recvfrom, recvfrom, 45, 6) +#endif +#ifndef OVERRIDE_TABLE_64_sendmsg +TRACE_SYSCALL_TABLE(sendmsg, sendmsg, 46, 3) +#endif +#ifndef OVERRIDE_TABLE_64_recvmsg +TRACE_SYSCALL_TABLE(recvmsg, recvmsg, 47, 3) +#endif +#ifndef OVERRIDE_TABLE_64_bind +TRACE_SYSCALL_TABLE(bind, bind, 49, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getsockname +TRACE_SYSCALL_TABLE(getsockname, getsockname, 51, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getpeername +TRACE_SYSCALL_TABLE(getpeername, getpeername, 52, 3) +#endif +#ifndef OVERRIDE_TABLE_64_socketpair +TRACE_SYSCALL_TABLE(socketpair, socketpair, 53, 4) +#endif +#ifndef OVERRIDE_TABLE_64_setsockopt +TRACE_SYSCALL_TABLE(setsockopt, setsockopt, 54, 5) +#endif +#ifndef OVERRIDE_TABLE_64_getsockopt +TRACE_SYSCALL_TABLE(getsockopt, getsockopt, 55, 5) +#endif +#ifndef OVERRIDE_TABLE_64_wait4 +TRACE_SYSCALL_TABLE(wait4, wait4, 61, 4) +#endif +#ifndef OVERRIDE_TABLE_64_newuname +TRACE_SYSCALL_TABLE(newuname, newuname, 63, 1) +#endif +#ifndef OVERRIDE_TABLE_64_semop +TRACE_SYSCALL_TABLE(semop, semop, 65, 3) +#endif +#ifndef OVERRIDE_TABLE_64_shmdt +TRACE_SYSCALL_TABLE(shmdt, shmdt, 67, 1) +#endif +#ifndef OVERRIDE_TABLE_64_msgsnd +TRACE_SYSCALL_TABLE(msgsnd, msgsnd, 69, 4) +#endif +#ifndef OVERRIDE_TABLE_64_msgrcv +TRACE_SYSCALL_TABLE(msgrcv, msgrcv, 70, 5) +#endif +#ifndef OVERRIDE_TABLE_64_msgctl +TRACE_SYSCALL_TABLE(msgctl, msgctl, 71, 3) +#endif +#ifndef OVERRIDE_TABLE_64_truncate +TRACE_SYSCALL_TABLE(truncate, truncate, 76, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getdents +TRACE_SYSCALL_TABLE(getdents, getdents, 78, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getcwd +TRACE_SYSCALL_TABLE(getcwd, getcwd, 79, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chdir +TRACE_SYSCALL_TABLE(chdir, chdir, 80, 1) +#endif +#ifndef OVERRIDE_TABLE_64_rename +TRACE_SYSCALL_TABLE(rename, rename, 82, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mkdir +TRACE_SYSCALL_TABLE(mkdir, mkdir, 83, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rmdir +TRACE_SYSCALL_TABLE(rmdir, rmdir, 84, 1) +#endif +#ifndef OVERRIDE_TABLE_64_creat +TRACE_SYSCALL_TABLE(creat, creat, 85, 2) +#endif +#ifndef OVERRIDE_TABLE_64_link +TRACE_SYSCALL_TABLE(link, link, 86, 2) +#endif +#ifndef OVERRIDE_TABLE_64_unlink +TRACE_SYSCALL_TABLE(unlink, unlink, 87, 1) +#endif +#ifndef OVERRIDE_TABLE_64_symlink +TRACE_SYSCALL_TABLE(symlink, symlink, 88, 2) +#endif +#ifndef OVERRIDE_TABLE_64_readlink +TRACE_SYSCALL_TABLE(readlink, readlink, 89, 3) +#endif +#ifndef OVERRIDE_TABLE_64_chmod +TRACE_SYSCALL_TABLE(chmod, chmod, 90, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chown +TRACE_SYSCALL_TABLE(chown, chown, 92, 3) +#endif +#ifndef OVERRIDE_TABLE_64_lchown +TRACE_SYSCALL_TABLE(lchown, lchown, 94, 3) +#endif +#ifndef OVERRIDE_TABLE_64_gettimeofday +TRACE_SYSCALL_TABLE(gettimeofday, gettimeofday, 96, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrlimit +TRACE_SYSCALL_TABLE(getrlimit, getrlimit, 97, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getrusage +TRACE_SYSCALL_TABLE(getrusage, getrusage, 98, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sysinfo +TRACE_SYSCALL_TABLE(sysinfo, sysinfo, 99, 1) +#endif +#ifndef OVERRIDE_TABLE_64_times +TRACE_SYSCALL_TABLE(times, times, 100, 1) +#endif +#ifndef OVERRIDE_TABLE_64_syslog +TRACE_SYSCALL_TABLE(syslog, syslog, 103, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getgroups +TRACE_SYSCALL_TABLE(getgroups, getgroups, 115, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setgroups +TRACE_SYSCALL_TABLE(setgroups, setgroups, 116, 2) +#endif +#ifndef OVERRIDE_TABLE_64_getresuid +TRACE_SYSCALL_TABLE(getresuid, getresuid, 118, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getresgid +TRACE_SYSCALL_TABLE(getresgid, getresgid, 120, 3) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigpending +TRACE_SYSCALL_TABLE(rt_sigpending, rt_sigpending, 127, 2) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigtimedwait +TRACE_SYSCALL_TABLE(rt_sigtimedwait, rt_sigtimedwait, 128, 4) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigqueueinfo +TRACE_SYSCALL_TABLE(rt_sigqueueinfo, rt_sigqueueinfo, 129, 3) +#endif +#ifndef OVERRIDE_TABLE_64_rt_sigsuspend +TRACE_SYSCALL_TABLE(rt_sigsuspend, rt_sigsuspend, 130, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sigaltstack +TRACE_SYSCALL_TABLE(sigaltstack, sigaltstack, 131, 2) +#endif +#ifndef OVERRIDE_TABLE_64_utime +TRACE_SYSCALL_TABLE(utime, utime, 132, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mknod +TRACE_SYSCALL_TABLE(mknod, mknod, 133, 3) +#endif +#ifndef OVERRIDE_TABLE_64_ustat +TRACE_SYSCALL_TABLE(ustat, ustat, 136, 2) +#endif +#ifndef OVERRIDE_TABLE_64_statfs +TRACE_SYSCALL_TABLE(statfs, statfs, 137, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fstatfs +TRACE_SYSCALL_TABLE(fstatfs, fstatfs, 138, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setparam +TRACE_SYSCALL_TABLE(sched_setparam, sched_setparam, 142, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getparam +TRACE_SYSCALL_TABLE(sched_getparam, sched_getparam, 143, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setscheduler +TRACE_SYSCALL_TABLE(sched_setscheduler, sched_setscheduler, 144, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_rr_get_interval +TRACE_SYSCALL_TABLE(sched_rr_get_interval, sched_rr_get_interval, 148, 2) +#endif +#ifndef OVERRIDE_TABLE_64_pivot_root +TRACE_SYSCALL_TABLE(pivot_root, pivot_root, 155, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sysctl +TRACE_SYSCALL_TABLE(sysctl, sysctl, 156, 1) +#endif +#ifndef OVERRIDE_TABLE_64_adjtimex +TRACE_SYSCALL_TABLE(adjtimex, adjtimex, 159, 1) +#endif +#ifndef OVERRIDE_TABLE_64_setrlimit +TRACE_SYSCALL_TABLE(setrlimit, setrlimit, 160, 2) +#endif +#ifndef OVERRIDE_TABLE_64_chroot +TRACE_SYSCALL_TABLE(chroot, chroot, 161, 1) +#endif +#ifndef OVERRIDE_TABLE_64_acct +TRACE_SYSCALL_TABLE(acct, acct, 163, 1) +#endif +#ifndef OVERRIDE_TABLE_64_settimeofday +TRACE_SYSCALL_TABLE(settimeofday, settimeofday, 164, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mount +TRACE_SYSCALL_TABLE(mount, mount, 165, 5) +#endif +#ifndef OVERRIDE_TABLE_64_umount +TRACE_SYSCALL_TABLE(umount, umount, 166, 2) +#endif +#ifndef OVERRIDE_TABLE_64_swapon +TRACE_SYSCALL_TABLE(swapon, swapon, 167, 2) +#endif +#ifndef OVERRIDE_TABLE_64_swapoff +TRACE_SYSCALL_TABLE(swapoff, swapoff, 168, 1) +#endif +#ifndef OVERRIDE_TABLE_64_reboot +TRACE_SYSCALL_TABLE(reboot, reboot, 169, 4) +#endif +#ifndef OVERRIDE_TABLE_64_sethostname +TRACE_SYSCALL_TABLE(sethostname, sethostname, 170, 2) +#endif +#ifndef OVERRIDE_TABLE_64_setdomainname +TRACE_SYSCALL_TABLE(setdomainname, setdomainname, 171, 2) +#endif +#ifndef OVERRIDE_TABLE_64_init_module +TRACE_SYSCALL_TABLE(init_module, init_module, 175, 3) +#endif +#ifndef OVERRIDE_TABLE_64_delete_module +TRACE_SYSCALL_TABLE(delete_module, delete_module, 176, 2) +#endif +#ifndef OVERRIDE_TABLE_64_quotactl +TRACE_SYSCALL_TABLE(quotactl, quotactl, 179, 4) +#endif +#ifndef OVERRIDE_TABLE_64_setxattr +TRACE_SYSCALL_TABLE(setxattr, setxattr, 188, 5) +#endif +#ifndef OVERRIDE_TABLE_64_lsetxattr +TRACE_SYSCALL_TABLE(lsetxattr, lsetxattr, 189, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fsetxattr +TRACE_SYSCALL_TABLE(fsetxattr, fsetxattr, 190, 5) +#endif +#ifndef OVERRIDE_TABLE_64_getxattr +TRACE_SYSCALL_TABLE(getxattr, getxattr, 191, 4) +#endif +#ifndef OVERRIDE_TABLE_64_lgetxattr +TRACE_SYSCALL_TABLE(lgetxattr, lgetxattr, 192, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fgetxattr +TRACE_SYSCALL_TABLE(fgetxattr, fgetxattr, 193, 4) +#endif +#ifndef OVERRIDE_TABLE_64_listxattr +TRACE_SYSCALL_TABLE(listxattr, listxattr, 194, 3) +#endif +#ifndef OVERRIDE_TABLE_64_llistxattr +TRACE_SYSCALL_TABLE(llistxattr, llistxattr, 195, 3) +#endif +#ifndef OVERRIDE_TABLE_64_flistxattr +TRACE_SYSCALL_TABLE(flistxattr, flistxattr, 196, 3) +#endif +#ifndef OVERRIDE_TABLE_64_removexattr +TRACE_SYSCALL_TABLE(removexattr, removexattr, 197, 2) +#endif +#ifndef OVERRIDE_TABLE_64_lremovexattr +TRACE_SYSCALL_TABLE(lremovexattr, lremovexattr, 198, 2) +#endif +#ifndef OVERRIDE_TABLE_64_fremovexattr +TRACE_SYSCALL_TABLE(fremovexattr, fremovexattr, 199, 2) +#endif +#ifndef OVERRIDE_TABLE_64_time +TRACE_SYSCALL_TABLE(time, time, 201, 1) +#endif +#ifndef OVERRIDE_TABLE_64_futex +TRACE_SYSCALL_TABLE(futex, futex, 202, 6) +#endif +#ifndef OVERRIDE_TABLE_64_sched_setaffinity +TRACE_SYSCALL_TABLE(sched_setaffinity, sched_setaffinity, 203, 3) +#endif +#ifndef OVERRIDE_TABLE_64_sched_getaffinity +TRACE_SYSCALL_TABLE(sched_getaffinity, sched_getaffinity, 204, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_setup +TRACE_SYSCALL_TABLE(io_setup, io_setup, 206, 2) +#endif +#ifndef OVERRIDE_TABLE_64_io_getevents +TRACE_SYSCALL_TABLE(io_getevents, io_getevents, 208, 5) +#endif +#ifndef OVERRIDE_TABLE_64_io_submit +TRACE_SYSCALL_TABLE(io_submit, io_submit, 209, 3) +#endif +#ifndef OVERRIDE_TABLE_64_io_cancel +TRACE_SYSCALL_TABLE(io_cancel, io_cancel, 210, 3) +#endif +#ifndef OVERRIDE_TABLE_64_lookup_dcookie +TRACE_SYSCALL_TABLE(lookup_dcookie, lookup_dcookie, 212, 3) +#endif +#ifndef OVERRIDE_TABLE_64_getdents64 +TRACE_SYSCALL_TABLE(getdents64, getdents64, 217, 3) +#endif +#ifndef OVERRIDE_TABLE_64_set_tid_address +TRACE_SYSCALL_TABLE(set_tid_address, set_tid_address, 218, 1) +#endif +#ifndef OVERRIDE_TABLE_64_semtimedop +TRACE_SYSCALL_TABLE(semtimedop, semtimedop, 220, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timer_create +TRACE_SYSCALL_TABLE(timer_create, timer_create, 222, 3) +#endif +#ifndef OVERRIDE_TABLE_64_timer_settime +TRACE_SYSCALL_TABLE(timer_settime, timer_settime, 223, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timer_gettime +TRACE_SYSCALL_TABLE(timer_gettime, timer_gettime, 224, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_settime +TRACE_SYSCALL_TABLE(clock_settime, clock_settime, 227, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_gettime +TRACE_SYSCALL_TABLE(clock_gettime, clock_gettime, 228, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_getres +TRACE_SYSCALL_TABLE(clock_getres, clock_getres, 229, 2) +#endif +#ifndef OVERRIDE_TABLE_64_clock_nanosleep +TRACE_SYSCALL_TABLE(clock_nanosleep, clock_nanosleep, 230, 4) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_wait +TRACE_SYSCALL_TABLE(epoll_wait, epoll_wait, 232, 4) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_ctl +TRACE_SYSCALL_TABLE(epoll_ctl, epoll_ctl, 233, 4) +#endif +#ifndef OVERRIDE_TABLE_64_utimes +TRACE_SYSCALL_TABLE(utimes, utimes, 235, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mbind +TRACE_SYSCALL_TABLE(mbind, mbind, 237, 6) +#endif +#ifndef OVERRIDE_TABLE_64_set_mempolicy +TRACE_SYSCALL_TABLE(set_mempolicy, set_mempolicy, 238, 3) +#endif +#ifndef OVERRIDE_TABLE_64_get_mempolicy +TRACE_SYSCALL_TABLE(get_mempolicy, get_mempolicy, 239, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mq_open +TRACE_SYSCALL_TABLE(mq_open, mq_open, 240, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mq_unlink +TRACE_SYSCALL_TABLE(mq_unlink, mq_unlink, 241, 1) +#endif +#ifndef OVERRIDE_TABLE_64_mq_timedsend +TRACE_SYSCALL_TABLE(mq_timedsend, mq_timedsend, 242, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mq_timedreceive +TRACE_SYSCALL_TABLE(mq_timedreceive, mq_timedreceive, 243, 5) +#endif +#ifndef OVERRIDE_TABLE_64_mq_notify +TRACE_SYSCALL_TABLE(mq_notify, mq_notify, 244, 2) +#endif +#ifndef OVERRIDE_TABLE_64_mq_getsetattr +TRACE_SYSCALL_TABLE(mq_getsetattr, mq_getsetattr, 245, 3) +#endif +#ifndef OVERRIDE_TABLE_64_kexec_load +TRACE_SYSCALL_TABLE(kexec_load, kexec_load, 246, 4) +#endif +#ifndef OVERRIDE_TABLE_64_waitid +TRACE_SYSCALL_TABLE(waitid, waitid, 247, 5) +#endif +#ifndef OVERRIDE_TABLE_64_add_key +TRACE_SYSCALL_TABLE(add_key, add_key, 248, 5) +#endif +#ifndef OVERRIDE_TABLE_64_request_key +TRACE_SYSCALL_TABLE(request_key, request_key, 249, 4) +#endif +#ifndef OVERRIDE_TABLE_64_inotify_add_watch +TRACE_SYSCALL_TABLE(inotify_add_watch, inotify_add_watch, 254, 3) +#endif +#ifndef OVERRIDE_TABLE_64_migrate_pages +TRACE_SYSCALL_TABLE(migrate_pages, migrate_pages, 256, 4) +#endif +#ifndef OVERRIDE_TABLE_64_openat +TRACE_SYSCALL_TABLE(openat, openat, 257, 4) +#endif +#ifndef OVERRIDE_TABLE_64_mkdirat +TRACE_SYSCALL_TABLE(mkdirat, mkdirat, 258, 3) +#endif +#ifndef OVERRIDE_TABLE_64_mknodat +TRACE_SYSCALL_TABLE(mknodat, mknodat, 259, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fchownat +TRACE_SYSCALL_TABLE(fchownat, fchownat, 260, 5) +#endif +#ifndef OVERRIDE_TABLE_64_futimesat +TRACE_SYSCALL_TABLE(futimesat, futimesat, 261, 3) +#endif +#ifndef OVERRIDE_TABLE_64_newfstatat +TRACE_SYSCALL_TABLE(newfstatat, newfstatat, 262, 4) +#endif +#ifndef OVERRIDE_TABLE_64_unlinkat +TRACE_SYSCALL_TABLE(unlinkat, unlinkat, 263, 3) +#endif +#ifndef OVERRIDE_TABLE_64_renameat +TRACE_SYSCALL_TABLE(renameat, renameat, 264, 4) +#endif +#ifndef OVERRIDE_TABLE_64_linkat +TRACE_SYSCALL_TABLE(linkat, linkat, 265, 5) +#endif +#ifndef OVERRIDE_TABLE_64_symlinkat +TRACE_SYSCALL_TABLE(symlinkat, symlinkat, 266, 3) +#endif +#ifndef OVERRIDE_TABLE_64_readlinkat +TRACE_SYSCALL_TABLE(readlinkat, readlinkat, 267, 4) +#endif +#ifndef OVERRIDE_TABLE_64_fchmodat +TRACE_SYSCALL_TABLE(fchmodat, fchmodat, 268, 3) +#endif +#ifndef OVERRIDE_TABLE_64_faccessat +TRACE_SYSCALL_TABLE(faccessat, faccessat, 269, 3) +#endif +#ifndef OVERRIDE_TABLE_64_pselect6 +TRACE_SYSCALL_TABLE(pselect6, pselect6, 270, 6) +#endif +#ifndef OVERRIDE_TABLE_64_ppoll +TRACE_SYSCALL_TABLE(ppoll, ppoll, 271, 5) +#endif +#ifndef OVERRIDE_TABLE_64_set_robust_list +TRACE_SYSCALL_TABLE(set_robust_list, set_robust_list, 273, 2) +#endif +#ifndef OVERRIDE_TABLE_64_get_robust_list +TRACE_SYSCALL_TABLE(get_robust_list, get_robust_list, 274, 3) +#endif +#ifndef OVERRIDE_TABLE_64_splice +TRACE_SYSCALL_TABLE(splice, splice, 275, 6) +#endif +#ifndef OVERRIDE_TABLE_64_vmsplice +TRACE_SYSCALL_TABLE(vmsplice, vmsplice, 278, 4) +#endif +#ifndef OVERRIDE_TABLE_64_move_pages +TRACE_SYSCALL_TABLE(move_pages, move_pages, 279, 6) +#endif +#ifndef OVERRIDE_TABLE_64_utimensat +TRACE_SYSCALL_TABLE(utimensat, utimensat, 280, 4) +#endif +#ifndef OVERRIDE_TABLE_64_epoll_pwait +TRACE_SYSCALL_TABLE(epoll_pwait, epoll_pwait, 281, 6) +#endif +#ifndef OVERRIDE_TABLE_64_signalfd +TRACE_SYSCALL_TABLE(signalfd, signalfd, 282, 3) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_settime +TRACE_SYSCALL_TABLE(timerfd_settime, timerfd_settime, 286, 4) +#endif +#ifndef OVERRIDE_TABLE_64_timerfd_gettime +TRACE_SYSCALL_TABLE(timerfd_gettime, timerfd_gettime, 287, 2) +#endif +#ifndef OVERRIDE_TABLE_64_accept4 +TRACE_SYSCALL_TABLE(accept4, accept4, 288, 4) +#endif +#ifndef OVERRIDE_TABLE_64_signalfd4 +TRACE_SYSCALL_TABLE(signalfd4, signalfd4, 289, 4) +#endif +#ifndef OVERRIDE_TABLE_64_pipe2 +TRACE_SYSCALL_TABLE(pipe2, pipe2, 293, 2) +#endif +#ifndef OVERRIDE_TABLE_64_preadv +TRACE_SYSCALL_TABLE(preadv, preadv, 295, 5) +#endif +#ifndef OVERRIDE_TABLE_64_pwritev +TRACE_SYSCALL_TABLE(pwritev, pwritev, 296, 5) +#endif +#ifndef OVERRIDE_TABLE_64_rt_tgsigqueueinfo +TRACE_SYSCALL_TABLE(rt_tgsigqueueinfo, rt_tgsigqueueinfo, 297, 4) +#endif +#ifndef OVERRIDE_TABLE_64_perf_event_open +TRACE_SYSCALL_TABLE(perf_event_open, perf_event_open, 298, 5) +#endif +#ifndef OVERRIDE_TABLE_64_recvmmsg +TRACE_SYSCALL_TABLE(recvmmsg, recvmmsg, 299, 5) +#endif +#ifndef OVERRIDE_TABLE_64_fanotify_mark +TRACE_SYSCALL_TABLE(fanotify_mark, fanotify_mark, 301, 5) +#endif +#ifndef OVERRIDE_TABLE_64_prlimit64 +TRACE_SYSCALL_TABLE(prlimit64, prlimit64, 302, 4) +#endif +#ifndef OVERRIDE_TABLE_64_name_to_handle_at +TRACE_SYSCALL_TABLE(name_to_handle_at, name_to_handle_at, 303, 5) +#endif +#ifndef OVERRIDE_TABLE_64_open_by_handle_at +TRACE_SYSCALL_TABLE(open_by_handle_at, open_by_handle_at, 304, 3) +#endif +#ifndef OVERRIDE_TABLE_64_clock_adjtime +TRACE_SYSCALL_TABLE(clock_adjtime, clock_adjtime, 305, 2) +#endif +#ifndef OVERRIDE_TABLE_64_sendmmsg +TRACE_SYSCALL_TABLE(sendmmsg, sendmmsg, 307, 4) +#endif +#ifndef OVERRIDE_TABLE_64_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 309, 3) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_readv +TRACE_SYSCALL_TABLE(process_vm_readv, process_vm_readv, 310, 6) +#endif +#ifndef OVERRIDE_TABLE_64_process_vm_writev +TRACE_SYSCALL_TABLE(process_vm_writev, process_vm_writev, 311, 6) +#endif +#ifndef OVERRIDE_TABLE_64_finit_module +TRACE_SYSCALL_TABLE(finit_module, finit_module, 313, 3) +#endif + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h new file mode 100644 index 000000000000..6bf5291c8e47 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h @@ -0,0 +1,174 @@ +#ifndef CREATE_SYSCALL_TABLE + +#define OVERRIDE_64_connect +SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * uservaddr, int addrlen), + TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), + TP_locvar( + __typeof__(uservaddr->sa_family) sa_family; + uint16_t dport; + uint32_t v4addr; + uint16_t v6addr[8]; + unsigned int v4addr_len, v6addr_len; + ), + TP_code_pre( + sc_in( + memset(tp_locvar, 0, sizeof(*tp_locvar)); + if (addrlen < sizeof(tp_locvar->sa_family)) + goto skip_code; + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, + &uservaddr->sa_family, sizeof(tp_locvar->sa_family)); + switch (tp_locvar->sa_family) { + case AF_INET: + if (addrlen < sizeof(struct sockaddr_in)) + goto skip_code; + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, + &((struct sockaddr_in __user *) uservaddr)->sin_port, + sizeof(tp_locvar->dport)); + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, + &((struct sockaddr_in __user *) uservaddr)->sin_addr.s_addr, + sizeof(tp_locvar->v4addr)); + tp_locvar->v4addr_len = 4; + break; + case AF_INET6: + if (addrlen < sizeof(struct sockaddr_in6)) + goto skip_code; + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, + &((struct sockaddr_in6 __user *) uservaddr)->sin6_port, + sizeof(tp_locvar->dport)); + if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, + &((struct sockaddr_in6 __user *) uservaddr)->sin6_addr.in6_u.u6_addr8, + sizeof(tp_locvar->v6addr))) + memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); + tp_locvar->v6addr_len = 8; + break; + } + skip_code: + ) + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer_hex(struct sockaddr *, uservaddr, uservaddr)) + sc_in(ctf_integer_hex(int, addrlen, addrlen)) + sc_in(ctf_integer(unsigned short, family, tp_locvar->sa_family)) + sc_in(ctf_integer_network(uint16_t, dport, tp_locvar->dport)) + sc_in(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) + sc_in(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) + ), + TP_code_post() +) + +#define LTTNG_SYSCALL_ACCEPT_locvar \ + __typeof__(upeer_sockaddr->sa_family) sa_family;\ + uint16_t sport; \ + uint32_t v4addr; \ + uint16_t v6addr[8]; \ + int v4addr_len, v6addr_len; \ + int uaddr_len; + +#define LTTNG_SYSCALL_ACCEPT_code_pre \ + sc_inout( \ + memset(tp_locvar, 0, sizeof(*tp_locvar)); \ + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \ + upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \ + ) \ + sc_out( \ + if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \ + goto skip_code; \ + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \ + &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \ + switch (tp_locvar->sa_family) { \ + case AF_INET: \ + if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \ + goto skip_code; \ + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ + &((struct sockaddr_in __user *) upeer_sockaddr)->sin_port, \ + sizeof(tp_locvar->sport)); \ + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, \ + &((struct sockaddr_in __user *) upeer_sockaddr)->sin_addr.s_addr, \ + sizeof(tp_locvar->v4addr)); \ + tp_locvar->v4addr_len = 4; \ + break; \ + case AF_INET6: \ + if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \ + goto skip_code; \ + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ + &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_port, \ + sizeof(tp_locvar->sport)); \ + if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, \ + &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \ + sizeof(tp_locvar->v6addr))) \ + memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \ + tp_locvar->v6addr_len = 8; \ + break; \ + } \ + skip_code: \ + ) + +#define OVERRIDE_64_accept +SC_LTTNG_TRACEPOINT_EVENT_CODE(accept, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), + TP_locvar( + LTTNG_SYSCALL_ACCEPT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_ACCEPT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) + sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len)) + sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family)) + sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport)) + sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) + sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) + ), + TP_code_post() +) + +#define OVERRIDE_64_accept4 +SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4, + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen, int flags), + TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), + TP_locvar( + LTTNG_SYSCALL_ACCEPT_locvar + ), + TP_code_pre( + LTTNG_SYSCALL_ACCEPT_code_pre + ), + TP_FIELDS( + sc_exit(ctf_integer(long, ret, ret)) + sc_in(ctf_integer(int, fd, fd)) + sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) + sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len)) + sc_in(ctf_integer_hex(int, flags, flags)) + sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family)) + sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport)) + sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) + sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) + ), + TP_code_post() +) + +#define OVERRIDE_64_pipe +SC_LTTNG_TRACEPOINT_EVENT(pipe, + TP_PROTO(sc_exit(long ret,) int * fildes), + TP_ARGS(sc_exit(ret,) fildes), + TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) + sc_out(ctf_user_array(int, fildes, fildes, 2)) + ) +) + +#else /* CREATE_SYSCALL_TABLE */ + +#define OVERRIDE_TABLE_64_clone +TRACE_SYSCALL_TABLE(clone, clone, 56, 5) +#define OVERRIDE_TABLE_64_execve +TRACE_SYSCALL_TABLE(execve, execve, 59, 3) +#define OVERRIDE_TABLE_64_getcpu +TRACE_SYSCALL_TABLE(getcpu, getcpu, 309, 3) + +#endif /* CREATE_SYSCALL_TABLE */ diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-get-syscall-inout.sh b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-get-syscall-inout.sh new file mode 100755 index 000000000000..5d1df8f25301 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-get-syscall-inout.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# example usage: +# lttng-get-syscall-inout.sh table-syscall-inout.txt select 1 + +FILENAME=$1 +SYSCALL_NAME=$2 +ARG_NR=$3 +TMPFILE=inout.tmp.1 +TMPFILE2=inout.tmp.2 + +if [ x"${FILENAME}" = x"" ]; then + echo "Error: Please specify input file name as first argument" + exit 1 +fi + +if [ x"${SYSCALL_NAME}" = x"" ]; then + echo "Error: Please specify system call name as second argument" + exit 1 +fi + +if [[ x"${ARG_NR}" = x"" || ${ARG_NR} == 0 ]]; then + echo "Error: Please specify argument number larger than 0 as 3rd argument" + exit 1 +fi + +grep "syscall ${SYSCALL_NAME} " ${FILENAME} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) .*/'\ +'$2/g' ${TMPFILE} > ${TMPFILE2} + +NR_MATCH=$(wc -l ${TMPFILE} | perl -p -e 's/^([^ ])*.*/$1/g') +if [ ${NR_MATCH} -gt 1 ]; then + echo "Error: more than one system call match" + exit 1 +fi + +if [ ${NR_MATCH} -eq 0 ]; then + # no match, default to inout + echo "sc_inout" + exit 0 +fi + +SC_ARGS=$(cat ${TMPFILE2}) + +if [ ${ARG_NR} -gt ${SC_ARGS} ]; then + echo "Error: argument number (${ARG_NR}) is larger than number of syscall arguments (${SC_ARGS})" + exit 1 +fi + +if [ ${ARG_NR} == 1 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \(([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +if [ ${ARG_NR} == 2 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +if [ ${ARG_NR} == 3 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +if [ ${ARG_NR} == 4 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +if [ ${ARG_NR} == 5 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +if [ ${ARG_NR} == 6 ]; then + perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +fi + +SC_ARG_TYPE=$(cat ${TMPFILE2}) + +if [ ${SC_ARG_TYPE} = "r" ]; then + echo "sc_in" +fi +if [ ${SC_ARG_TYPE} = "w" ]; then + echo "sc_out" +fi +if [ ${SC_ARG_TYPE} = "rw" ]; then + echo "sc_inout" +fi + +rm -f ${TMPFILE} ${TMPFILE2} diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/Kbuild b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/Kbuild new file mode 100644 index 000000000000..079aab333849 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/Kbuild @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +obj-m += lttng-syscalls-extractor.o + +# vim:syntax=make diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c new file mode 100644 index 000000000000..e88bb5d63e6f --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c @@ -0,0 +1,87 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-syscalls-extractor.c + * + * Dump syscall metadata to console. + * + * Copyright 2011 - Mathieu Desnoyers + * Copyright 2011 - Julien Desfossez + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef CONFIG_FTRACE_SYSCALLS +#error "You need to set CONFIG_FTRACE_SYSCALLS=y" +#endif + +#ifndef CONFIG_KALLSYMS_ALL +#error "You need to set CONFIG_KALLSYMS_ALL=y" +#endif + +static struct syscall_metadata **__start_syscalls_metadata; +static struct syscall_metadata **__stop_syscalls_metadata; + +static __init +struct syscall_metadata *find_syscall_meta(unsigned long syscall) +{ + struct syscall_metadata **iter; + + for (iter = __start_syscalls_metadata; + iter < __stop_syscalls_metadata; iter++) { + if ((*iter)->syscall_nr == syscall) + return (*iter); + } + return NULL; +} + +int init_module(void) +{ + struct syscall_metadata *meta; + int i; + + __start_syscalls_metadata = (void *) kallsyms_lookup_name("__start_syscalls_metadata"); + __stop_syscalls_metadata = (void *) kallsyms_lookup_name("__stop_syscalls_metadata"); + + for (i = 0; i < NR_syscalls; i++) { + int j; + + meta = find_syscall_meta(i); + if (!meta) + continue; + printk("syscall %s nr %d nbargs %d ", + meta->name, meta->syscall_nr, meta->nb_args); + printk("types: ("); + for (j = 0; j < meta->nb_args; j++) { + if (j > 0) + printk(", "); + printk("%s", meta->types[j]); + } + printk(") "); + printk("args: ("); + for (j = 0; j < meta->nb_args; j++) { + if (j > 0) + printk(", "); + printk("%s", meta->args[j]); + } + printk(")\n"); + } + printk("SUCCESS\n"); + + return -1; +} + +void cleanup_module(void) +{ +} + +MODULE_LICENSE("GPL"); diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-generate-headers.sh b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-generate-headers.sh new file mode 100755 index 000000000000..4b601b492bb3 --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/lttng-syscalls-generate-headers.sh @@ -0,0 +1,384 @@ +#!/bin/sh + +# Generate system call probe description macros from syscall metadata dump file. +# The resulting header will be written in the headers subdirectory, in a file name +# based on the name of the input file. +# +# example usage: +# +# lttng-syscalls-generate-headers.sh +# lttng-syscalls-generate-headers.sh integers 3.0.4 x86-64-syscalls-3.0.4 64 +# lttng-syscalls-generate-headers.sh pointers 3.0.4 x86-64-syscalls-3.0.4 64 + +CLASS=$1 +INPUTDIR=$2 +INPUTFILE=$3 +BITNESS=$4 +INPUT=${INPUTDIR}/${INPUTFILE} +SRCFILE=gen.tmp.0 +TMPFILE=gen.tmp.1 +TMPFILE2=gen.tmp.2 +TMPFILE3=gen.tmp.3 +HEADER=headers/${INPUTFILE}_${CLASS}.h + +if [ x"$INPUTDIR" = x"" ]; then + echo "Error: Please specify input directory as second argument" + exit 1 +fi + +if [ x"$INPUTFILE" = x"" ]; then + echo "Error: Please specify input file as third argument" + exit 1 +fi + +if [ x"$BITNESS" != x"32" ] && [ x"$BITNESS" != x"64" ]; then + echo "Error: Please specify bitness as fourth argument (\"32\" or \"64\")" + exit 1 +fi + +cp ${INPUT} ${SRCFILE} + +#Cleanup +perl -p -e 's/^\[.*\] //g' ${SRCFILE} > ${TMPFILE} +mv ${TMPFILE} ${SRCFILE} + +perl -p -e 's/^syscall sys_([^ ]*)/syscall $1/g' ${SRCFILE} > ${TMPFILE} +mv ${TMPFILE} ${SRCFILE} + +#Filter + +if [ "$CLASS" = integers ]; then + #select integers and no-args. + CLASSCAP=INTEGERS + grep -v "\\*\|cap_user_header_t" ${SRCFILE} > ${TMPFILE} + mv ${TMPFILE} ${SRCFILE} +fi + + +if [ "$CLASS" = pointers ]; then + #select system calls using pointers. + CLASSCAP=POINTERS + grep "\\*\|cap_#user_header_t" ${SRCFILE} > ${TMPFILE} + mv ${TMPFILE} ${SRCFILE} +fi + +if [ x"$CLASSCAP" = x"" ]; then + echo "Error: Please specify \"integers\" or \"pointers\" as first argument" + rm -f ${SRCFILE} + exit 1 +fi + +echo "/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */" > ${HEADER} + +echo \ +"#ifndef CREATE_SYSCALL_TABLE + +#if !defined(_TRACE_SYSCALLS_${CLASSCAP}_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYSCALLS_${CLASSCAP}_H + +#include +#include +#include \"${INPUTFILE}_${CLASS}_override.h\" +#include \"syscalls_${CLASS}_override.h\" +" >> ${HEADER} + +if [ "$CLASS" = integers ]; then + +NRARGS=0 + +printf \ +'#ifdef SC_ENTER\n'\ + >> ${HEADER} + +printf \ +'SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscalls_noargs,\n'\ +' TP_FIELDS()\n'\ +')\n'\ + >> ${HEADER} + +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^)]*)\) '\ +'args: \(([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscalls_noargs, $1)\n'\ +'#endif/g'\ + ${TMPFILE} >> ${HEADER} + +printf \ +'#else /* #ifdef SC_ENTER */\n'\ + >> ${HEADER} + +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^)]*)\) '\ +'args: \(([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret)),\n'\ +' TP_ARGS(sc_exit(ret)),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE} >> ${HEADER} + +printf \ +'#endif /* else #ifdef SC_ENTER */\n'\ + >> ${HEADER} + +fi + + +# types: 4 +# args 5 + +NRARGS=1 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + echo Syscall: ${SC_NAME} ${ARG1} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^)]*)\) '\ +'args: \(([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $5),\n'\ +' TP_ARGS(sc_exit(ret,) $5),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $5, $5)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + +# types: 4 5 +# args 6 7 + +NRARGS=2 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + ARG2=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 2) + echo Syscall: ${SC_NAME} ${ARG1} ${ARG2} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^,]*), ([^)]*)\) '\ +'args: \(([^,]*), ([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $6, $5 $7),\n'\ +' TP_ARGS(sc_exit(ret,) $6, $7),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $6, $6)) '"${ARG2}"'(ctf_integer($5, $7, $7)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + +# types: 4 5 6 +# args 7 8 9 + +NRARGS=3 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + ARG2=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 2) + ARG3=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 3) + echo Syscall: ${SC_NAME} ${ARG1} ${ARG2} ${ARG3} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^,]*), ([^,]*), ([^)]*)\) '\ +'args: \(([^,]*), ([^,]*), ([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $7, $5 $8, $6 $9),\n'\ +' TP_ARGS(sc_exit(ret,) $7, $8, $9),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $7, $7)) '"${ARG2}"'(ctf_integer($5, $8, $8)) '"${ARG3}"'(ctf_integer($6, $9, $9)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + + +# types: 4 5 6 7 +# args 8 9 10 11 + +NRARGS=4 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + ARG2=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 2) + ARG3=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 3) + ARG4=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 4) + echo Syscall: ${SC_NAME} ${ARG1} ${ARG2} ${ARG3} ${ARG4} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^,]*), ([^,]*), ([^,]*), ([^)]*)\) '\ +'args: \(([^,]*), ([^,]*), ([^,]*), ([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $8, $5 $9, $6 $10, $7 $11),\n'\ +' TP_ARGS(sc_exit(ret,) $8, $9, $10, $11),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $8, $8)) '"${ARG2}"'(ctf_integer($5, $9, $9)) '"${ARG3}"'(ctf_integer($6, $10, $10)) '"${ARG4}"'(ctf_integer($7, $11, $11)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + +# types: 4 5 6 7 8 +# args 9 10 11 12 13 + +NRARGS=5 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + ARG2=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 2) + ARG3=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 3) + ARG4=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 4) + ARG5=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 5) + echo Syscall: ${SC_NAME} ${ARG1} ${ARG2} ${ARG3} ${ARG4} ${ARG5} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^)]*)\) '\ +'args: \(([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $9, $5 $10, $6 $11, $7 $12, $8 $13),\n'\ +' TP_ARGS(sc_exit(ret,) $9, $10, $11, $12, $13),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $9, $9)) '"${ARG2}"'(ctf_integer($5, $10, $10)) '"${ARG3}"'(ctf_integer($6, $11, $11)) '"${ARG4}"'(ctf_integer($7, $12, $12)) '"${ARG5}"'(ctf_integer($8, $13, $13)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + + +# types: 4 5 6 7 8 9 +# args 10 11 12 13 14 15 + +NRARGS=6 +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} + +while read LINE; do + echo "${LINE}" > ${TMPFILE2} + perl -p -e 's/^syscall ([^ ]*) .*/$1/g' ${TMPFILE2} > ${TMPFILE3} + SC_NAME=$(cat ${TMPFILE3}) + ARG1=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 1) + ARG2=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 2) + ARG3=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 3) + ARG4=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 4) + ARG5=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 5) + ARG6=$(./lttng-get-syscall-inout.sh table-syscall-inout.txt ${SC_NAME} 6) + echo Syscall: ${SC_NAME} ${ARG1} ${ARG2} ${ARG3} ${ARG4} ${ARG5} ${ARG6} + perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) '\ +'types: \(([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^\)]*)\) '\ +'args: \(([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^,]*), ([^\)]*)\)/'\ +'#ifndef OVERRIDE_'"${BITNESS}"'_$1\n'\ +'SC_LTTNG_TRACEPOINT_EVENT($1,\n'\ +' TP_PROTO(sc_exit(long ret,) $4 $10, $5 $11, $6 $12, $7 $13, $8 $14, $9 $15),\n'\ +' TP_ARGS(sc_exit(ret,) $10, $11, $12, $13, $14, $15),\n'\ +' TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) '"${ARG1}"'(ctf_integer($4, $10, $10)) '"${ARG2}"'(ctf_integer($5, $11, $11)) '"${ARG3}"'(ctf_integer($6, $12, $12)) '"${ARG4}"'(ctf_integer($7, $13, $13)) '"${ARG5}"'(ctf_integer($8, $14, $14)) '"${ARG6}"'(ctf_integer($9, $15, $15)))\n'\ +')\n'\ +'#endif/g'\ + ${TMPFILE2} >> ${HEADER} +done < ${TMPFILE} + +# Macro for tracing syscall table + +echo \ +" +#endif /* _TRACE_SYSCALLS_${CLASSCAP}_H */ + +/* This part must be outside protection */ +#include + +#else /* CREATE_SYSCALL_TABLE */ + +#include \"${INPUTFILE}_${CLASS}_override.h\" +#include \"syscalls_${CLASS}_override.h\" +" >> ${HEADER} + +NRARGS=0 + +if [ "$CLASS" = integers ]; then +#noargs + +printf \ +'#ifdef SC_ENTER\n'\ + >> ${HEADER} + +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) .*$/'\ +'#ifndef OVERRIDE_TABLE_'"${BITNESS}"'_$1\n'\ +'TRACE_SYSCALL_TABLE\(syscalls_noargs, $1, $2, $3\)\n'\ +'#endif/g'\ + ${TMPFILE} >> ${HEADER} + +printf \ +'#else /* #ifdef SC_ENTER */\n'\ + >> ${HEADER} + +grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) .*$/'\ +'#ifndef OVERRIDE_TABLE_'"${BITNESS}"'_$1\n'\ +'TRACE_SYSCALL_TABLE($1, $1, $2, $3)\n'\ +'#endif/g'\ + ${TMPFILE} >> ${HEADER} + +printf \ +'#endif /* else #ifdef SC_ENTER */\n'\ + >> ${HEADER} + +fi + +#others. +grep -v "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} +perl -p -e 's/^syscall ([^ ]*) nr ([^ ]*) nbargs ([^ ]*) .*$/'\ +'#ifndef OVERRIDE_TABLE_'"${BITNESS}"'_$1\n'\ +'TRACE_SYSCALL_TABLE($1, $1, $2, $3)\n'\ +'#endif/g'\ + ${TMPFILE} >> ${HEADER} + +echo -n \ +" +#endif /* CREATE_SYSCALL_TABLE */ +" >> ${HEADER} + +#fields names: ...char * type with *name* or *file* or *path* or *root* +# or *put_old* or *type* +cp -f ${HEADER} ${TMPFILE} +rm -f ${HEADER} +perl -p -e 's/ctf_integer\(([^,)]*char \*), ([^\)]*)(name|file|path|root|put_old|type)([^\)]*)\)/ctf_user_string($2$3$4)/g'\ + ${TMPFILE} >> ${HEADER} + +#prettify addresses heuristics. +#field names with addr or ptr +cp -f ${HEADER} ${TMPFILE} +rm -f ${HEADER} +perl -p -e 's/ctf_integer\(([^,)]*), ([^,)]*addr|[^,)]*ptr)([^),]*)\)/ctf_integer_hex($1, $2$3, $2$3)/g'\ + ${TMPFILE} >> ${HEADER} + +#field types ending with '*' +cp -f ${HEADER} ${TMPFILE} +rm -f ${HEADER} +perl -p -e 's/ctf_integer\(([^,)]*\*), ([^),]*)\)/ctf_integer_hex($1, $2, $2)/g'\ + ${TMPFILE} >> ${HEADER} + +rm -f ${INPUTFILE}.tmp +rm -f ${TMPFILE3} +rm -f ${TMPFILE2} +rm -f ${TMPFILE} +rm -f ${SRCFILE} diff --git a/ltt/lttng-2.11.0/instrumentation/syscalls/table-syscall-inout.txt b/ltt/lttng-2.11.0/instrumentation/syscalls/table-syscall-inout.txt new file mode 100644 index 000000000000..cb835a5282fe --- /dev/null +++ b/ltt/lttng-2.11.0/instrumentation/syscalls/table-syscall-inout.txt @@ -0,0 +1,289 @@ +syscall read nbargs 3 rw: (r, w, r) +syscall write nbargs 3 rw: (r, r, r) +syscall open nbargs 3 rw: (r, r, r) +syscall close nbargs 1 rw: (r) +syscall newstat nbargs 2 rw: (r, w) +syscall newfstat nbargs 2 rw: (r, w) +syscall newlstat nbargs 2 rw: (r, w) +syscall poll nbargs 3 rw: (rw, r, r) +syscall lseek nbargs 3 rw: (r, r, r) +syscall mmap nbargs 6 rw: (r, r, r, r, r, r) +syscall mprotect nbargs 3 rw: (r, r, r) +syscall munmap nbargs 2 rw: (r, r) +syscall brk nbargs 1 rw: (r) +syscall rt_sigaction nbargs 4 rw: (r, r, w, r) +syscall rt_sigprocmask nbargs 4 rw: (r, r, w, r) +syscall ioctl nbargs 3 rw: (r, r, rw) +syscall pread64 nbargs 4 rw: (r, w, r, r) +syscall pwrite64 nbargs 4 rw: (r, r, r, r) +syscall readv nbargs 3 rw: (r, rw, r) +syscall writev nbargs 3 rw: (r, rw, r) +syscall access nbargs 2 rw: (r, r) +syscall pipe nbargs 1 rw: (w) +syscall select nbargs 5 rw: (r, rw, rw, rw, rw) +syscall sched_yield nbargs 0 +syscall mremap nbargs 5 rw: (r, r, r, r, r) +syscall msync nbargs 3 rw: (r, r, r) +syscall mincore nbargs 3 rw: (r, r, w) +syscall madvise nbargs 3 rw: (r, r, r) +syscall shmget nbargs 3 rw: (r, r, r) +syscall shmat nbargs 3 rw: (r, r, r) +syscall shmctl nbargs 3 rw: (r, r, rw) +syscall dup nbargs 1 rw: (r) +syscall dup2 nbargs 2 rw: (r, r) +syscall pause nbargs 0 +syscall nanosleep nbargs 2 rw: (r, w) +syscall getitimer nbargs 2 rw: (r, w) +syscall alarm nbargs 1 rw: (r) +syscall setitimer nbargs 3 rw: (r, r, w) +syscall getpid nbargs 0 +syscall sendfile64 nbargs 4 rw: (r, r, rw, r) +syscall socket nbargs 3 rw: (r, r, r) +syscall connect nbargs 3 rw: (r, r, r) +syscall accept nbargs 3 rw: (r, w, rw) +syscall sendto nbargs 6 rw: (r, r, r, r, r, r) +syscall recvfrom nbargs 6 rw: (r, w, r, r, w, rw) +syscall sendmsg nbargs 3 rw: (r, r, r) +syscall recvmsg nbargs 3 rw: (r, rw, r) +syscall shutdown nbargs 2 rw: (r, r) +syscall bind nbargs 3 rw: (r, r, r) +syscall listen nbargs 2 rw: (r, r) +syscall getsockname nbargs 3 rw: (r, w, rw) +syscall getpeername nbargs 3 rw: (r, w, rw) +syscall socketpair nbargs 4 rw: (r, r, r, w) +syscall setsockopt nbargs 5 rw: (r, r, r, r, r) +syscall getsockopt nbargs 5 rw: (r, r, r, w, rw) +syscall exit nbargs 1 rw: (r) +syscall wait4 nbargs 4 rw: (r, w, r, w) +syscall kill nbargs 2 rw: (r, r) +syscall newuname nbargs 1 rw: (w) +syscall semget nbargs 3 rw: (r, r, r) +syscall semop nbargs 3 rw: (r, r, r) +syscall semctl nbargs 4 rw: (r, r, r, rw) +syscall shmdt nbargs 1 rw: (r) +syscall msgget nbargs 2 rw: (r, r) +syscall msgsnd nbargs 4 rw: (r, r, r, r) +syscall msgrcv nbargs 5 rw: (r, w, r, r, r) +syscall msgctl nbargs 3 rw: (r, r, rw) +syscall fcntl nbargs 3 rw: (r, r, rw) +syscall flock nbargs 2 rw: (r, r) +syscall fsync nbargs 1 rw: (r) +syscall fdatasync nbargs 1 rw: (r) +syscall truncate nbargs 2 rw: (r, r) +syscall ftruncate nbargs 2 rw: (r, r) +syscall getdents nbargs 3 rw: (r, w, r) +syscall getcwd nbargs 2 rw: (w, r) +syscall chdir nbargs 1 rw: (r) +syscall fchdir nbargs 1 rw: (r) +syscall rename nbargs 2 rw: (r, r) +syscall mkdir nbargs 2 rw: (r, r) +syscall rmdir nbargs 1 rw: (r) +syscall creat nbargs 2 rw: (r, r) +syscall link nbargs 2 rw: (r, r) +syscall unlink nbargs 1 rw: (r) +syscall symlink nbargs 2 rw: (r, r) +syscall readlink nbargs 3 rw: (r, w, r) +syscall chmod nbargs 2 rw: (r, r) +syscall fchmod nbargs 2 rw: (r, r) +syscall chown nbargs 3 rw: (r, r, r) +syscall fchown nbargs 3 rw: (r, r, r) +syscall lchown nbargs 3 rw: (r, r, r) +syscall umask nbargs 1 rw: (r) +syscall gettimeofday nbargs 2 rw: (w, w) +syscall getrlimit nbargs 2 rw: (r, w) +syscall getrusage nbargs 2 rw: (r, w) +syscall sysinfo nbargs 1 rw: (w) +syscall times nbargs 1 rw: (w) +syscall ptrace nbargs 4 rw: (r, r, rw, rw) +syscall getuid nbargs 0 +syscall syslog nbargs 3 rw: (r, w, r) +syscall getgid nbargs 0 +syscall setuid nbargs 1 rw: (r) +syscall setgid nbargs 1 rw: (r) +syscall geteuid nbargs 0 +syscall getegid nbargs 0 +syscall setpgid nbargs 2 rw: (r, r) +syscall getppid nbargs 0 +syscall getpgrp nbargs 0 +syscall setsid nbargs 0 +syscall setreuid nbargs 2 rw: (r, r) +syscall setregid nbargs 2 rw: (r, r) +syscall getgroups nbargs 2 rw: (r, w) +syscall setgroups nbargs 2 rw: (r, r) +syscall setresuid nbargs 3 rw: (r, r, r) +syscall getresuid nbargs 3 rw: (w, w, w) +syscall setresgid nbargs 3 rw: (r, r, r) +syscall getresgid nbargs 3 rw: (w, w, w) +syscall getpgid nbargs 1 rw: (r) +syscall setfsuid nbargs 1 rw: (r) +syscall setfsgid nbargs 1 rw: (r) +syscall getsid nbargs 1 rw: (r) +syscall capget nbargs 2 rw: (r, w) +syscall capset nbargs 2 rw: (r, r) +syscall rt_sigpending nbargs 2 rw: (w, r) +syscall rt_sigtimedwait nbargs 4 rw: (w, w, r, r) +syscall rt_sigqueueinfo nbargs 3 rw: (r, r, r) +syscall rt_sigsuspend nbargs 2 rw: (r, r) +syscall sigaltstack nbargs 2 rw: (r, rw) +syscall utime nbargs 2 rw: (r, r) +syscall mknod nbargs 3 rw: (r, r, r) +syscall personality nbargs 1 rw: (r) +syscall ustat nbargs 2 rw: (r, w) +syscall statfs nbargs 2 rw: (r, w) +syscall fstatfs nbargs 2 rw: (r, w) +syscall sysfs nbargs 3 rw: (r, r, r) +syscall getpriority nbargs 2 rw: (r, r) +syscall setpriority nbargs 3 rw: (r, r, r) +syscall sched_setparam nbargs 2 rw: (r, r) +syscall sched_getparam nbargs 2 rw: (r, w) +syscall sched_setscheduler nbargs 3 rw: (r, r, r) +syscall sched_getscheduler nbargs 1 rw: (r) +syscall sched_get_priority_max nbargs 1 rw: (r) +syscall sched_get_priority_min nbargs 1 rw: (r) +syscall sched_rr_get_interval nbargs 2 rw: (r, w) +syscall mlock nbargs 2 rw: (r, r) +syscall munlock nbargs 2 rw: (r, r) +syscall mlockall nbargs 1 rw: (r) +syscall munlockall nbargs 0 +syscall vhangup nbargs 0 +syscall pivot_root nbargs 2 rw: (r, r) +syscall sysctl nbargs 1 rw: (rw) +syscall prctl nbargs 5 rw: (r, rw, r, r, r) +syscall adjtimex nbargs 1 rw: (rw) +syscall setrlimit nbargs 2 rw: (r, r) +syscall chroot nbargs 1 rw: (r) +syscall sync nbargs 0 +syscall acct nbargs 1 rw: (r) +syscall settimeofday nbargs 2 rw: (r, r) +syscall mount nbargs 5 rw: (r, r, r, r, r) +syscall umount nbargs 2 rw: (r, r) +syscall swapon nbargs 2 rw: (r, r) +syscall swapoff nbargs 1 rw: (r) +syscall reboot nbargs 4 rw: (r, r, r, r) +syscall sethostname nbargs 2 rw: (r, r) +syscall setdomainname nbargs 2 rw: (r, r) +syscall init_module nbargs 3 rw: (r, r, r) +syscall delete_module nbargs 2 rw: (r, r) +syscall quotactl nbargs 4 rw: (r, r, r, rw) +syscall gettid nbargs 0 +syscall readahead nbargs 3 rw: (r, r, r) +syscall setxattr nbargs 5 rw: (r, r, r, r, r) +syscall lsetxattr nbargs 5 rw: (r, r, r, r, r) +syscall fsetxattr nbargs 5 rw: (r, r, r, r, r) +syscall getxattr nbargs 4 rw: (r, r, w, r) +syscall lgetxattr nbargs 4 rw: (r, r, w, r) +syscall fgetxattr nbargs 4 rw: (r, r, w, r) +syscall listxattr nbargs 3 rw: (r, w, r) +syscall llistxattr nbargs 3 rw: (r, w, r) +syscall flistxattr nbargs 3 rw: (r, w, r) +syscall removexattr nbargs 2 rw: (r, r) +syscall lremovexattr nbargs 2 rw: (r, r) +syscall fremovexattr nbargs 2 rw: (r, r) +syscall tkill nbargs 2 rw: (r, r) +syscall time nbargs 1 rw: (w) +syscall futex nbargs 6 rw: (rw, r, r, r, rw, r) +syscall sched_setaffinity nbargs 3 rw: (r, r, r) +syscall sched_getaffinity nbargs 3 rw: (r, r, w) +syscall io_setup nbargs 2 rw: (r, r) +syscall io_destroy nbargs 1 rw: (r) +syscall io_getevents nbargs 5 rw: (r, r, r, w, rw) +syscall io_submit nbargs 3 rw: (r, r, r) +syscall io_cancel nbargs 3 rw: (r, r, w) +syscall lookup_dcookie nbargs 3 rw: (r, w, r) +syscall epoll_create nbargs 1 rw: (r) +syscall remap_file_pages nbargs 5 rw: (r, r, r, r, r) +syscall getdents64 nbargs 3 rw: (r, w, r) +syscall set_tid_address nbargs 1 rw: (r) +syscall restart_syscall nbargs 0 +syscall semtimedop nbargs 4 rw: (r, r, r, rw) +syscall fadvise64 nbargs 4 rw: (r, r, r, r) +syscall timer_create nbargs 3 rw: (r, r, w) +syscall timer_settime nbargs 4 rw: (r, r, r, w) +syscall timer_gettime nbargs 2 rw: (r, w) +syscall timer_getoverrun nbargs 1 rw: (r) +syscall timer_delete nbargs 1 rw: (r) +syscall clock_settime nbargs 2 rw: (r, r) +syscall clock_gettime nbargs 2 rw: (r, w) +syscall clock_getres nbargs 2 rw: (r, w) +syscall clock_nanosleep nbargs 4 rw: (r, r, r, w) +syscall exit_group nbargs 1 rw: (r) +syscall epoll_wait nbargs 4 rw: (r, w, r, r) +syscall epoll_ctl nbargs 4 rw: (r, r, r, r) +syscall tgkill nbargs 3 rw: (r, r, r) +syscall utimes nbargs 2 rw: (r, r) +syscall mbind nbargs 6 rw: (r, r, r, r, r, r) +syscall set_mempolicy nbargs 3 rw: (r, r, r) +syscall get_mempolicy nbargs 5 rw: (w, w, r, r, r) +syscall mq_open nbargs 4 rw: (r, r, r, r) +syscall mq_unlink nbargs 1 rw: (r) +syscall mq_timedsend nbargs 5 rw: (r, r, r, r, r) +syscall mq_timedreceive nbargs 5 rw: (r, w, r, w, r) +syscall mq_notify nbargs 2 rw: (r, r) +syscall mq_getsetattr nbargs 3 rw: (r, r, w) +syscall kexec_load nbargs 4 rw: (r, r, r, r) +syscall waitid nbargs 5 rw: (r, r, w, r, w) +syscall add_key nbargs 5 rw: (r, r, r, r, r) +syscall request_key nbargs 4 rw: (r, r, r, r) +syscall keyctl nbargs 5 rw: (r, rw, rw, rw, rw) +syscall ioprio_set nbargs 3 rw: (r, r, r) +syscall ioprio_get nbargs 2 rw: (r, r) +syscall inotify_init nbargs 0 +syscall inotify_add_watch nbargs 3 rw: (r, r, r) +syscall inotify_rm_watch nbargs 2 rw: (r, r) +syscall migrate_pages nbargs 4 rw: (r, r, r, r) +syscall openat nbargs 4 rw: (r, r, r, r) +syscall mkdirat nbargs 3 rw: (r, r, r) +syscall mknodat nbargs 4 rw: (r, r, r, r) +syscall fchownat nbargs 5 rw: (r, r, r, r, r) +syscall futimesat nbargs 3 rw: (r, r, r) +syscall newfstatat nbargs 4 rw: (r, r, w, r) +syscall unlinkat nbargs 3 rw: (r, r, r) +syscall renameat nbargs 4 rw: (r, r, r, r) +syscall linkat nbargs 5 rw: (r, r, r, r, r) +syscall symlinkat nbargs 3 rw: (r, r, r) +syscall readlinkat nbargs 4 rw: (r, r, w, r) +syscall fchmodat nbargs 3 rw: (r, r, r) +syscall faccessat nbargs 3 rw: (r, r, r) +syscall pselect6 nbargs 6 rw: (r, rw, rw, rw, rw, r) +syscall ppoll nbargs 5 rw: (rw, r, r, r, r) +syscall unshare nbargs 1 rw: (r) +syscall set_robust_list nbargs 2 rw: (r, r) +syscall get_robust_list nbargs 3 rw: (r, w, w) +syscall splice nbargs 6 rw: (r, r, r, r, r, r) +syscall tee nbargs 4 rw: (r, r, r, r) +syscall sync_file_range nbargs 4 rw: (r, r, r, r) +syscall vmsplice nbargs 4 rw: (r, r, r, r) +syscall move_pages nbargs 6 rw: (r, r, r, r, w, r) +syscall utimensat nbargs 4 rw: (r, r, r, r) +syscall epoll_pwait nbargs 6 rw: (r, w, r, r, r, r) +syscall signalfd nbargs 3 rw: (r, r, r) +syscall timerfd_create nbargs 2 rw: (r, r) +syscall eventfd nbargs 1 rw: (r) +syscall fallocate nbargs 4 rw: (r, r, r, r) +syscall timerfd_settime nbargs 4 rw: (r, r, r, w) +syscall timerfd_gettime nbargs 2 rw: (r, w) +syscall accept4 nbargs 4 rw: (r, w, rw, r) +syscall signalfd4 nbargs 4 rw: (r, r, r, r) +syscall eventfd2 nbargs 2 rw: (r, r) +syscall epoll_create1 nbargs 1 rw: (r) +syscall dup3 nbargs 3 rw: (r, r, r) +syscall pipe2 nbargs 2 rw: (w, r) +syscall inotify_init1 nbargs 1 rw: (r) +syscall preadv nbargs 5 rw: (r, w, r, r, r) +syscall pwritev nbargs 5 rw: (r, r, r, r, r) +syscall rt_tgsigqueueinfo nbargs 4 rw: (r, r, r, r) +syscall perf_event_open nbargs 5 rw: (r, r, r, r, r) +syscall recvmmsg nbargs 5 rw: (r, w, r, r, rw) +syscall fanotify_init nbargs 2 rw: (r, r) +syscall fanotify_mark nbargs 5 rw: (r, r, r, r, r) +syscall prlimit64 nbargs 4 rw: (r, r, r, w) +syscall name_to_handle_at nbargs 5 rw: (r, r, rw, w, r) +syscall open_by_handle_at nbargs 3 rw: (r, r, r) +syscall clock_adjtime nbargs 2 rw: (r, rw) +syscall syncfs nbargs 1 rw: (r) +syscall sendmmsg nbargs 4 rw: (r, r, r, r) +syscall setns nbargs 2 rw: (r, r) +syscall getcpu nbargs 3 rw: (w, w, rw) +syscall process_vm_readv nbargs 6 rw: (r, w, r, r, r, r) +syscall process_vm_writev nbargs 6 rw: (r, r, r, r, r, r) +syscall finit_module nbargs 3 rw: (r, r, r) diff --git a/ltt/lttng-2.11.0/lib/Kbuild b/ltt/lttng-2.11.0/lib/Kbuild new file mode 100644 index 000000000000..13b51f9d9326 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/Kbuild @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/.. + +include $(TOP_LTTNG_MODULES_DIR)/Kbuild.common + +ccflags-y += -I$(TOP_LTTNG_MODULES_DIR) + +obj-$(CONFIG_LTTNG) += lttng-lib-ring-buffer.o + +lttng-lib-ring-buffer-objs := \ + ringbuffer/ring_buffer_backend.o \ + ringbuffer/ring_buffer_frontend.o \ + ringbuffer/ring_buffer_iterator.o \ + ringbuffer/ring_buffer_vfs.o \ + ringbuffer/ring_buffer_splice.o \ + ringbuffer/ring_buffer_mmap.o \ + prio_heap/lttng_prio_heap.o \ + ../wrapper/splice.o + +# vim:syntax=make diff --git a/ltt/lttng-2.11.0/lib/align.h b/ltt/lttng-2.11.0/lib/align.h new file mode 100644 index 000000000000..94acacf2f662 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/align.h @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lib/align.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_ALIGN_H +#define _LTTNG_ALIGN_H + +#ifdef __KERNEL__ + +#include +#include + +#define ALIGN_FLOOR(x, a) __ALIGN_FLOOR_MASK(x, (typeof(x)) (a) - 1) +#define __ALIGN_FLOOR_MASK(x, mask) ((x) & ~(mask)) +#define PTR_ALIGN_FLOOR(p, a) \ + ((typeof(p)) ALIGN_FLOOR((unsigned long) (p), a)) + +/* + * Align pointer on natural object alignment. + */ +#define object_align(obj) PTR_ALIGN(obj, __alignof__(*(obj))) +#define object_align_floor(obj) PTR_ALIGN_FLOOR(obj, __alignof__(*(obj))) + +/** + * offset_align - Calculate the offset needed to align an object on its natural + * alignment towards higher addresses. + * @align_drift: object offset from an "alignment"-aligned address. + * @alignment: natural object alignment. Must be non-zero, power of 2. + * + * Returns the offset that must be added to align towards higher + * addresses. + */ +#define offset_align(align_drift, alignment) \ + ({ \ + BUILD_RUNTIME_BUG_ON((alignment) == 0 \ + || ((alignment) & ((alignment) - 1))); \ + (((alignment) - (align_drift)) & ((alignment) - 1)); \ + }) + +/** + * offset_align_floor - Calculate the offset needed to align an object + * on its natural alignment towards lower addresses. + * @align_drift: object offset from an "alignment"-aligned address. + * @alignment: natural object alignment. Must be non-zero, power of 2. + * + * Returns the offset that must be substracted to align towards lower addresses. + */ +#define offset_align_floor(align_drift, alignment) \ + ({ \ + BUILD_RUNTIME_BUG_ON((alignment) == 0 \ + || ((alignment) & ((alignment) - 1))); \ + (((align_drift) - (alignment)) & ((alignment) - 1)); \ + }) + +#endif /* __KERNEL__ */ + +#endif diff --git a/ltt/lttng-2.11.0/lib/bitfield.h b/ltt/lttng-2.11.0/lib/bitfield.h new file mode 100644 index 000000000000..a9e268b41530 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/bitfield.h @@ -0,0 +1,539 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright 2010-2019 - Mathieu Desnoyers + */ + +#ifndef _BABELTRACE_BITFIELD_H +#define _BABELTRACE_BITFIELD_H + +#include +#include + +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif + +/* + * This header strictly follows the C99 standard, except for use of the + * compiler-specific __typeof__. + */ + +/* + * This bitfield header requires the compiler representation of signed + * integers to be two's complement. + */ +#if (-1 != ~0) +#error "bitfield.h requires the compiler representation of signed integers to be two's complement." +#endif + +/* + * _bt_is_signed_type() willingly generates comparison of unsigned + * expression < 0, which is always false. Silence compiler warnings. + * GCC versions lower than 4.6.0 do not accept diagnostic pragma inside + * functions. + */ +#if defined(__GNUC__) && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600 +# define _BT_DIAG_PUSH _Pragma("GCC diagnostic push") +# define _BT_DIAG_POP _Pragma("GCC diagnostic pop") + +# define _BT_DIAG_STRINGIFY_1(x) #x +# define _BT_DIAG_STRINGIFY(x) _BT_DIAG_STRINGIFY_1(x) + +# define _BT_DIAG_IGNORE(option) \ + _Pragma(_BT_DIAG_STRINGIFY(GCC diagnostic ignored option)) +# define _BT_DIAG_IGNORE_TYPE_LIMITS _BT_DIAG_IGNORE("-Wtype-limits") +#else +# define _BT_DIAG_PUSH +# define _BT_DIAG_POP +# define _BT_DIAG_IGNORE +# define _BT_DIAG_IGNORE_TYPE_LIMITS +#endif + +#define _bt_is_signed_type(type) ((type) -1 < (type) 0) + +/* + * Produce a build-time error if the condition `cond` is non-zero. + * Evaluates as a size_t expression. + */ +#define _BT_BUILD_ASSERT(cond) \ + sizeof(struct { int f:(2 * !!(cond) - 1); }) + +/* + * Cast value `v` to an unsigned integer of the same size as `v`. + */ +#define _bt_cast_value_to_unsigned(v) \ + (sizeof(v) == sizeof(uint8_t) ? (uint8_t) (v) : \ + sizeof(v) == sizeof(uint16_t) ? (uint16_t) (v) : \ + sizeof(v) == sizeof(uint32_t) ? (uint32_t) (v) : \ + sizeof(v) == sizeof(uint64_t) ? (uint64_t) (v) : \ + _BT_BUILD_ASSERT(sizeof(v) <= sizeof(uint64_t))) + +/* + * Cast value `v` to an unsigned integer type of the size of type `type` + * *without* sign-extension. + * + * The unsigned cast ensures that we're not shifting a negative value, + * which is undefined in C. However, this limits the maximum type size + * of `type` to 64-bit. Generate a compile-time error if the size of + * `type` is larger than 64-bit. + */ +#define _bt_cast_value_to_unsigned_type(type, v) \ + (sizeof(type) == sizeof(uint8_t) ? \ + (uint8_t) _bt_cast_value_to_unsigned(v) : \ + sizeof(type) == sizeof(uint16_t) ? \ + (uint16_t) _bt_cast_value_to_unsigned(v) : \ + sizeof(type) == sizeof(uint32_t) ? \ + (uint32_t) _bt_cast_value_to_unsigned(v) : \ + sizeof(type) == sizeof(uint64_t) ? \ + (uint64_t) _bt_cast_value_to_unsigned(v) : \ + _BT_BUILD_ASSERT(sizeof(v) <= sizeof(uint64_t))) + +/* + * _bt_fill_mask evaluates to a "type" integer with all bits set. + */ +#define _bt_fill_mask(type) ((type) ~(type) 0) + +/* + * Left shift a value `v` of `shift` bits. + * + * The type of `v` can be signed or unsigned integer. + * The value of `shift` must be less than the size of `v` (in bits), + * otherwise the behavior is undefined. + * Evaluates to the result of the shift operation. + * + * According to the C99 standard, left shift of a left hand-side signed + * type is undefined if it has a negative value or if the result cannot + * be represented in the result type. This bitfield header discards the + * bits that are left-shifted beyond the result type representation, + * which is the behavior of an unsigned type left shift operation. + * Therefore, always perform left shift on an unsigned type. + * + * This macro should not be used if `shift` can be greater or equal than + * the bitwidth of `v`. See `_bt_safe_lshift`. + */ +#define _bt_lshift(v, shift) \ + ((__typeof__(v)) (_bt_cast_value_to_unsigned(v) << (shift))) + +/* + * Generate a mask of type `type` with the `length` least significant bits + * cleared, and the most significant bits set. + */ +#define _bt_make_mask_complement(type, length) \ + _bt_lshift(_bt_fill_mask(type), length) + +/* + * Generate a mask of type `type` with the `length` least significant bits + * set, and the most significant bits cleared. + */ +#define _bt_make_mask(type, length) \ + ((type) ~_bt_make_mask_complement(type, length)) + +/* + * Right shift a value `v` of `shift` bits. + * + * The type of `v` can be signed or unsigned integer. + * The value of `shift` must be less than the size of `v` (in bits), + * otherwise the behavior is undefined. + * Evaluates to the result of the shift operation. + * + * According to the C99 standard, right shift of a left hand-side signed + * type which has a negative value is implementation defined. This + * bitfield header relies on the right shift implementation carrying the + * sign bit. If the compiler implementation has a different behavior, + * emulate carrying the sign bit. + * + * This macro should not be used if `shift` can be greater or equal than + * the bitwidth of `v`. See `_bt_safe_rshift`. + */ +#if ((-1 >> 1) == -1) +#define _bt_rshift(v, shift) ((v) >> (shift)) +#else +#define _bt_rshift(v, shift) \ + ((__typeof__(v)) ((_bt_cast_value_to_unsigned(v) >> (shift)) | \ + ((v) < 0 ? _bt_make_mask_complement(__typeof__(v), \ + sizeof(v) * CHAR_BIT - (shift)) : 0))) +#endif + +/* + * Right shift a signed or unsigned integer with `shift` value being an + * arbitrary number of bits. `v` is modified by this macro. The shift + * is transformed into a sequence of `_nr_partial_shifts` consecutive + * shift operations, each of a number of bits smaller than the bitwidth + * of `v`, ending with a shift of the number of left over bits. + */ +#define _bt_safe_rshift(v, shift) \ +do { \ + unsigned long _nr_partial_shifts = (shift) / (sizeof(v) * CHAR_BIT - 1); \ + unsigned long _leftover_bits = (shift) % (sizeof(v) * CHAR_BIT - 1); \ + \ + for (; _nr_partial_shifts; _nr_partial_shifts--) \ + (v) = _bt_rshift(v, sizeof(v) * CHAR_BIT - 1); \ + (v) = _bt_rshift(v, _leftover_bits); \ +} while (0) + +/* + * Left shift a signed or unsigned integer with `shift` value being an + * arbitrary number of bits. `v` is modified by this macro. The shift + * is transformed into a sequence of `_nr_partial_shifts` consecutive + * shift operations, each of a number of bits smaller than the bitwidth + * of `v`, ending with a shift of the number of left over bits. + */ +#define _bt_safe_lshift(v, shift) \ +do { \ + unsigned long _nr_partial_shifts = (shift) / (sizeof(v) * CHAR_BIT - 1); \ + unsigned long _leftover_bits = (shift) % (sizeof(v) * CHAR_BIT - 1); \ + \ + for (; _nr_partial_shifts; _nr_partial_shifts--) \ + (v) = _bt_lshift(v, sizeof(v) * CHAR_BIT - 1); \ + (v) = _bt_lshift(v, _leftover_bits); \ +} while (0) + +/* + * bt_bitfield_write - write integer to a bitfield in native endianness + * + * Save integer to the bitfield, which starts at the "start" bit, has "len" + * bits. + * The inside of a bitfield is from high bits to low bits. + * Uses native endianness. + * For unsigned "v", pad MSB with 0 if bitfield is larger than v. + * For signed "v", sign-extend v if bitfield is larger than v. + * + * On little endian, bytes are placed from the less significant to the most + * significant. Also, consecutive bitfields are placed from lower bits to higher + * bits. + * + * On big endian, bytes are places from most significant to less significant. + * Also, consecutive bitfields are placed from higher to lower bits. + */ + +#define _bt_bitfield_write_le(ptr, type, start, length, v) \ +do { \ + __typeof__(v) _v = (v); \ + type *_ptr = (void *) (ptr); \ + unsigned long _start = (start), _length = (length); \ + type _mask, _cmask; \ + unsigned long _ts = sizeof(type) * CHAR_BIT; /* type size */ \ + unsigned long _start_unit, _end_unit, _this_unit; \ + unsigned long _end, _cshift; /* _cshift is "complement shift" */ \ + \ + if (!_length) \ + break; \ + \ + _end = _start + _length; \ + _start_unit = _start / _ts; \ + _end_unit = (_end + (_ts - 1)) / _ts; \ + \ + /* Trim v high bits */ \ + if (_length < sizeof(_v) * CHAR_BIT) \ + _v &= _bt_make_mask(__typeof__(_v), _length); \ + \ + /* We can now append v with a simple "or", shift it piece-wise */ \ + _this_unit = _start_unit; \ + if (_start_unit == _end_unit - 1) { \ + _mask = _bt_make_mask(type, _start % _ts); \ + if (_end % _ts) \ + _mask |= _bt_make_mask_complement(type, _end % _ts); \ + _cmask = _bt_lshift((type) (_v), _start % _ts); \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + break; \ + } \ + if (_start % _ts) { \ + _cshift = _start % _ts; \ + _mask = _bt_make_mask(type, _cshift); \ + _cmask = _bt_lshift((type) (_v), _cshift); \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + _bt_safe_rshift(_v, _ts - _cshift); \ + _start += _ts - _cshift; \ + _this_unit++; \ + } \ + for (; _this_unit < _end_unit - 1; _this_unit++) { \ + _ptr[_this_unit] = (type) _v; \ + _bt_safe_rshift(_v, _ts); \ + _start += _ts; \ + } \ + if (_end % _ts) { \ + _mask = _bt_make_mask_complement(type, _end % _ts); \ + _cmask = (type) _v; \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + } else \ + _ptr[_this_unit] = (type) _v; \ +} while (0) + +#define _bt_bitfield_write_be(ptr, type, start, length, v) \ +do { \ + __typeof__(v) _v = (v); \ + type *_ptr = (void *) (ptr); \ + unsigned long _start = (start), _length = (length); \ + type _mask, _cmask; \ + unsigned long _ts = sizeof(type) * CHAR_BIT; /* type size */ \ + unsigned long _start_unit, _end_unit, _this_unit; \ + unsigned long _end, _cshift; /* _cshift is "complement shift" */ \ + \ + if (!_length) \ + break; \ + \ + _end = _start + _length; \ + _start_unit = _start / _ts; \ + _end_unit = (_end + (_ts - 1)) / _ts; \ + \ + /* Trim v high bits */ \ + if (_length < sizeof(_v) * CHAR_BIT) \ + _v &= _bt_make_mask(__typeof__(_v), _length); \ + \ + /* We can now append v with a simple "or", shift it piece-wise */ \ + _this_unit = _end_unit - 1; \ + if (_start_unit == _end_unit - 1) { \ + _mask = _bt_make_mask(type, (_ts - (_end % _ts)) % _ts); \ + if (_start % _ts) \ + _mask |= _bt_make_mask_complement(type, _ts - (_start % _ts)); \ + _cmask = _bt_lshift((type) (_v), (_ts - (_end % _ts)) % _ts); \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + break; \ + } \ + if (_end % _ts) { \ + _cshift = _end % _ts; \ + _mask = _bt_make_mask(type, _ts - _cshift); \ + _cmask = _bt_lshift((type) (_v), _ts - _cshift); \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + _bt_safe_rshift(_v, _cshift); \ + _end -= _cshift; \ + _this_unit--; \ + } \ + for (; (long) _this_unit >= (long) _start_unit + 1; _this_unit--) { \ + _ptr[_this_unit] = (type) _v; \ + _bt_safe_rshift(_v, _ts); \ + _end -= _ts; \ + } \ + if (_start % _ts) { \ + _mask = _bt_make_mask_complement(type, _ts - (_start % _ts)); \ + _cmask = (type) _v; \ + _cmask &= ~_mask; \ + _ptr[_this_unit] &= _mask; \ + _ptr[_this_unit] |= _cmask; \ + } else \ + _ptr[_this_unit] = (type) _v; \ +} while (0) + +/* + * bt_bitfield_write - write integer to a bitfield in native endianness + * bt_bitfield_write_le - write integer to a bitfield in little endian + * bt_bitfield_write_be - write integer to a bitfield in big endian + */ + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + +#define bt_bitfield_write(ptr, type, start, length, v) \ + _bt_bitfield_write_le(ptr, type, start, length, v) + +#define bt_bitfield_write_le(ptr, type, start, length, v) \ + _bt_bitfield_write_le(ptr, type, start, length, v) + +#define bt_bitfield_write_be(ptr, type, start, length, v) \ + _bt_bitfield_write_be(ptr, unsigned char, start, length, v) + +#elif (__BYTE_ORDER == __BIG_ENDIAN) + +#define bt_bitfield_write(ptr, type, start, length, v) \ + _bt_bitfield_write_be(ptr, type, start, length, v) + +#define bt_bitfield_write_le(ptr, type, start, length, v) \ + _bt_bitfield_write_le(ptr, unsigned char, start, length, v) + +#define bt_bitfield_write_be(ptr, type, start, length, v) \ + _bt_bitfield_write_be(ptr, type, start, length, v) + +#else /* (__BYTE_ORDER == __PDP_ENDIAN) */ + +#error "Byte order not supported" + +#endif + +#define _bt_bitfield_read_le(ptr, type, start, length, vptr) \ +do { \ + __typeof__(*(vptr)) *_vptr = (vptr); \ + __typeof__(*_vptr) _v; \ + type *_ptr = (void *) (ptr); \ + unsigned long _start = (start), _length = (length); \ + type _mask, _cmask; \ + unsigned long _ts = sizeof(type) * CHAR_BIT; /* type size */ \ + unsigned long _start_unit, _end_unit, _this_unit; \ + unsigned long _end, _cshift; /* _cshift is "complement shift" */ \ + bool _is_signed_type; \ + \ + if (!_length) { \ + *_vptr = 0; \ + break; \ + } \ + \ + _end = _start + _length; \ + _start_unit = _start / _ts; \ + _end_unit = (_end + (_ts - 1)) / _ts; \ + \ + _this_unit = _end_unit - 1; \ + _BT_DIAG_PUSH \ + _BT_DIAG_IGNORE_TYPE_LIMITS \ + _is_signed_type = _bt_is_signed_type(__typeof__(_v)); \ + _BT_DIAG_POP \ + if (_is_signed_type \ + && (_ptr[_this_unit] & _bt_lshift((type) 1, (_end % _ts ? _end % _ts : _ts) - 1))) \ + _v = ~(__typeof__(_v)) 0; \ + else \ + _v = 0; \ + if (_start_unit == _end_unit - 1) { \ + _cmask = _ptr[_this_unit]; \ + _cmask = _bt_rshift(_cmask, _start % _ts); \ + if ((_end - _start) % _ts) { \ + _mask = _bt_make_mask(type, _end - _start); \ + _cmask &= _mask; \ + } \ + _bt_safe_lshift(_v, _end - _start); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + *_vptr = _v; \ + break; \ + } \ + if (_end % _ts) { \ + _cshift = _end % _ts; \ + _mask = _bt_make_mask(type, _cshift); \ + _cmask = _ptr[_this_unit]; \ + _cmask &= _mask; \ + _bt_safe_lshift(_v, _cshift); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + _end -= _cshift; \ + _this_unit--; \ + } \ + for (; (long) _this_unit >= (long) _start_unit + 1; _this_unit--) { \ + _bt_safe_lshift(_v, _ts); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _ptr[_this_unit]); \ + _end -= _ts; \ + } \ + if (_start % _ts) { \ + _mask = _bt_make_mask(type, _ts - (_start % _ts)); \ + _cmask = _ptr[_this_unit]; \ + _cmask = _bt_rshift(_cmask, _start % _ts); \ + _cmask &= _mask; \ + _bt_safe_lshift(_v, _ts - (_start % _ts)); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + } else { \ + _bt_safe_lshift(_v, _ts); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _ptr[_this_unit]); \ + } \ + *_vptr = _v; \ +} while (0) + +#define _bt_bitfield_read_be(ptr, type, start, length, vptr) \ +do { \ + __typeof__(*(vptr)) *_vptr = (vptr); \ + __typeof__(*_vptr) _v; \ + type *_ptr = (void *) (ptr); \ + unsigned long _start = (start), _length = (length); \ + type _mask, _cmask; \ + unsigned long _ts = sizeof(type) * CHAR_BIT; /* type size */ \ + unsigned long _start_unit, _end_unit, _this_unit; \ + unsigned long _end, _cshift; /* _cshift is "complement shift" */ \ + bool _is_signed_type; \ + \ + if (!_length) { \ + *_vptr = 0; \ + break; \ + } \ + \ + _end = _start + _length; \ + _start_unit = _start / _ts; \ + _end_unit = (_end + (_ts - 1)) / _ts; \ + \ + _this_unit = _start_unit; \ + _BT_DIAG_PUSH \ + _BT_DIAG_IGNORE_TYPE_LIMITS \ + _is_signed_type = _bt_is_signed_type(__typeof__(_v)); \ + _BT_DIAG_POP \ + if (_is_signed_type \ + && (_ptr[_this_unit] & _bt_lshift((type) 1, _ts - (_start % _ts) - 1))) \ + _v = ~(__typeof__(_v)) 0; \ + else \ + _v = 0; \ + if (_start_unit == _end_unit - 1) { \ + _cmask = _ptr[_this_unit]; \ + _cmask = _bt_rshift(_cmask, (_ts - (_end % _ts)) % _ts); \ + if ((_end - _start) % _ts) { \ + _mask = _bt_make_mask(type, _end - _start); \ + _cmask &= _mask; \ + } \ + _bt_safe_lshift(_v, _end - _start); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + *_vptr = _v; \ + break; \ + } \ + if (_start % _ts) { \ + _cshift = _start % _ts; \ + _mask = _bt_make_mask(type, _ts - _cshift); \ + _cmask = _ptr[_this_unit]; \ + _cmask &= _mask; \ + _bt_safe_lshift(_v, _ts - _cshift); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + _start += _ts - _cshift; \ + _this_unit++; \ + } \ + for (; _this_unit < _end_unit - 1; _this_unit++) { \ + _bt_safe_lshift(_v, _ts); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _ptr[_this_unit]); \ + _start += _ts; \ + } \ + if (_end % _ts) { \ + _mask = _bt_make_mask(type, _end % _ts); \ + _cmask = _ptr[_this_unit]; \ + _cmask = _bt_rshift(_cmask, _ts - (_end % _ts)); \ + _cmask &= _mask; \ + _bt_safe_lshift(_v, _end % _ts); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _cmask); \ + } else { \ + _bt_safe_lshift(_v, _ts); \ + _v |= _bt_cast_value_to_unsigned_type(__typeof__(_v), _ptr[_this_unit]); \ + } \ + *_vptr = _v; \ +} while (0) + +/* + * bt_bitfield_read - read integer from a bitfield in native endianness + * bt_bitfield_read_le - read integer from a bitfield in little endian + * bt_bitfield_read_be - read integer from a bitfield in big endian + */ + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) + +#define bt_bitfield_read(ptr, type, start, length, vptr) \ + _bt_bitfield_read_le(ptr, type, start, length, vptr) + +#define bt_bitfield_read_le(ptr, type, start, length, vptr) \ + _bt_bitfield_read_le(ptr, type, start, length, vptr) + +#define bt_bitfield_read_be(ptr, type, start, length, vptr) \ + _bt_bitfield_read_be(ptr, unsigned char, start, length, vptr) + +#elif (__BYTE_ORDER == __BIG_ENDIAN) + +#define bt_bitfield_read(ptr, type, start, length, vptr) \ + _bt_bitfield_read_be(ptr, type, start, length, vptr) + +#define bt_bitfield_read_le(ptr, type, start, length, vptr) \ + _bt_bitfield_read_le(ptr, unsigned char, start, length, vptr) + +#define bt_bitfield_read_be(ptr, type, start, length, vptr) \ + _bt_bitfield_read_be(ptr, type, start, length, vptr) + +#else /* (__BYTE_ORDER == __PDP_ENDIAN) */ + +#error "Byte order not supported" + +#endif + +#endif /* _BABELTRACE_BITFIELD_H */ diff --git a/ltt/lttng-2.11.0/lib/bug.h b/ltt/lttng-2.11.0/lib/bug.h new file mode 100644 index 000000000000..8ddf2b019461 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/bug.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lib/bug.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_BUG_H +#define _LTTNG_BUG_H + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) +#define LTTNG_BUILD_BUG_ON(cond) BUILD_BUG_ON(cond) +#else +#define LTTNG_BUILD_BUG_ON(cond) MAYBE_BUILD_BUG_ON(cond) +#endif + +/** + * BUILD_RUNTIME_BUG_ON - check condition at build (if constant) or runtime + * @condition: the condition which should be false. + * + * If the condition is a constant and true, the compiler will generate a build + * error. If the condition is not constant, a BUG will be triggered at runtime + * if the condition is ever true. If the condition is constant and false, no + * code is emitted. + */ +#define BUILD_RUNTIME_BUG_ON(condition) \ + do { \ + if (__builtin_constant_p(condition)) \ + LTTNG_BUILD_BUG_ON(condition); \ + else \ + BUG_ON(condition); \ + } while (0) + +#endif diff --git a/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.c b/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.c new file mode 100644 index 000000000000..04438bbfec52 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.c @@ -0,0 +1,199 @@ +/* SPDX-License-Identifier: MIT + * + * lttng_prio_heap.c + * + * Priority heap containing pointers. Based on CLRS, chapter 6. + * + * Copyright 2011 - Mathieu Desnoyers + */ + +#include +#include +#include + +#ifdef DEBUG_HEAP +void lttng_check_heap(const struct lttng_ptr_heap *heap) +{ + size_t i; + + if (!heap->len) + return; + + for (i = 1; i < heap->len; i++) + WARN_ON_ONCE(!heap->gt(heap->ptrs[i], heap->ptrs[0])); +} +#endif + +static +size_t parent(size_t i) +{ + return (i -1) >> 1; +} + +static +size_t left(size_t i) +{ + return (i << 1) + 1; +} + +static +size_t right(size_t i) +{ + return (i << 1) + 2; +} + +/* + * Copy of heap->ptrs pointer is invalid after heap_grow. + */ +static +int heap_grow(struct lttng_ptr_heap *heap, size_t new_len) +{ + void **new_ptrs; + + if (heap->alloc_len >= new_len) + return 0; + + heap->alloc_len = max_t(size_t, new_len, heap->alloc_len << 1); + new_ptrs = lttng_kvmalloc(heap->alloc_len * sizeof(void *), heap->gfpmask); + if (!new_ptrs) + return -ENOMEM; + if (heap->ptrs) + memcpy(new_ptrs, heap->ptrs, heap->len * sizeof(void *)); + lttng_kvfree(heap->ptrs); + heap->ptrs = new_ptrs; + return 0; +} + +static +int heap_set_len(struct lttng_ptr_heap *heap, size_t new_len) +{ + int ret; + + ret = heap_grow(heap, new_len); + if (ret) + return ret; + heap->len = new_len; + return 0; +} + +int lttng_heap_init(struct lttng_ptr_heap *heap, size_t alloc_len, + gfp_t gfpmask, int gt(void *a, void *b)) +{ + heap->ptrs = NULL; + heap->len = 0; + heap->alloc_len = 0; + heap->gt = gt; + heap->gfpmask = gfpmask; + /* + * Minimum size allocated is 1 entry to ensure memory allocation + * never fails within heap_replace_max. + */ + return heap_grow(heap, max_t(size_t, 1, alloc_len)); +} + +void lttng_heap_free(struct lttng_ptr_heap *heap) +{ + lttng_kvfree(heap->ptrs); +} + +static void heapify(struct lttng_ptr_heap *heap, size_t i) +{ + void **ptrs = heap->ptrs; + size_t l, r, largest; + + for (;;) { + void *tmp; + + l = left(i); + r = right(i); + if (l < heap->len && heap->gt(ptrs[l], ptrs[i])) + largest = l; + else + largest = i; + if (r < heap->len && heap->gt(ptrs[r], ptrs[largest])) + largest = r; + if (largest == i) + break; + tmp = ptrs[i]; + ptrs[i] = ptrs[largest]; + ptrs[largest] = tmp; + i = largest; + } + lttng_check_heap(heap); +} + +void *lttng_heap_replace_max(struct lttng_ptr_heap *heap, void *p) +{ + void *res; + + if (!heap->len) { + (void) heap_set_len(heap, 1); + heap->ptrs[0] = p; + lttng_check_heap(heap); + return NULL; + } + + /* Replace the current max and heapify */ + res = heap->ptrs[0]; + heap->ptrs[0] = p; + heapify(heap, 0); + return res; +} + +int lttng_heap_insert(struct lttng_ptr_heap *heap, void *p) +{ + void **ptrs; + size_t pos; + int ret; + + ret = heap_set_len(heap, heap->len + 1); + if (ret) + return ret; + ptrs = heap->ptrs; + pos = heap->len - 1; + while (pos > 0 && heap->gt(p, ptrs[parent(pos)])) { + /* Move parent down until we find the right spot */ + ptrs[pos] = ptrs[parent(pos)]; + pos = parent(pos); + } + ptrs[pos] = p; + lttng_check_heap(heap); + return 0; +} + +void *lttng_heap_remove(struct lttng_ptr_heap *heap) +{ + switch (heap->len) { + case 0: + return NULL; + case 1: + (void) heap_set_len(heap, 0); + return heap->ptrs[0]; + } + /* Shrink, replace the current max by previous last entry and heapify */ + heap_set_len(heap, heap->len - 1); + /* len changed. previous last entry is at heap->len */ + return lttng_heap_replace_max(heap, heap->ptrs[heap->len]); +} + +void *lttng_heap_cherrypick(struct lttng_ptr_heap *heap, void *p) +{ + size_t pos, len = heap->len; + + for (pos = 0; pos < len; pos++) + if (heap->ptrs[pos] == p) + goto found; + return NULL; +found: + if (heap->len == 1) { + (void) heap_set_len(heap, 0); + lttng_check_heap(heap); + return heap->ptrs[0]; + } + /* Replace p with previous last entry and heapify. */ + heap_set_len(heap, heap->len - 1); + /* len changed. previous last entry is at heap->len */ + heap->ptrs[pos] = heap->ptrs[heap->len]; + heapify(heap, pos); + return p; +} diff --git a/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.h b/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.h new file mode 100644 index 000000000000..f97f33f3abb0 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/prio_heap/lttng_prio_heap.h @@ -0,0 +1,108 @@ +/* SPDX-License-Identifier: MIT + * + * lttng_prio_heap.h + * + * Priority heap containing pointers. Based on CLRS, chapter 6. + * + * Copyright 2011 - Mathieu Desnoyers + */ + +#ifndef _LTTNG_PRIO_HEAP_H +#define _LTTNG_PRIO_HEAP_H + +#include + +struct lttng_ptr_heap { + size_t len, alloc_len; + void **ptrs; + int (*gt)(void *a, void *b); + gfp_t gfpmask; +}; + +#ifdef DEBUG_HEAP +void lttng_check_heap(const struct lttng_ptr_heap *heap); +#else +static inline +void lttng_check_heap(const struct lttng_ptr_heap *heap) +{ +} +#endif + +/** + * lttng_heap_maximum - return the largest element in the heap + * @heap: the heap to be operated on + * + * Returns the largest element in the heap, without performing any modification + * to the heap structure. Returns NULL if the heap is empty. + */ +static inline void *lttng_heap_maximum(const struct lttng_ptr_heap *heap) +{ + lttng_check_heap(heap); + return heap->len ? heap->ptrs[0] : NULL; +} + +/** + * lttng_heap_init - initialize the heap + * @heap: the heap to initialize + * @alloc_len: number of elements initially allocated + * @gfp: allocation flags + * @gt: function to compare the elements + * + * Returns -ENOMEM if out of memory. + */ +extern int lttng_heap_init(struct lttng_ptr_heap *heap, + size_t alloc_len, gfp_t gfpmask, + int gt(void *a, void *b)); + +/** + * lttng_heap_free - free the heap + * @heap: the heap to free + */ +extern void lttng_heap_free(struct lttng_ptr_heap *heap); + +/** + * lttng_heap_insert - insert an element into the heap + * @heap: the heap to be operated on + * @p: the element to add + * + * Insert an element into the heap. + * + * Returns -ENOMEM if out of memory. + */ +extern int lttng_heap_insert(struct lttng_ptr_heap *heap, void *p); + +/** + * lttng_heap_remove - remove the largest element from the heap + * @heap: the heap to be operated on + * + * Returns the largest element in the heap. It removes this element from the + * heap. Returns NULL if the heap is empty. + */ +extern void *lttng_heap_remove(struct lttng_ptr_heap *heap); + +/** + * lttng_heap_cherrypick - remove a given element from the heap + * @heap: the heap to be operated on + * @p: the element + * + * Remove the given element from the heap. Return the element if present, else + * return NULL. This algorithm has a complexity of O(n), which is higher than + * O(log(n)) provided by the rest of this API. + */ +extern void *lttng_heap_cherrypick(struct lttng_ptr_heap *heap, void *p); + +/** + * lttng_heap_replace_max - replace the the largest element from the heap + * @heap: the heap to be operated on + * @p: the pointer to be inserted as topmost element replacement + * + * Returns the largest element in the heap. It removes this element from the + * heap. The heap is rebalanced only once after the insertion. Returns NULL if + * the heap is empty. + * + * This is the equivalent of calling heap_remove() and then heap_insert(), but + * it only rebalances the heap once. It never allocates memory. + */ +extern void *lttng_heap_replace_max(struct lttng_ptr_heap *heap, void *p); + +#endif /* _LTTNG_PRIO_HEAP_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/api.h b/ltt/lttng-2.11.0/lib/ringbuffer/api.h new file mode 100644 index 000000000000..c1b6379b1b20 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/api.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/api.h + * + * Ring Buffer API. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_API_H +#define _LIB_RING_BUFFER_API_H + +#include +#include +#include + +/* + * ring_buffer_frontend_api.h contains static inline functions that depend on + * client static inlines. Hence the inclusion of this >api> header only + * within the client. + */ +#include + +#endif /* _LIB_RING_BUFFER_API_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/backend.h b/ltt/lttng-2.11.0/lib/ringbuffer/backend.h new file mode 100644 index 000000000000..855f1e017a2f --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/backend.h @@ -0,0 +1,451 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/backend.h + * + * Ring buffer backend (API). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * + * Credits to Steven Rostedt for proposing to use an extra-subbuffer owned by + * the reader in flight recorder mode. + */ + +#ifndef _LIB_RING_BUFFER_BACKEND_H +#define _LIB_RING_BUFFER_BACKEND_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Internal helpers */ +#include +#include + +/* Ring buffer backend API */ + +/* Ring buffer backend access (read/write) */ + +extern size_t lib_ring_buffer_read(struct lib_ring_buffer_backend *bufb, + size_t offset, void *dest, size_t len); + +extern int __lib_ring_buffer_copy_to_user(struct lib_ring_buffer_backend *bufb, + size_t offset, void __user *dest, + size_t len); + +extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb, + size_t offset, void *dest, size_t len); + +extern unsigned long * +lib_ring_buffer_read_get_pfn(struct lib_ring_buffer_backend *bufb, size_t offset, + void ***virt); + +/* + * Return the address where a given offset is located. + * Should be used to get the current subbuffer header pointer. Given we know + * it's never on a page boundary, it's safe to write directly to this address, + * as long as the write is never bigger than a page size. + */ +extern void * +lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb, + size_t offset); +extern void * +lib_ring_buffer_read_offset_address(struct lib_ring_buffer_backend *bufb, + size_t offset); + +/** + * lib_ring_buffer_write - write data to a buffer backend + * @config : ring buffer instance configuration + * @ctx: ring buffer context. (input arguments only) + * @src : source pointer to copy from + * @len : length of data to copy + * + * This function copies "len" bytes of data from a source pointer to a buffer + * backend, at the current context offset. This is more or less a buffer + * backend-specific memcpy() operation. Calls the slow path (_ring_buffer_write) + * if copy is crossing a page boundary. + */ +static inline __attribute__((always_inline)) +void lib_ring_buffer_write(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + const void *src, size_t len) +{ + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t index, pagecpy; + size_t offset = ctx->buf_offset; + struct lib_ring_buffer_backend_pages *backend_pages; + + if (unlikely(!len)) + return; + backend_pages = + lib_ring_buffer_get_backend_pages_from_ctx(config, ctx); + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + pagecpy = min_t(size_t, len, (-offset) & ~PAGE_MASK); + if (likely(pagecpy == len)) + lib_ring_buffer_do_copy(config, + backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + src, len); + else + _lib_ring_buffer_write(bufb, offset, src, len, 0); + ctx->buf_offset += len; +} + +/** + * lib_ring_buffer_memset - write len bytes of c to a buffer backend + * @config : ring buffer instance configuration + * @bufb : ring buffer backend + * @offset : offset within the buffer + * @c : the byte to copy + * @len : number of bytes to copy + * + * This function writes "len" bytes of "c" to a buffer backend, at a specific + * offset. This is more or less a buffer backend-specific memset() operation. + * Calls the slow path (_ring_buffer_memset) if write is crossing a page + * boundary. + */ +static inline +void lib_ring_buffer_memset(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, int c, size_t len) +{ + + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t index, pagecpy; + size_t offset = ctx->buf_offset; + struct lib_ring_buffer_backend_pages *backend_pages; + + if (unlikely(!len)) + return; + backend_pages = + lib_ring_buffer_get_backend_pages_from_ctx(config, ctx); + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + pagecpy = min_t(size_t, len, (-offset) & ~PAGE_MASK); + if (likely(pagecpy == len)) + lib_ring_buffer_do_memset(backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + c, len); + else + _lib_ring_buffer_memset(bufb, offset, c, len, 0); + ctx->buf_offset += len; +} + +/* + * Copy up to @len string bytes from @src to @dest. Stop whenever a NULL + * terminating character is found in @src. Returns the number of bytes + * copied. Does *not* terminate @dest with NULL terminating character. + */ +static inline __attribute__((always_inline)) +size_t lib_ring_buffer_do_strcpy(const struct lib_ring_buffer_config *config, + char *dest, const char *src, size_t len) +{ + size_t count; + + for (count = 0; count < len; count++) { + char c; + + /* + * Only read source character once, in case it is + * modified concurrently. + */ + c = LTTNG_READ_ONCE(src[count]); + if (!c) + break; + lib_ring_buffer_do_copy(config, &dest[count], &c, 1); + } + return count; +} + +/* + * Copy up to @len string bytes from @src to @dest. Stop whenever a NULL + * terminating character is found in @src, or when a fault occurs. + * Returns the number of bytes copied. Does *not* terminate @dest with + * NULL terminating character. + * + * This function deals with userspace pointers, it should never be called + * directly without having the src pointer checked with access_ok() + * previously. + */ +static inline __attribute__((always_inline)) +size_t lib_ring_buffer_do_strcpy_from_user_inatomic(const struct lib_ring_buffer_config *config, + char *dest, const char __user *src, size_t len) +{ + size_t count; + + for (count = 0; count < len; count++) { + int ret; + char c; + + ret = __copy_from_user_inatomic(&c, src + count, 1); + if (ret || !c) + break; + lib_ring_buffer_do_copy(config, &dest[count], &c, 1); + } + return count; +} + +/** + * lib_ring_buffer_strcpy - write string data to a buffer backend + * @config : ring buffer instance configuration + * @ctx: ring buffer context. (input arguments only) + * @src : source pointer to copy from + * @len : length of data to copy + * @pad : character to use for padding + * + * This function copies @len - 1 bytes of string data from a source + * pointer to a buffer backend, followed by a terminating '\0' + * character, at the current context offset. This is more or less a + * buffer backend-specific strncpy() operation. If a terminating '\0' + * character is found in @src before @len - 1 characters are copied, pad + * the buffer with @pad characters (e.g. '#'). Calls the slow path + * (_ring_buffer_strcpy) if copy is crossing a page boundary. + */ +static inline +void lib_ring_buffer_strcpy(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + const char *src, size_t len, int pad) +{ + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t index, pagecpy; + size_t offset = ctx->buf_offset; + struct lib_ring_buffer_backend_pages *backend_pages; + + if (unlikely(!len)) + return; + backend_pages = + lib_ring_buffer_get_backend_pages_from_ctx(config, ctx); + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + pagecpy = min_t(size_t, len, (-offset) & ~PAGE_MASK); + if (likely(pagecpy == len)) { + size_t count; + + count = lib_ring_buffer_do_strcpy(config, + backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + src, len - 1); + offset += count; + /* Padding */ + if (unlikely(count < len - 1)) { + size_t pad_len = len - 1 - count; + + lib_ring_buffer_do_memset(backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + /* Ending '\0' */ + lib_ring_buffer_do_memset(backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + '\0', 1); + } else { + _lib_ring_buffer_strcpy(bufb, offset, src, len, 0, pad); + } + ctx->buf_offset += len; +} + +/** + * lib_ring_buffer_copy_from_user_inatomic - write userspace data to a buffer backend + * @config : ring buffer instance configuration + * @ctx: ring buffer context. (input arguments only) + * @src : userspace source pointer to copy from + * @len : length of data to copy + * + * This function copies "len" bytes of data from a userspace pointer to a + * buffer backend, at the current context offset. This is more or less a buffer + * backend-specific memcpy() operation. Calls the slow path + * (_ring_buffer_write_from_user_inatomic) if copy is crossing a page boundary. + * Disable the page fault handler to ensure we never try to take the mmap_sem. + */ +static inline __attribute__((always_inline)) +void lib_ring_buffer_copy_from_user_inatomic(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + const void __user *src, size_t len) +{ + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t index, pagecpy; + size_t offset = ctx->buf_offset; + struct lib_ring_buffer_backend_pages *backend_pages; + unsigned long ret; + + if (unlikely(!len)) + return; + backend_pages = + lib_ring_buffer_get_backend_pages_from_ctx(config, ctx); + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + pagecpy = min_t(size_t, len, (-offset) & ~PAGE_MASK); + + pagefault_disable(); + if (unlikely(!lttng_access_ok(VERIFY_READ, src, len))) + goto fill_buffer; + + if (likely(pagecpy == len)) { + ret = lib_ring_buffer_do_copy_from_user_inatomic( + backend_pages->p[index].virt + (offset & ~PAGE_MASK), + src, len); + if (unlikely(ret > 0)) { + /* Copy failed. */ + goto fill_buffer; + } + } else { + _lib_ring_buffer_copy_from_user_inatomic(bufb, offset, src, len, 0); + } + pagefault_enable(); + ctx->buf_offset += len; + + return; + +fill_buffer: + pagefault_enable(); + /* + * In the error path we call the slow path version to avoid + * the pollution of static inline code. + */ + _lib_ring_buffer_memset(bufb, offset, 0, len, 0); +} + +/** + * lib_ring_buffer_strcpy_from_user_inatomic - write userspace string data to a buffer backend + * @config : ring buffer instance configuration + * @ctx: ring buffer context (input arguments only) + * @src : userspace source pointer to copy from + * @len : length of data to copy + * @pad : character to use for padding + * + * This function copies @len - 1 bytes of string data from a userspace + * source pointer to a buffer backend, followed by a terminating '\0' + * character, at the current context offset. This is more or less a + * buffer backend-specific strncpy() operation. If a terminating '\0' + * character is found in @src before @len - 1 characters are copied, pad + * the buffer with @pad characters (e.g. '#'). Calls the slow path + * (_ring_buffer_strcpy_from_user_inatomic) if copy is crossing a page + * boundary. Disable the page fault handler to ensure we never try to + * take the mmap_sem. + */ +static inline +void lib_ring_buffer_strcpy_from_user_inatomic(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + const void __user *src, size_t len, int pad) +{ + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t index, pagecpy; + size_t offset = ctx->buf_offset; + struct lib_ring_buffer_backend_pages *backend_pages; + + if (unlikely(!len)) + return; + backend_pages = + lib_ring_buffer_get_backend_pages_from_ctx(config, ctx); + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + pagecpy = min_t(size_t, len, (-offset) & ~PAGE_MASK); + + pagefault_disable(); + if (unlikely(!lttng_access_ok(VERIFY_READ, src, len))) + goto fill_buffer; + + if (likely(pagecpy == len)) { + size_t count; + + count = lib_ring_buffer_do_strcpy_from_user_inatomic(config, + backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + src, len - 1); + offset += count; + /* Padding */ + if (unlikely(count < len - 1)) { + size_t pad_len = len - 1 - count; + + lib_ring_buffer_do_memset(backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + /* Ending '\0' */ + lib_ring_buffer_do_memset(backend_pages->p[index].virt + + (offset & ~PAGE_MASK), + '\0', 1); + } else { + _lib_ring_buffer_strcpy_from_user_inatomic(bufb, offset, src, + len, 0, pad); + } + pagefault_enable(); + ctx->buf_offset += len; + + return; + +fill_buffer: + pagefault_enable(); + /* + * In the error path we call the slow path version to avoid + * the pollution of static inline code. + */ + _lib_ring_buffer_memset(bufb, offset, pad, len - 1, 0); + offset += len - 1; + _lib_ring_buffer_memset(bufb, offset, '\0', 1, 0); +} + +/* + * This accessor counts the number of unread records in a buffer. + * It only provides a consistent value if no reads not writes are performed + * concurrently. + */ +static inline +unsigned long lib_ring_buffer_get_records_unread( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + struct lib_ring_buffer_backend *bufb = &buf->backend; + struct lib_ring_buffer_backend_pages *pages; + unsigned long records_unread = 0, sb_bindex, id; + unsigned int i; + + for (i = 0; i < bufb->chan->backend.num_subbuf; i++) { + id = bufb->buf_wsb[i].id; + sb_bindex = subbuffer_id_get_index(config, id); + pages = bufb->array[sb_bindex]; + records_unread += v_read(config, &pages->records_unread); + } + if (config->mode == RING_BUFFER_OVERWRITE) { + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + pages = bufb->array[sb_bindex]; + records_unread += v_read(config, &pages->records_unread); + } + return records_unread; +} + +/* + * We use __copy_from_user_inatomic to copy userspace data after + * checking with access_ok() and disabling page faults. + * + * Return 0 if OK, nonzero on error. + */ +static inline +unsigned long lib_ring_buffer_copy_from_user_check_nofault(void *dest, + const void __user *src, + unsigned long len) +{ + unsigned long ret; + + if (!lttng_access_ok(VERIFY_READ, src, len)) + return 1; + pagefault_disable(); + ret = __copy_from_user_inatomic(dest, src, len); + pagefault_enable(); + return ret; +} + +#endif /* _LIB_RING_BUFFER_BACKEND_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/backend_internal.h b/ltt/lttng-2.11.0/lib/ringbuffer/backend_internal.h new file mode 100644 index 000000000000..1226fd8f16ac --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/backend_internal.h @@ -0,0 +1,532 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/backend_internal.h + * + * Ring buffer backend (internal helpers). + * + * Copyright (C) 2008-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_BACKEND_INTERNAL_H +#define _LIB_RING_BUFFER_BACKEND_INTERNAL_H + +#include +#include +#include +#include +#include +#include + +/* Ring buffer backend API presented to the frontend */ + +/* Ring buffer and channel backend create/free */ + +int lib_ring_buffer_backend_create(struct lib_ring_buffer_backend *bufb, + struct channel_backend *chan, int cpu); +void channel_backend_unregister_notifiers(struct channel_backend *chanb); +void lib_ring_buffer_backend_free(struct lib_ring_buffer_backend *bufb); +int channel_backend_init(struct channel_backend *chanb, + const char *name, + const struct lib_ring_buffer_config *config, + void *priv, size_t subbuf_size, + size_t num_subbuf); +void channel_backend_free(struct channel_backend *chanb); + +void lib_ring_buffer_backend_reset(struct lib_ring_buffer_backend *bufb); +void channel_backend_reset(struct channel_backend *chanb); + +int lib_ring_buffer_backend_init(void); +void lib_ring_buffer_backend_exit(void); + +extern void _lib_ring_buffer_write(struct lib_ring_buffer_backend *bufb, + size_t offset, const void *src, size_t len, + size_t pagecpy); +extern void _lib_ring_buffer_memset(struct lib_ring_buffer_backend *bufb, + size_t offset, int c, size_t len, + size_t pagecpy); +extern void _lib_ring_buffer_strcpy(struct lib_ring_buffer_backend *bufb, + size_t offset, const char *src, size_t len, + size_t pagecpy, int pad); +extern void _lib_ring_buffer_copy_from_user_inatomic(struct lib_ring_buffer_backend *bufb, + size_t offset, const void *src, + size_t len, size_t pagecpy); +extern void _lib_ring_buffer_strcpy_from_user_inatomic(struct lib_ring_buffer_backend *bufb, + size_t offset, const char __user *src, size_t len, + size_t pagecpy, int pad); + +/* + * Subbuffer ID bits for overwrite mode. Need to fit within a single word to be + * exchanged atomically. + * + * Top half word, except lowest bit, belongs to "offset", which is used to keep + * to count the produced buffers. For overwrite mode, this provides the + * consumer with the capacity to read subbuffers in order, handling the + * situation where producers would write up to 2^15 buffers (or 2^31 for 64-bit + * systems) concurrently with a single execution of get_subbuf (between offset + * sampling and subbuffer ID exchange). + */ + +#define HALF_ULONG_BITS (BITS_PER_LONG >> 1) + +#define SB_ID_OFFSET_SHIFT (HALF_ULONG_BITS + 1) +#define SB_ID_OFFSET_COUNT (1UL << SB_ID_OFFSET_SHIFT) +#define SB_ID_OFFSET_MASK (~(SB_ID_OFFSET_COUNT - 1)) +/* + * Lowest bit of top word half belongs to noref. Used only for overwrite mode. + */ +#define SB_ID_NOREF_SHIFT (SB_ID_OFFSET_SHIFT - 1) +#define SB_ID_NOREF_COUNT (1UL << SB_ID_NOREF_SHIFT) +#define SB_ID_NOREF_MASK SB_ID_NOREF_COUNT +/* + * In overwrite mode: lowest half of word is used for index. + * Limit of 2^16 subbuffers per buffer on 32-bit, 2^32 on 64-bit. + * In producer-consumer mode: whole word used for index. + */ +#define SB_ID_INDEX_SHIFT 0 +#define SB_ID_INDEX_COUNT (1UL << SB_ID_INDEX_SHIFT) +#define SB_ID_INDEX_MASK (SB_ID_NOREF_COUNT - 1) + +/* + * Construct the subbuffer id from offset, index and noref. Use only the index + * for producer-consumer mode (offset and noref are only used in overwrite + * mode). + */ +static inline +unsigned long subbuffer_id(const struct lib_ring_buffer_config *config, + unsigned long offset, unsigned long noref, + unsigned long index) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + return (offset << SB_ID_OFFSET_SHIFT) + | (noref << SB_ID_NOREF_SHIFT) + | index; + else + return index; +} + +/* + * Compare offset with the offset contained within id. Return 1 if the offset + * bits are identical, else 0. + */ +static inline +int subbuffer_id_compare_offset(const struct lib_ring_buffer_config *config, + unsigned long id, unsigned long offset) +{ + return (id & SB_ID_OFFSET_MASK) == (offset << SB_ID_OFFSET_SHIFT); +} + +static inline +unsigned long subbuffer_id_get_index(const struct lib_ring_buffer_config *config, + unsigned long id) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + return id & SB_ID_INDEX_MASK; + else + return id; +} + +static inline +unsigned long subbuffer_id_is_noref(const struct lib_ring_buffer_config *config, + unsigned long id) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + return !!(id & SB_ID_NOREF_MASK); + else + return 1; +} + +/* + * Only used by reader on subbuffer ID it has exclusive access to. No volatile + * needed. + */ +static inline +void subbuffer_id_set_noref(const struct lib_ring_buffer_config *config, + unsigned long *id) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + *id |= SB_ID_NOREF_MASK; +} + +static inline +void subbuffer_id_set_noref_offset(const struct lib_ring_buffer_config *config, + unsigned long *id, unsigned long offset) +{ + unsigned long tmp; + + if (config->mode == RING_BUFFER_OVERWRITE) { + tmp = *id; + tmp &= ~SB_ID_OFFSET_MASK; + tmp |= offset << SB_ID_OFFSET_SHIFT; + tmp |= SB_ID_NOREF_MASK; + /* Volatile store, read concurrently by readers. */ + WRITE_ONCE(*id, tmp); + } +} + +/* No volatile access, since already used locally */ +static inline +void subbuffer_id_clear_noref(const struct lib_ring_buffer_config *config, + unsigned long *id) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + *id &= ~SB_ID_NOREF_MASK; +} + +/* + * For overwrite mode, cap the number of subbuffers per buffer to: + * 2^16 on 32-bit architectures + * 2^32 on 64-bit architectures + * This is required to fit in the index part of the ID. Return 0 on success, + * -EPERM on failure. + */ +static inline +int subbuffer_id_check_index(const struct lib_ring_buffer_config *config, + unsigned long num_subbuf) +{ + if (config->mode == RING_BUFFER_OVERWRITE) + return (num_subbuf > (1UL << HALF_ULONG_BITS)) ? -EPERM : 0; + else + return 0; +} + +static inline +void lib_ring_buffer_backend_get_pages(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + struct lib_ring_buffer_backend_pages **backend_pages) +{ + struct lib_ring_buffer_backend *bufb = &ctx->buf->backend; + struct channel_backend *chanb = &ctx->chan->backend; + size_t sbidx, offset = ctx->buf_offset; + unsigned long sb_bindex, id; + struct lib_ring_buffer_backend_pages *rpages; + + offset &= chanb->buf_size - 1; + sbidx = offset >> chanb->subbuf_size_order; + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(ctx->chan, + config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + *backend_pages = rpages; +} + +/* Get backend pages from cache. */ +static inline +struct lib_ring_buffer_backend_pages * + lib_ring_buffer_get_backend_pages_from_ctx(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx) +{ + return ctx->backend_pages; +} + +/* + * The ring buffer can count events recorded and overwritten per buffer, + * but it is disabled by default due to its performance overhead. + */ +#ifdef LTTNG_RING_BUFFER_COUNT_EVENTS +static inline +void subbuffer_count_record(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_wsb[idx].id); + v_inc(config, &bufb->array[sb_bindex]->records_commit); +} +#else /* LTTNG_RING_BUFFER_COUNT_EVENTS */ +static inline +void subbuffer_count_record(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ +} +#endif /* #else LTTNG_RING_BUFFER_COUNT_EVENTS */ + +/* + * Reader has exclusive subbuffer access for record consumption. No need to + * perform the decrement atomically. + */ +static inline +void subbuffer_consume_record(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb) +{ + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_rsb.id); + CHAN_WARN_ON(bufb->chan, + !v_read(config, &bufb->array[sb_bindex]->records_unread)); + /* Non-atomic decrement protected by exclusive subbuffer access */ + _v_dec(config, &bufb->array[sb_bindex]->records_unread); + v_inc(config, &bufb->records_read); +} + +static inline +unsigned long subbuffer_get_records_count( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_wsb[idx].id); + return v_read(config, &bufb->array[sb_bindex]->records_commit); +} + +/* + * Must be executed at subbuffer delivery when the writer has _exclusive_ + * subbuffer access. See lib_ring_buffer_check_deliver() for details. + * lib_ring_buffer_get_records_count() must be called to get the records + * count before this function, because it resets the records_commit + * count. + */ +static inline +unsigned long subbuffer_count_records_overrun( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + struct lib_ring_buffer_backend_pages *pages; + unsigned long overruns, sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_wsb[idx].id); + pages = bufb->array[sb_bindex]; + overruns = v_read(config, &pages->records_unread); + v_set(config, &pages->records_unread, + v_read(config, &pages->records_commit)); + v_set(config, &pages->records_commit, 0); + + return overruns; +} + +static inline +void subbuffer_set_data_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx, + unsigned long data_size) +{ + struct lib_ring_buffer_backend_pages *pages; + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_wsb[idx].id); + pages = bufb->array[sb_bindex]; + pages->data_size = data_size; +} + +static inline +unsigned long subbuffer_get_read_data_size( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb) +{ + struct lib_ring_buffer_backend_pages *pages; + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_rsb.id); + pages = bufb->array[sb_bindex]; + return pages->data_size; +} + +static inline +unsigned long subbuffer_get_data_size( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + struct lib_ring_buffer_backend_pages *pages; + unsigned long sb_bindex; + + sb_bindex = subbuffer_id_get_index(config, bufb->buf_wsb[idx].id); + pages = bufb->array[sb_bindex]; + return pages->data_size; +} + +static inline +void subbuffer_inc_packet_count(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + bufb->buf_cnt[idx].seq_cnt++; +} + +/** + * lib_ring_buffer_clear_noref - Clear the noref subbuffer flag, called by + * writer. + */ +static inline +void lib_ring_buffer_clear_noref(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx) +{ + unsigned long id, new_id; + + if (config->mode != RING_BUFFER_OVERWRITE) + return; + + /* + * Performing a volatile access to read the sb_pages, because we want to + * read a coherent version of the pointer and the associated noref flag. + */ + id = LTTNG_READ_ONCE(bufb->buf_wsb[idx].id); + for (;;) { + /* This check is called on the fast path for each record. */ + if (likely(!subbuffer_id_is_noref(config, id))) { + /* + * Store after load dependency ordering the writes to + * the subbuffer after load and test of the noref flag + * matches the memory barrier implied by the cmpxchg() + * in update_read_sb_index(). + */ + return; /* Already writing to this buffer */ + } + new_id = id; + subbuffer_id_clear_noref(config, &new_id); + new_id = cmpxchg(&bufb->buf_wsb[idx].id, id, new_id); + if (likely(new_id == id)) + break; + id = new_id; + } +} + +/** + * lib_ring_buffer_set_noref_offset - Set the noref subbuffer flag and offset, + * called by writer. + */ +static inline +void lib_ring_buffer_set_noref_offset(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + unsigned long idx, unsigned long offset) +{ + if (config->mode != RING_BUFFER_OVERWRITE) + return; + + /* + * Because ring_buffer_set_noref() is only called by a single thread + * (the one which updated the cc_sb value), there are no concurrent + * updates to take care of: other writers have not updated cc_sb, so + * they cannot set the noref flag, and concurrent readers cannot modify + * the pointer because the noref flag is not set yet. + * The smp_wmb() in ring_buffer_commit() takes care of ordering writes + * to the subbuffer before this set noref operation. + * subbuffer_set_noref() uses a volatile store to deal with concurrent + * readers of the noref flag. + */ + CHAN_WARN_ON(bufb->chan, + subbuffer_id_is_noref(config, bufb->buf_wsb[idx].id)); + /* + * Memory barrier that ensures counter stores are ordered before set + * noref and offset. + */ + smp_mb(); + subbuffer_id_set_noref_offset(config, &bufb->buf_wsb[idx].id, offset); +} + +/** + * update_read_sb_index - Read-side subbuffer index update. + */ +static inline +int update_read_sb_index(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + struct channel_backend *chanb, + unsigned long consumed_idx, + unsigned long consumed_count) +{ + unsigned long old_id, new_id; + + if (config->mode == RING_BUFFER_OVERWRITE) { + /* + * Exchange the target writer subbuffer with our own unused + * subbuffer. No need to use READ_ONCE() here to read the + * old_wpage, because the value read will be confirmed by the + * following cmpxchg(). + */ + old_id = bufb->buf_wsb[consumed_idx].id; + if (unlikely(!subbuffer_id_is_noref(config, old_id))) + return -EAGAIN; + /* + * Make sure the offset count we are expecting matches the one + * indicated by the writer. + */ + if (unlikely(!subbuffer_id_compare_offset(config, old_id, + consumed_count))) + return -EAGAIN; + CHAN_WARN_ON(bufb->chan, + !subbuffer_id_is_noref(config, bufb->buf_rsb.id)); + subbuffer_id_set_noref_offset(config, &bufb->buf_rsb.id, + consumed_count); + new_id = cmpxchg(&bufb->buf_wsb[consumed_idx].id, old_id, + bufb->buf_rsb.id); + if (unlikely(old_id != new_id)) + return -EAGAIN; + bufb->buf_rsb.id = new_id; + } else { + /* No page exchange, use the writer page directly */ + bufb->buf_rsb.id = bufb->buf_wsb[consumed_idx].id; + } + return 0; +} + +static inline __attribute__((always_inline)) +void lttng_inline_memcpy(void *dest, const void *src, + unsigned long len) +{ + switch (len) { + case 1: + *(uint8_t *) dest = *(const uint8_t *) src; + break; + case 2: + *(uint16_t *) dest = *(const uint16_t *) src; + break; + case 4: + *(uint32_t *) dest = *(const uint32_t *) src; + break; + case 8: + *(uint64_t *) dest = *(const uint64_t *) src; + break; + default: + inline_memcpy(dest, src, len); + } +} + +/* + * Use the architecture-specific memcpy implementation for constant-sized + * inputs, but rely on an inline memcpy for length statically unknown. + * The function call to memcpy is just way too expensive for a fast path. + */ +#define lib_ring_buffer_do_copy(config, dest, src, len) \ +do { \ + size_t __len = (len); \ + if (__builtin_constant_p(len)) \ + memcpy(dest, src, __len); \ + else \ + lttng_inline_memcpy(dest, src, __len); \ +} while (0) + +/* + * We use __copy_from_user_inatomic to copy userspace data since we already + * did the access_ok for the whole range. + * + * Return 0 if OK, nonzero on error. + */ +static inline +unsigned long lib_ring_buffer_do_copy_from_user_inatomic(void *dest, + const void __user *src, + unsigned long len) +{ + return __copy_from_user_inatomic(dest, src, len); +} + +/* + * write len bytes to dest with c + */ +static inline +void lib_ring_buffer_do_memset(char *dest, int c, + unsigned long len) +{ + unsigned long i; + + for (i = 0; i < len; i++) + dest[i] = c; +} + +#endif /* _LIB_RING_BUFFER_BACKEND_INTERNAL_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/backend_types.h b/ltt/lttng-2.11.0/lib/ringbuffer/backend_types.h new file mode 100644 index 000000000000..c443b644d1a3 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/backend_types.h @@ -0,0 +1,104 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/backend_types.h + * + * Ring buffer backend (types). + * + * Copyright (C) 2008-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_BACKEND_TYPES_H +#define _LIB_RING_BUFFER_BACKEND_TYPES_H + +#include +#include +#include +#include + +struct lib_ring_buffer_backend_page { + void *virt; /* page virtual address (cached) */ + unsigned long pfn; /* page frame number */ +}; + +struct lib_ring_buffer_backend_pages { + unsigned long mmap_offset; /* offset of the subbuffer in mmap */ + union v_atomic records_commit; /* current records committed count */ + union v_atomic records_unread; /* records to read */ + unsigned long data_size; /* Amount of data to read from subbuf */ + struct lib_ring_buffer_backend_page p[]; +}; + +struct lib_ring_buffer_backend_subbuffer { + /* Identifier for subbuf backend pages. Exchanged atomically. */ + unsigned long id; /* backend subbuffer identifier */ +}; + +struct lib_ring_buffer_backend_counts { + /* + * Counter specific to the sub-buffer location within the ring buffer. + * The actual sequence number of the packet within the entire ring + * buffer can be derived from the formula nr_subbuffers * seq_cnt + + * subbuf_idx. + */ + uint64_t seq_cnt; /* packet sequence number */ +}; + +/* + * Forward declaration of frontend-specific channel and ring_buffer. + */ +struct channel; +struct lib_ring_buffer; + +struct lib_ring_buffer_backend { + /* Array of ring_buffer_backend_subbuffer for writer */ + struct lib_ring_buffer_backend_subbuffer *buf_wsb; + /* ring_buffer_backend_subbuffer for reader */ + struct lib_ring_buffer_backend_subbuffer buf_rsb; + /* Array of lib_ring_buffer_backend_counts for the packet counter */ + struct lib_ring_buffer_backend_counts *buf_cnt; + /* + * Pointer array of backend pages, for whole buffer. + * Indexed by ring_buffer_backend_subbuffer identifier (id) index. + */ + struct lib_ring_buffer_backend_pages **array; + unsigned int num_pages_per_subbuf; + + struct channel *chan; /* Associated channel */ + int cpu; /* This buffer's cpu. -1 if global. */ + union v_atomic records_read; /* Number of records read */ + unsigned int allocated:1; /* is buffer allocated ? */ +}; + +struct channel_backend { + unsigned long buf_size; /* Size of the buffer */ + unsigned long subbuf_size; /* Sub-buffer size */ + unsigned int subbuf_size_order; /* Order of sub-buffer size */ + unsigned int num_subbuf_order; /* + * Order of number of sub-buffers/buffer + * for writer. + */ + unsigned int buf_size_order; /* Order of buffer size */ + unsigned int extra_reader_sb:1; /* has extra reader subbuffer ? */ + struct lib_ring_buffer *buf; /* Channel per-cpu buffers */ + + unsigned long num_subbuf; /* Number of sub-buffers for writer */ + u64 start_tsc; /* Channel creation TSC value */ + void *priv; /* Client-specific information */ + void *priv_ops; /* Client-specific ops pointer */ + void (*release_priv_ops)(void *priv_ops); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + struct lttng_cpuhp_node cpuhp_prepare; /* CPU hotplug prepare */ +#else + struct notifier_block cpu_hp_notifier; /* CPU hotplug notifier */ +#endif + /* + * We need to copy config because the module containing the + * source config can vanish before the last reference to this + * channel's streams is released. + */ + struct lib_ring_buffer_config config; /* Ring buffer configuration */ + cpumask_var_t cpumask; /* Allocated per-cpu buffers cpumask */ + char name[NAME_MAX]; /* Channel name */ +}; + +#endif /* _LIB_RING_BUFFER_BACKEND_TYPES_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/config.h b/ltt/lttng-2.11.0/lib/ringbuffer/config.h new file mode 100644 index 000000000000..d48654bf1cee --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/config.h @@ -0,0 +1,306 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/config.h + * + * Ring buffer configuration header. Note: after declaring the standard inline + * functions, clients should also include linux/ringbuffer/api.h. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_CONFIG_H +#define _LIB_RING_BUFFER_CONFIG_H + +#include +#include +#include +#include + +struct lib_ring_buffer; +struct channel; +struct lib_ring_buffer_config; +struct lib_ring_buffer_ctx; + +/* + * Ring buffer client callbacks. Only used by slow path, never on fast path. + * For the fast path, record_header_size(), ring_buffer_clock_read() should be + * provided as inline functions too. These may simply return 0 if not used by + * the client. + */ +struct lib_ring_buffer_client_cb { + /* Mandatory callbacks */ + + /* A static inline version is also required for fast path */ + u64 (*ring_buffer_clock_read) (struct channel *chan); + size_t (*record_header_size) (const struct lib_ring_buffer_config *config, + struct channel *chan, size_t offset, + size_t *pre_header_padding, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx); + + /* Slow path only, at subbuffer switch */ + size_t (*subbuffer_header_size) (void); + void (*buffer_begin) (struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx); + void (*buffer_end) (struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx, unsigned long data_size); + + /* Optional callbacks (can be set to NULL) */ + + /* Called at buffer creation/finalize */ + int (*buffer_create) (struct lib_ring_buffer *buf, void *priv, + int cpu, const char *name); + /* + * Clients should guarantee that no new reader handle can be opened + * after finalize. + */ + void (*buffer_finalize) (struct lib_ring_buffer *buf, void *priv, int cpu); + + /* + * Extract header length, payload length and timestamp from event + * record. Used by buffer iterators. Timestamp is only used by channel + * iterator. + */ + void (*record_get) (const struct lib_ring_buffer_config *config, + struct channel *chan, struct lib_ring_buffer *buf, + size_t offset, size_t *header_len, + size_t *payload_len, u64 *timestamp); +}; + +/* + * Ring buffer instance configuration. + * + * Declare as "static const" within the client object to ensure the inline fast + * paths can be optimized. + * + * alloc/sync pairs: + * + * RING_BUFFER_ALLOC_PER_CPU and RING_BUFFER_SYNC_PER_CPU : + * Per-cpu buffers with per-cpu synchronization. Tracing must be performed + * with preemption disabled (lib_ring_buffer_get_cpu() and + * lib_ring_buffer_put_cpu()). + * + * RING_BUFFER_ALLOC_PER_CPU and RING_BUFFER_SYNC_GLOBAL : + * Per-cpu buffer with global synchronization. Tracing can be performed with + * preemption enabled, statistically stays on the local buffers. + * + * RING_BUFFER_ALLOC_GLOBAL and RING_BUFFER_SYNC_PER_CPU : + * Should only be used for buffers belonging to a single thread or protected + * by mutual exclusion by the client. Note that periodical sub-buffer switch + * should be disabled in this kind of configuration. + * + * RING_BUFFER_ALLOC_GLOBAL and RING_BUFFER_SYNC_GLOBAL : + * Global shared buffer with global synchronization. + * + * wakeup: + * + * RING_BUFFER_WAKEUP_BY_TIMER uses per-cpu timers to poll the + * buffers and wake up readers if data is ready. Mainly useful for tracers which + * don't want to call into the wakeup code on the tracing path. Use in + * combination with "read_timer_interval" channel_create() argument. + * + * RING_BUFFER_WAKEUP_BY_WRITER directly wakes up readers when a subbuffer is + * ready to read. Lower latencies before the reader is woken up. Mainly suitable + * for drivers. + * + * RING_BUFFER_WAKEUP_NONE does not perform any wakeup whatsoever. The client + * has the responsibility to perform wakeups. + */ +struct lib_ring_buffer_config { + enum { + RING_BUFFER_ALLOC_PER_CPU, + RING_BUFFER_ALLOC_GLOBAL, + } alloc; + enum { + RING_BUFFER_SYNC_PER_CPU, /* Wait-free */ + RING_BUFFER_SYNC_GLOBAL, /* Lock-free */ + } sync; + enum { + RING_BUFFER_OVERWRITE, /* Overwrite when buffer full */ + RING_BUFFER_DISCARD, /* Discard when buffer full */ + } mode; + enum { + RING_BUFFER_SPLICE, + RING_BUFFER_MMAP, + RING_BUFFER_READ, /* TODO */ + RING_BUFFER_ITERATOR, + RING_BUFFER_NONE, + } output; + enum { + RING_BUFFER_PAGE, + RING_BUFFER_VMAP, /* TODO */ + RING_BUFFER_STATIC, /* TODO */ + } backend; + enum { + RING_BUFFER_NO_OOPS_CONSISTENCY, + RING_BUFFER_OOPS_CONSISTENCY, + } oops; + enum { + RING_BUFFER_IPI_BARRIER, + RING_BUFFER_NO_IPI_BARRIER, + } ipi; + enum { + RING_BUFFER_WAKEUP_BY_TIMER, /* wake up performed by timer */ + RING_BUFFER_WAKEUP_BY_WRITER, /* + * writer wakes up reader, + * not lock-free + * (takes spinlock). + */ + } wakeup; + /* + * tsc_bits: timestamp bits saved at each record. + * 0 and 64 disable the timestamp compression scheme. + */ + unsigned int tsc_bits; + struct lib_ring_buffer_client_cb cb; +}; + +/* + * ring buffer context + * + * Context passed to lib_ring_buffer_reserve(), lib_ring_buffer_commit(), + * lib_ring_buffer_try_discard_reserve(), lib_ring_buffer_align_ctx() and + * lib_ring_buffer_write(). + */ +struct lib_ring_buffer_ctx { + /* input received by lib_ring_buffer_reserve(), saved here. */ + struct channel *chan; /* channel */ + void *priv; /* client private data */ + size_t data_size; /* size of payload */ + int largest_align; /* + * alignment of the largest element + * in the payload + */ + int cpu; /* processor id */ + + /* output from lib_ring_buffer_reserve() */ + struct lib_ring_buffer *buf; /* + * buffer corresponding to processor id + * for this channel + */ + size_t slot_size; /* size of the reserved slot */ + unsigned long buf_offset; /* offset following the record header */ + unsigned long pre_offset; /* + * Initial offset position _before_ + * the record is written. Positioned + * prior to record header alignment + * padding. + */ + u64 tsc; /* time-stamp counter value */ + unsigned int rflags; /* reservation flags */ + /* Cache backend pages pointer chasing. */ + struct lib_ring_buffer_backend_pages *backend_pages; +}; + +/** + * lib_ring_buffer_ctx_init - initialize ring buffer context + * @ctx: ring buffer context to initialize + * @chan: channel + * @priv: client private data + * @data_size: size of record data payload. It must be greater than 0. + * @largest_align: largest alignment within data payload types + * @cpu: processor id + */ +static inline +void lib_ring_buffer_ctx_init(struct lib_ring_buffer_ctx *ctx, + struct channel *chan, void *priv, + size_t data_size, int largest_align, + int cpu) +{ + ctx->chan = chan; + ctx->priv = priv; + ctx->data_size = data_size; + ctx->largest_align = largest_align; + ctx->cpu = cpu; + ctx->rflags = 0; + ctx->backend_pages = NULL; +} + +/* + * Reservation flags. + * + * RING_BUFFER_RFLAG_FULL_TSC + * + * This flag is passed to record_header_size() and to the primitive used to + * write the record header. It indicates that the full 64-bit time value is + * needed in the record header. If this flag is not set, the record header needs + * only to contain "tsc_bits" bit of time value. + * + * Reservation flags can be added by the client, starting from + * "(RING_BUFFER_FLAGS_END << 0)". It can be used to pass information from + * record_header_size() to lib_ring_buffer_write_record_header(). + */ +#define RING_BUFFER_RFLAG_FULL_TSC (1U << 0) +#define RING_BUFFER_RFLAG_END (1U << 1) + +#ifndef LTTNG_TRACER_CORE_H +#error "lttng-tracer-core.h is needed for RING_BUFFER_ALIGN define" +#endif + +/* + * We need to define RING_BUFFER_ALIGN_ATTR so it is known early at + * compile-time. We have to duplicate the "config->align" information and the + * definition here because config->align is used both in the slow and fast + * paths, but RING_BUFFER_ALIGN_ATTR is only available for the client code. + */ +#ifdef RING_BUFFER_ALIGN + +# define RING_BUFFER_ALIGN_ATTR /* Default arch alignment */ + +/* + * Calculate the offset needed to align the type. + * size_of_type must be non-zero. + */ +static inline +unsigned int lib_ring_buffer_align(size_t align_drift, size_t size_of_type) +{ + return offset_align(align_drift, size_of_type); +} + +#else + +# define RING_BUFFER_ALIGN_ATTR __attribute__((packed)) + +/* + * Calculate the offset needed to align the type. + * size_of_type must be non-zero. + */ +static inline +unsigned int lib_ring_buffer_align(size_t align_drift, size_t size_of_type) +{ + return 0; +} + +#endif + +/** + * lib_ring_buffer_align_ctx - Align context offset on "alignment" + * @ctx: ring buffer context. + */ +static inline +void lib_ring_buffer_align_ctx(struct lib_ring_buffer_ctx *ctx, + size_t alignment) +{ + ctx->buf_offset += lib_ring_buffer_align(ctx->buf_offset, + alignment); +} + +/* + * lib_ring_buffer_check_config() returns 0 on success. + * Used internally to check for valid configurations at channel creation. + */ +static inline +int lib_ring_buffer_check_config(const struct lib_ring_buffer_config *config, + unsigned int switch_timer_interval, + unsigned int read_timer_interval) +{ + if (config->alloc == RING_BUFFER_ALLOC_GLOBAL + && config->sync == RING_BUFFER_SYNC_PER_CPU + && switch_timer_interval) + return -EINVAL; + return 0; +} + +#include + +#endif /* _LIB_RING_BUFFER_CONFIG_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/frontend.h b/ltt/lttng-2.11.0/lib/ringbuffer/frontend.h new file mode 100644 index 000000000000..41382fe816d8 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/frontend.h @@ -0,0 +1,234 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/frontend.h + * + * Ring Buffer Library Synchronization Header (API). + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + * + * See ring_buffer_frontend.c for more information on wait-free algorithms. + */ + +#ifndef _LIB_RING_BUFFER_FRONTEND_H +#define _LIB_RING_BUFFER_FRONTEND_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/* Internal helpers */ +#include + +/* Max ring buffer nesting count, see lib_ring_buffer_get_cpu(). */ +#define RING_BUFFER_MAX_NESTING 4 + +/* Buffer creation/removal and setup operations */ + +/* + * switch_timer_interval is the time interval (in us) to fill sub-buffers with + * padding to let readers get those sub-buffers. Used for live streaming. + * + * read_timer_interval is the time interval (in us) to wake up pending readers. + * + * buf_addr is a pointer the the beginning of the preallocated buffer contiguous + * address mapping. It is used only by RING_BUFFER_STATIC configuration. It can + * be set to NULL for other backends. + */ + +extern +struct channel *channel_create(const struct lib_ring_buffer_config *config, + const char *name, void *priv, + void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval); + +/* + * channel_destroy returns the private data pointer. It finalizes all channel's + * buffers, waits for readers to release all references, and destroys the + * channel. + */ +extern +void *channel_destroy(struct channel *chan); + + +/* Buffer read operations */ + +/* + * Iteration on channel cpumask needs to issue a read barrier to match the write + * barrier in cpu hotplug. It orders the cpumask read before read of per-cpu + * buffer data. The per-cpu buffer is never removed by cpu hotplug; teardown is + * only performed at channel destruction. + */ +#define for_each_channel_cpu(cpu, chan) \ + for ((cpu) = -1; \ + ({ (cpu) = cpumask_next(cpu, (chan)->backend.cpumask); \ + smp_rmb(); (cpu) < nr_cpu_ids; });) + +extern struct lib_ring_buffer *channel_get_ring_buffer( + const struct lib_ring_buffer_config *config, + struct channel *chan, int cpu); +extern int lib_ring_buffer_open_read(struct lib_ring_buffer *buf); +extern void lib_ring_buffer_release_read(struct lib_ring_buffer *buf); + +/* + * Read sequence: snapshot, many get_subbuf/put_subbuf, move_consumer. + */ +extern int lib_ring_buffer_snapshot(struct lib_ring_buffer *buf, + unsigned long *consumed, + unsigned long *produced); +extern int lib_ring_buffer_snapshot_sample_positions( + struct lib_ring_buffer *buf, + unsigned long *consumed, + unsigned long *produced); +extern void lib_ring_buffer_move_consumer(struct lib_ring_buffer *buf, + unsigned long consumed_new); + +extern int lib_ring_buffer_get_subbuf(struct lib_ring_buffer *buf, + unsigned long consumed); +extern void lib_ring_buffer_put_subbuf(struct lib_ring_buffer *buf); + +void lib_ring_buffer_set_quiescent_channel(struct channel *chan); +void lib_ring_buffer_clear_quiescent_channel(struct channel *chan); + +/* + * lib_ring_buffer_get_next_subbuf/lib_ring_buffer_put_next_subbuf are helpers + * to read sub-buffers sequentially. + */ +static inline int lib_ring_buffer_get_next_subbuf(struct lib_ring_buffer *buf) +{ + int ret; + + ret = lib_ring_buffer_snapshot(buf, &buf->cons_snapshot, + &buf->prod_snapshot); + if (ret) + return ret; + ret = lib_ring_buffer_get_subbuf(buf, buf->cons_snapshot); + return ret; +} + +static inline void lib_ring_buffer_put_next_subbuf(struct lib_ring_buffer *buf) +{ + lib_ring_buffer_put_subbuf(buf); + lib_ring_buffer_move_consumer(buf, subbuf_align(buf->cons_snapshot, + buf->backend.chan)); +} + +extern void channel_reset(struct channel *chan); +extern void lib_ring_buffer_reset(struct lib_ring_buffer *buf); + +static inline +unsigned long lib_ring_buffer_get_offset(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->offset); +} + +static inline +unsigned long lib_ring_buffer_get_consumed(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return atomic_long_read(&buf->consumed); +} + +/* + * Must call lib_ring_buffer_is_finalized before reading counters (memory + * ordering enforced with respect to trace teardown). + */ +static inline +int lib_ring_buffer_is_finalized(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + int finalized = LTTNG_READ_ONCE(buf->finalized); + /* + * Read finalized before counters. + */ + smp_rmb(); + return finalized; +} + +static inline +int lib_ring_buffer_channel_is_finalized(const struct channel *chan) +{ + return chan->finalized; +} + +static inline +int lib_ring_buffer_channel_is_disabled(const struct channel *chan) +{ + return atomic_read(&chan->record_disabled); +} + +static inline +unsigned long lib_ring_buffer_get_read_data_size( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return subbuffer_get_read_data_size(config, &buf->backend); +} + +static inline +unsigned long lib_ring_buffer_get_records_count( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->records_count); +} + +static inline +unsigned long lib_ring_buffer_get_records_overrun( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->records_overrun); +} + +static inline +unsigned long lib_ring_buffer_get_records_lost_full( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->records_lost_full); +} + +static inline +unsigned long lib_ring_buffer_get_records_lost_wrap( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->records_lost_wrap); +} + +static inline +unsigned long lib_ring_buffer_get_records_lost_big( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->records_lost_big); +} + +static inline +unsigned long lib_ring_buffer_get_records_read( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return v_read(config, &buf->backend.records_read); +} + +#endif /* _LIB_RING_BUFFER_FRONTEND_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/frontend_api.h b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_api.h new file mode 100644 index 000000000000..21e53ea2b49e --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_api.h @@ -0,0 +1,358 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/frontend_api.h + * + * Ring Buffer Library Synchronization Header (buffer write API). + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + * + * See ring_buffer_frontend.c for more information on wait-free algorithms. + * See linux/ringbuffer/frontend.h for channel allocation and read-side API. + */ + +#ifndef _LIB_RING_BUFFER_FRONTEND_API_H +#define _LIB_RING_BUFFER_FRONTEND_API_H + +#include +#include +#include +#include + +/** + * lib_ring_buffer_get_cpu - Precedes ring buffer reserve/commit. + * + * Disables preemption (acts as a RCU read-side critical section) and keeps a + * ring buffer nesting count as supplementary safety net to ensure tracer client + * code will never trigger an endless recursion. Returns the processor ID on + * success, -EPERM on failure (nesting count too high). + * + * asm volatile and "memory" clobber prevent the compiler from moving + * instructions out of the ring buffer nesting count. This is required to ensure + * that probe side-effects which can cause recursion (e.g. unforeseen traps, + * divisions by 0, ...) are triggered within the incremented nesting count + * section. + */ +static inline +int lib_ring_buffer_get_cpu(const struct lib_ring_buffer_config *config) +{ + int cpu, nesting; + + rcu_read_lock_sched_notrace(); + cpu = smp_processor_id(); + nesting = ++per_cpu(lib_ring_buffer_nesting, cpu); + barrier(); + + if (unlikely(nesting > RING_BUFFER_MAX_NESTING)) { + WARN_ON_ONCE(1); + per_cpu(lib_ring_buffer_nesting, cpu)--; + rcu_read_unlock_sched_notrace(); + return -EPERM; + } else + return cpu; +} + +/** + * lib_ring_buffer_put_cpu - Follows ring buffer reserve/commit. + */ +static inline +void lib_ring_buffer_put_cpu(const struct lib_ring_buffer_config *config) +{ + barrier(); + (*lttng_this_cpu_ptr(&lib_ring_buffer_nesting))--; + rcu_read_unlock_sched_notrace(); +} + +/* + * lib_ring_buffer_try_reserve is called by lib_ring_buffer_reserve(). It is not + * part of the API per se. + * + * returns 0 if reserve ok, or 1 if the slow path must be taken. + */ +static inline +int lib_ring_buffer_try_reserve(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx, + unsigned long *o_begin, unsigned long *o_end, + unsigned long *o_old, size_t *before_hdr_pad) +{ + struct channel *chan = ctx->chan; + struct lib_ring_buffer *buf = ctx->buf; + *o_begin = v_read(config, &buf->offset); + *o_old = *o_begin; + + ctx->tsc = lib_ring_buffer_clock_read(chan); + if ((int64_t) ctx->tsc == -EIO) + return 1; + + /* + * Prefetch cacheline for read because we have to read the previous + * commit counter to increment it and commit seq value to compare it to + * the commit counter. + */ + prefetch(&buf->commit_hot[subbuf_index(*o_begin, chan)]); + + if (last_tsc_overflow(config, buf, ctx->tsc)) + ctx->rflags |= RING_BUFFER_RFLAG_FULL_TSC; + + if (unlikely(subbuf_offset(*o_begin, chan) == 0)) + return 1; + + ctx->slot_size = record_header_size(config, chan, *o_begin, + before_hdr_pad, ctx, client_ctx); + ctx->slot_size += + lib_ring_buffer_align(*o_begin + ctx->slot_size, + ctx->largest_align) + ctx->data_size; + if (unlikely((subbuf_offset(*o_begin, chan) + ctx->slot_size) + > chan->backend.subbuf_size)) + return 1; + + /* + * Record fits in the current buffer and we are not on a switch + * boundary. It's safe to write. + */ + *o_end = *o_begin + ctx->slot_size; + + if (unlikely((subbuf_offset(*o_end, chan)) == 0)) + /* + * The offset_end will fall at the very beginning of the next + * subbuffer. + */ + return 1; + + return 0; +} + +/** + * lib_ring_buffer_reserve - Reserve space in a ring buffer. + * @config: ring buffer instance configuration. + * @ctx: ring buffer context. (input and output) Must be already initialized. + * + * Atomic wait-free slot reservation. The reserved space starts at the context + * "pre_offset". Its length is "slot_size". The associated time-stamp is "tsc". + * + * Return : + * 0 on success. + * -EAGAIN if channel is disabled. + * -ENOSPC if event size is too large for packet. + * -ENOBUFS if there is currently not enough space in buffer for the event. + * -EIO if data cannot be written into the buffer for any other reason. + */ + +static inline +int lib_ring_buffer_reserve(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + struct channel *chan = ctx->chan; + struct lib_ring_buffer *buf; + unsigned long o_begin, o_end, o_old; + size_t before_hdr_pad = 0; + + if (unlikely(atomic_read(&chan->record_disabled))) + return -EAGAIN; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + buf = per_cpu_ptr(chan->backend.buf, ctx->cpu); + else + buf = chan->backend.buf; + if (unlikely(atomic_read(&buf->record_disabled))) + return -EAGAIN; + ctx->buf = buf; + + /* + * Perform retryable operations. + */ + if (unlikely(lib_ring_buffer_try_reserve(config, ctx, client_ctx, &o_begin, + &o_end, &o_old, &before_hdr_pad))) + goto slow_path; + + if (unlikely(v_cmpxchg(config, &ctx->buf->offset, o_old, o_end) + != o_old)) + goto slow_path; + + /* + * Atomically update last_tsc. This update races against concurrent + * atomic updates, but the race will always cause supplementary full TSC + * record headers, never the opposite (missing a full TSC record header + * when it would be needed). + */ + save_last_tsc(config, ctx->buf, ctx->tsc); + + /* + * Push the reader if necessary + */ + lib_ring_buffer_reserve_push_reader(ctx->buf, chan, o_end - 1); + + /* + * Clear noref flag for this subbuffer. + */ + lib_ring_buffer_clear_noref(config, &ctx->buf->backend, + subbuf_index(o_end - 1, chan)); + + ctx->pre_offset = o_begin; + ctx->buf_offset = o_begin + before_hdr_pad; + return 0; +slow_path: + return lib_ring_buffer_reserve_slow(ctx, client_ctx); +} + +/** + * lib_ring_buffer_switch - Perform a sub-buffer switch for a per-cpu buffer. + * @config: ring buffer instance configuration. + * @buf: buffer + * @mode: buffer switch mode (SWITCH_ACTIVE or SWITCH_FLUSH) + * + * This operation is completely reentrant : can be called while tracing is + * active with absolutely no lock held. + * + * Note, however, that as a v_cmpxchg is used for some atomic operations and + * requires to be executed locally for per-CPU buffers, this function must be + * called from the CPU which owns the buffer for a ACTIVE flush, with preemption + * disabled, for RING_BUFFER_SYNC_PER_CPU configuration. + */ +static inline +void lib_ring_buffer_switch(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, enum switch_mode mode) +{ + lib_ring_buffer_switch_slow(buf, mode); +} + +/* See ring_buffer_frontend_api.h for lib_ring_buffer_reserve(). */ + +/** + * lib_ring_buffer_commit - Commit an record. + * @config: ring buffer instance configuration. + * @ctx: ring buffer context. (input arguments only) + * + * Atomic unordered slot commit. Increments the commit count in the + * specified sub-buffer, and delivers it if necessary. + */ +static inline +void lib_ring_buffer_commit(const struct lib_ring_buffer_config *config, + const struct lib_ring_buffer_ctx *ctx) +{ + struct channel *chan = ctx->chan; + struct lib_ring_buffer *buf = ctx->buf; + unsigned long offset_end = ctx->buf_offset; + unsigned long endidx = subbuf_index(offset_end - 1, chan); + unsigned long commit_count; + struct commit_counters_hot *cc_hot = &buf->commit_hot[endidx]; + + /* + * Must count record before incrementing the commit count. + */ + subbuffer_count_record(config, &buf->backend, endidx); + + /* + * Order all writes to buffer before the commit count update that will + * determine that the subbuffer is full. + */ + if (config->ipi == RING_BUFFER_IPI_BARRIER) { + /* + * Must write slot data before incrementing commit count. This + * compiler barrier is upgraded into a smp_mb() by the IPI sent + * by get_subbuf(). + */ + barrier(); + } else + smp_wmb(); + + v_add(config, ctx->slot_size, &cc_hot->cc); + + /* + * commit count read can race with concurrent OOO commit count updates. + * This is only needed for lib_ring_buffer_check_deliver (for + * non-polling delivery only) and for + * lib_ring_buffer_write_commit_counter. The race can only cause the + * counter to be read with the same value more than once, which could + * cause : + * - Multiple delivery for the same sub-buffer (which is handled + * gracefully by the reader code) if the value is for a full + * sub-buffer. It's important that we can never miss a sub-buffer + * delivery. Re-reading the value after the v_add ensures this. + * - Reading a commit_count with a higher value that what was actually + * added to it for the lib_ring_buffer_write_commit_counter call + * (again caused by a concurrent committer). It does not matter, + * because this function is interested in the fact that the commit + * count reaches back the reserve offset for a specific sub-buffer, + * which is completely independent of the order. + */ + commit_count = v_read(config, &cc_hot->cc); + + lib_ring_buffer_check_deliver(config, buf, chan, offset_end - 1, + commit_count, endidx, ctx->tsc); + /* + * Update used size at each commit. It's needed only for extracting + * ring_buffer buffers from vmcore, after crash. + */ + lib_ring_buffer_write_commit_counter(config, buf, chan, + offset_end, commit_count, cc_hot); +} + +/** + * lib_ring_buffer_try_discard_reserve - Try discarding a record. + * @config: ring buffer instance configuration. + * @ctx: ring buffer context. (input arguments only) + * + * Only succeeds if no other record has been written after the record to + * discard. If discard fails, the record must be committed to the buffer. + * + * Returns 0 upon success, -EPERM if the record cannot be discarded. + */ +static inline +int lib_ring_buffer_try_discard_reserve(const struct lib_ring_buffer_config *config, + const struct lib_ring_buffer_ctx *ctx) +{ + struct lib_ring_buffer *buf = ctx->buf; + unsigned long end_offset = ctx->pre_offset + ctx->slot_size; + + /* + * We need to ensure that if the cmpxchg succeeds and discards the + * record, the next record will record a full TSC, because it cannot + * rely on the last_tsc associated with the discarded record to detect + * overflows. The only way to ensure this is to set the last_tsc to 0 + * (assuming no 64-bit TSC overflow), which forces to write a 64-bit + * timestamp in the next record. + * + * Note: if discard fails, we must leave the TSC in the record header. + * It is needed to keep track of TSC overflows for the following + * records. + */ + save_last_tsc(config, buf, 0ULL); + + if (likely(v_cmpxchg(config, &buf->offset, end_offset, ctx->pre_offset) + != end_offset)) + return -EPERM; + else + return 0; +} + +static inline +void channel_record_disable(const struct lib_ring_buffer_config *config, + struct channel *chan) +{ + atomic_inc(&chan->record_disabled); +} + +static inline +void channel_record_enable(const struct lib_ring_buffer_config *config, + struct channel *chan) +{ + atomic_dec(&chan->record_disabled); +} + +static inline +void lib_ring_buffer_record_disable(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + atomic_inc(&buf->record_disabled); +} + +static inline +void lib_ring_buffer_record_enable(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + atomic_dec(&buf->record_disabled); +} + +#endif /* _LIB_RING_BUFFER_FRONTEND_API_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/frontend_internal.h b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_internal.h new file mode 100644 index 000000000000..d02a73d32c2a --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_internal.h @@ -0,0 +1,305 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * linux/ringbuffer/frontend_internal.h + * + * Ring Buffer Library Synchronization Header (internal helpers). + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + * + * See ring_buffer_frontend.c for more information on wait-free algorithms. + */ + +#ifndef _LIB_RING_BUFFER_FRONTEND_INTERNAL_H +#define _LIB_RING_BUFFER_FRONTEND_INTERNAL_H + +#include +#include +#include +#include /* For per-CPU read-side iterator */ + +/* Buffer offset macros */ + +/* buf_trunc mask selects only the buffer number. */ +static inline +unsigned long buf_trunc(unsigned long offset, struct channel *chan) +{ + return offset & ~(chan->backend.buf_size - 1); + +} + +/* Select the buffer number value (counter). */ +static inline +unsigned long buf_trunc_val(unsigned long offset, struct channel *chan) +{ + return buf_trunc(offset, chan) >> chan->backend.buf_size_order; +} + +/* buf_offset mask selects only the offset within the current buffer. */ +static inline +unsigned long buf_offset(unsigned long offset, struct channel *chan) +{ + return offset & (chan->backend.buf_size - 1); +} + +/* subbuf_offset mask selects the offset within the current subbuffer. */ +static inline +unsigned long subbuf_offset(unsigned long offset, struct channel *chan) +{ + return offset & (chan->backend.subbuf_size - 1); +} + +/* subbuf_trunc mask selects the subbuffer number. */ +static inline +unsigned long subbuf_trunc(unsigned long offset, struct channel *chan) +{ + return offset & ~(chan->backend.subbuf_size - 1); +} + +/* subbuf_align aligns the offset to the next subbuffer. */ +static inline +unsigned long subbuf_align(unsigned long offset, struct channel *chan) +{ + return (offset + chan->backend.subbuf_size) + & ~(chan->backend.subbuf_size - 1); +} + +/* subbuf_index returns the index of the current subbuffer within the buffer. */ +static inline +unsigned long subbuf_index(unsigned long offset, struct channel *chan) +{ + return buf_offset(offset, chan) >> chan->backend.subbuf_size_order; +} + +/* + * Last TSC comparison functions. Check if the current TSC overflows tsc_bits + * bits from the last TSC read. When overflows are detected, the full 64-bit + * timestamp counter should be written in the record header. Reads and writes + * last_tsc atomically. + */ + +#if (BITS_PER_LONG == 32) +static inline +void save_last_tsc(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, u64 tsc) +{ + if (config->tsc_bits == 0 || config->tsc_bits == 64) + return; + + /* + * Ensure the compiler performs this update in a single instruction. + */ + v_set(config, &buf->last_tsc, (unsigned long)(tsc >> config->tsc_bits)); +} + +static inline +int last_tsc_overflow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, u64 tsc) +{ + unsigned long tsc_shifted; + + if (config->tsc_bits == 0 || config->tsc_bits == 64) + return 0; + + tsc_shifted = (unsigned long)(tsc >> config->tsc_bits); + if (unlikely(tsc_shifted + - (unsigned long)v_read(config, &buf->last_tsc))) + return 1; + else + return 0; +} +#else +static inline +void save_last_tsc(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, u64 tsc) +{ + if (config->tsc_bits == 0 || config->tsc_bits == 64) + return; + + v_set(config, &buf->last_tsc, (unsigned long)tsc); +} + +static inline +int last_tsc_overflow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, u64 tsc) +{ + if (config->tsc_bits == 0 || config->tsc_bits == 64) + return 0; + + if (unlikely((tsc - v_read(config, &buf->last_tsc)) + >> config->tsc_bits)) + return 1; + else + return 0; +} +#endif + +extern +int lib_ring_buffer_reserve_slow(struct lib_ring_buffer_ctx *ctx, + void *client_ctx); + +extern +void lib_ring_buffer_switch_slow(struct lib_ring_buffer *buf, + enum switch_mode mode); + +extern +void lib_ring_buffer_check_deliver_slow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long offset, + unsigned long commit_count, + unsigned long idx, + u64 tsc); + +extern +void lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf); +extern +void lib_ring_buffer_switch_remote_empty(struct lib_ring_buffer *buf); + +/* Buffer write helpers */ + +static inline +void lib_ring_buffer_reserve_push_reader(struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long offset) +{ + unsigned long consumed_old, consumed_new; + + do { + consumed_old = atomic_long_read(&buf->consumed); + /* + * If buffer is in overwrite mode, push the reader consumed + * count if the write position has reached it and we are not + * at the first iteration (don't push the reader farther than + * the writer). This operation can be done concurrently by many + * writers in the same buffer, the writer being at the farthest + * write position sub-buffer index in the buffer being the one + * which will win this loop. + */ + if (unlikely(subbuf_trunc(offset, chan) + - subbuf_trunc(consumed_old, chan) + >= chan->backend.buf_size)) + consumed_new = subbuf_align(consumed_old, chan); + else + return; + } while (unlikely(atomic_long_cmpxchg(&buf->consumed, consumed_old, + consumed_new) != consumed_old)); +} + +static inline +int lib_ring_buffer_pending_data(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan) +{ + return !!subbuf_offset(v_read(config, &buf->offset), chan); +} + +static inline +unsigned long lib_ring_buffer_get_data_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + unsigned long idx) +{ + return subbuffer_get_data_size(config, &buf->backend, idx); +} + +/* + * Check if all space reservation in a buffer have been committed. This helps + * knowing if an execution context is nested (for per-cpu buffers only). + * This is a very specific ftrace use-case, so we keep this as "internal" API. + */ +static inline +int lib_ring_buffer_reserve_committed(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan) +{ + unsigned long offset, idx, commit_count; + + CHAN_WARN_ON(chan, config->alloc != RING_BUFFER_ALLOC_PER_CPU); + CHAN_WARN_ON(chan, config->sync != RING_BUFFER_SYNC_PER_CPU); + + /* + * Read offset and commit count in a loop so they are both read + * atomically wrt interrupts. By deal with interrupt concurrency by + * restarting both reads if the offset has been pushed. Note that given + * we only have to deal with interrupt concurrency here, an interrupt + * modifying the commit count will also modify "offset", so it is safe + * to only check for offset modifications. + */ + do { + offset = v_read(config, &buf->offset); + idx = subbuf_index(offset, chan); + commit_count = v_read(config, &buf->commit_hot[idx].cc); + } while (offset != v_read(config, &buf->offset)); + + return ((buf_trunc(offset, chan) >> chan->backend.num_subbuf_order) + - (commit_count & chan->commit_count_mask) == 0); +} + +/* + * Receive end of subbuffer TSC as parameter. It has been read in the + * space reservation loop of either reserve or switch, which ensures it + * progresses monotonically with event records in the buffer. Therefore, + * it ensures that the end timestamp of a subbuffer is <= begin + * timestamp of the following subbuffers. + */ +static inline +void lib_ring_buffer_check_deliver(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long offset, + unsigned long commit_count, + unsigned long idx, + u64 tsc) +{ + unsigned long old_commit_count = commit_count + - chan->backend.subbuf_size; + + /* Check if all commits have been done */ + if (unlikely((buf_trunc(offset, chan) >> chan->backend.num_subbuf_order) + - (old_commit_count & chan->commit_count_mask) == 0)) + lib_ring_buffer_check_deliver_slow(config, buf, chan, offset, + commit_count, idx, tsc); +} + +/* + * lib_ring_buffer_write_commit_counter + * + * For flight recording. must be called after commit. + * This function increments the subbuffer's commit_seq counter each time the + * commit count reaches back the reserve offset (modulo subbuffer size). It is + * useful for crash dump. + */ +static inline +void lib_ring_buffer_write_commit_counter(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long buf_offset, + unsigned long commit_count, + struct commit_counters_hot *cc_hot) +{ + unsigned long commit_seq_old; + + if (config->oops != RING_BUFFER_OOPS_CONSISTENCY) + return; + + /* + * subbuf_offset includes commit_count_mask. We can simply + * compare the offsets within the subbuffer without caring about + * buffer full/empty mismatch because offset is never zero here + * (subbuffer header and record headers have non-zero length). + */ + if (unlikely(subbuf_offset(buf_offset - commit_count, chan))) + return; + + commit_seq_old = v_read(config, &cc_hot->seq); + if (likely((long) (commit_seq_old - commit_count) < 0)) + v_set(config, &cc_hot->seq, commit_count); +} + +extern int lib_ring_buffer_create(struct lib_ring_buffer *buf, + struct channel_backend *chanb, int cpu); +extern void lib_ring_buffer_free(struct lib_ring_buffer *buf); + +/* Keep track of trap nesting inside ring buffer code */ +DECLARE_PER_CPU(unsigned int, lib_ring_buffer_nesting); + +#endif /* _LIB_RING_BUFFER_FRONTEND_INTERNAL_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/frontend_types.h b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_types.h new file mode 100644 index 000000000000..94613189516b --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/frontend_types.h @@ -0,0 +1,196 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/frontend_types.h + * + * Ring Buffer Library Synchronization Header (types). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * + * See ring_buffer_frontend.c for more information on wait-free algorithms. + */ + +#ifndef _LIB_RING_BUFFER_FRONTEND_TYPES_H +#define _LIB_RING_BUFFER_FRONTEND_TYPES_H + +#include +#include +#include +#include +#include /* For per-CPU read-side iterator */ +#include + +/* + * A switch is done during tracing or as a final flush after tracing (so it + * won't write in the new sub-buffer). + */ +enum switch_mode { SWITCH_ACTIVE, SWITCH_FLUSH }; + +/* channel-level read-side iterator */ +struct channel_iter { + /* Prio heap of buffers. Lowest timestamps at the top. */ + struct lttng_ptr_heap heap; /* Heap of struct lib_ring_buffer ptrs */ + struct list_head empty_head; /* Empty buffers linked-list head */ + int read_open; /* Opened for reading ? */ + u64 last_qs; /* Last quiescent state timestamp */ + u64 last_timestamp; /* Last timestamp (for WARN_ON) */ + int last_cpu; /* Last timestamp cpu */ + /* + * read() file operation state. + */ + unsigned long len_left; +}; + +/* channel: collection of per-cpu ring buffers. */ +struct channel { + atomic_t record_disabled; + unsigned long commit_count_mask; /* + * Commit count mask, removing + * the MSBs corresponding to + * bits used to represent the + * subbuffer index. + */ + + struct channel_backend backend; /* Associated backend */ + + unsigned long switch_timer_interval; /* Buffer flush (jiffies) */ + unsigned long read_timer_interval; /* Reader wakeup (jiffies) */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + struct lttng_cpuhp_node cpuhp_prepare; + struct lttng_cpuhp_node cpuhp_online; + struct lttng_cpuhp_node cpuhp_iter_online; +#else + struct notifier_block cpu_hp_notifier; /* CPU hotplug notifier */ + struct notifier_block hp_iter_notifier; /* hotplug iterator notifier */ + unsigned int cpu_hp_enable:1; /* Enable CPU hotplug notif. */ + unsigned int hp_iter_enable:1; /* Enable hp iter notif. */ +#endif + struct notifier_block tick_nohz_notifier; /* CPU nohz notifier */ + wait_queue_head_t read_wait; /* reader wait queue */ + wait_queue_head_t hp_wait; /* CPU hotplug wait queue */ + int finalized; /* Has channel been finalized */ + struct channel_iter iter; /* Channel read-side iterator */ + struct kref ref; /* Reference count */ +}; + +/* Per-subbuffer commit counters used on the hot path */ +struct commit_counters_hot { + union v_atomic cc; /* Commit counter */ + union v_atomic seq; /* Consecutive commits */ +}; + +/* Per-subbuffer commit counters used only on cold paths */ +struct commit_counters_cold { + union v_atomic cc_sb; /* Incremented _once_ at sb switch */ +}; + +/* Per-buffer read iterator */ +struct lib_ring_buffer_iter { + u64 timestamp; /* Current record timestamp */ + size_t header_len; /* Current record header length */ + size_t payload_len; /* Current record payload length */ + + struct list_head empty_node; /* Linked list of empty buffers */ + unsigned long consumed, read_offset, data_size; + enum { + ITER_GET_SUBBUF = 0, + ITER_TEST_RECORD, + ITER_NEXT_RECORD, + ITER_PUT_SUBBUF, + } state; + unsigned int allocated:1; + unsigned int read_open:1; /* Opened for reading ? */ +}; + +/* ring buffer state */ +struct lib_ring_buffer { + /* First 32 bytes cache-hot cacheline */ + union v_atomic offset; /* Current offset in the buffer */ + struct commit_counters_hot *commit_hot; + /* Commit count per sub-buffer */ + atomic_long_t consumed; /* + * Current offset in the buffer + * standard atomic access (shared) + */ + atomic_t record_disabled; + /* End of first 32 bytes cacheline */ + union v_atomic last_tsc; /* + * Last timestamp written in the buffer. + */ + + struct lib_ring_buffer_backend backend; /* Associated backend */ + + struct commit_counters_cold *commit_cold; + /* Commit count per sub-buffer */ + u64 *ts_end; /* + * timestamp_end per sub-buffer. + * Time is sampled by the + * switch_*_end() callbacks which + * are the last space reservation + * performed in the sub-buffer + * before it can be fully + * committed and delivered. This + * time value is then read by + * the deliver callback, + * performed by the last commit + * before the buffer becomes + * readable. + */ + atomic_long_t active_readers; /* + * Active readers count + * standard atomic access (shared) + */ + /* Dropped records */ + union v_atomic records_lost_full; /* Buffer full */ + union v_atomic records_lost_wrap; /* Nested wrap-around */ + union v_atomic records_lost_big; /* Events too big */ + union v_atomic records_count; /* Number of records written */ + union v_atomic records_overrun; /* Number of overwritten records */ + wait_queue_head_t read_wait; /* reader buffer-level wait queue */ + wait_queue_head_t write_wait; /* writer buffer-level wait queue (for metadata only) */ + int finalized; /* buffer has been finalized */ + struct timer_list switch_timer; /* timer for periodical switch */ + struct timer_list read_timer; /* timer for read poll */ + raw_spinlock_t raw_tick_nohz_spinlock; /* nohz entry lock/trylock */ + struct lib_ring_buffer_iter iter; /* read-side iterator */ + unsigned long get_subbuf_consumed; /* Read-side consumed */ + unsigned long prod_snapshot; /* Producer count snapshot */ + unsigned long cons_snapshot; /* Consumer count snapshot */ + unsigned int get_subbuf:1, /* Sub-buffer being held by reader */ + switch_timer_enabled:1, /* Protected by ring_buffer_nohz_lock */ + read_timer_enabled:1, /* Protected by ring_buffer_nohz_lock */ + quiescent:1; +}; + +static inline +void *channel_get_private(struct channel *chan) +{ + return chan->backend.priv; +} + +void lib_ring_buffer_lost_event_too_big(struct channel *chan); + +/* + * Issue warnings and disable channels upon internal error. + * Can receive struct lib_ring_buffer or struct lib_ring_buffer_backend + * parameters. + */ +#define CHAN_WARN_ON(c, cond) \ + ({ \ + struct channel *__chan; \ + int _____ret = unlikely(cond); \ + if (_____ret) { \ + if (__same_type(*(c), struct channel_backend)) \ + __chan = container_of((void *) (c), \ + struct channel, \ + backend); \ + else if (__same_type(*(c), struct channel)) \ + __chan = (void *) (c); \ + else \ + BUG_ON(1); \ + atomic_inc(&__chan->record_disabled); \ + WARN_ON(1); \ + } \ + _____ret; \ + }) + +#endif /* _LIB_RING_BUFFER_FRONTEND_TYPES_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/iterator.h b/ltt/lttng-2.11.0/lib/ringbuffer/iterator.h new file mode 100644 index 000000000000..6c59360c275d --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/iterator.h @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/iterator.h + * + * Ring buffer and channel iterators. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_ITERATOR_H +#define _LIB_RING_BUFFER_ITERATOR_H + +#include +#include +#include + +/* + * lib_ring_buffer_get_next_record advances the buffer read position to the next + * record. It returns either the size of the next record, -EAGAIN if there is + * currently no data available, or -ENODATA if no data is available and buffer + * is finalized. + */ +extern ssize_t lib_ring_buffer_get_next_record(struct channel *chan, + struct lib_ring_buffer *buf); + +/* + * channel_get_next_record advances the buffer read position to the next record. + * It returns either the size of the next record, -EAGAIN if there is currently + * no data available, or -ENODATA if no data is available and buffer is + * finalized. + * Returns the current buffer in ret_buf. + */ +extern ssize_t channel_get_next_record(struct channel *chan, + struct lib_ring_buffer **ret_buf); + +/** + * read_current_record - copy the buffer current record into dest. + * @buf: ring buffer + * @dest: destination where the record should be copied + * + * dest should be large enough to contain the record. Returns the number of + * bytes copied. + */ +static inline size_t read_current_record(struct lib_ring_buffer *buf, void *dest) +{ + return lib_ring_buffer_read(&buf->backend, buf->iter.read_offset, + dest, buf->iter.payload_len); +} + +extern int lib_ring_buffer_iterator_open(struct lib_ring_buffer *buf); +extern void lib_ring_buffer_iterator_release(struct lib_ring_buffer *buf); +extern int channel_iterator_open(struct channel *chan); +extern void channel_iterator_release(struct channel *chan); + +extern const struct file_operations channel_payload_file_operations; +extern const struct file_operations lib_ring_buffer_payload_file_operations; + +/* + * Used internally. + */ +int channel_iterator_init(struct channel *chan); +void channel_iterator_unregister_notifiers(struct channel *chan); +void channel_iterator_free(struct channel *chan); +void channel_iterator_reset(struct channel *chan); +void lib_ring_buffer_iterator_reset(struct lib_ring_buffer *buf); + +#endif /* _LIB_RING_BUFFER_ITERATOR_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/nohz.h b/ltt/lttng-2.11.0/lib/ringbuffer/nohz.h new file mode 100644 index 000000000000..6a7d2247190f --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/nohz.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/nohz.h + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_NOHZ_H +#define _LIB_RING_BUFFER_NOHZ_H + +#ifdef CONFIG_LIB_RING_BUFFER +void lib_ring_buffer_tick_nohz_flush(void); +void lib_ring_buffer_tick_nohz_stop(void); +void lib_ring_buffer_tick_nohz_restart(void); +#else +static inline void lib_ring_buffer_tick_nohz_flush(void) +{ +} + +static inline void lib_ring_buffer_tick_nohz_stop(void) +{ +} + +static inline void lib_ring_buffer_tick_nohz_restart(void) +{ +} +#endif + +#endif /* _LIB_RING_BUFFER_NOHZ_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_backend.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_backend.c new file mode 100644 index 000000000000..d232b7f23e09 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_backend.c @@ -0,0 +1,1124 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * ring_buffer_backend.c + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include + +/** + * lib_ring_buffer_backend_allocate - allocate a channel buffer + * @config: ring buffer instance configuration + * @buf: the buffer struct + * @size: total size of the buffer + * @num_subbuf: number of subbuffers + * @extra_reader_sb: need extra subbuffer for reader + */ +static +int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_backend *bufb, + size_t size, size_t num_subbuf, + int extra_reader_sb) +{ + struct channel_backend *chanb = &bufb->chan->backend; + unsigned long j, num_pages, num_pages_per_subbuf, page_idx = 0; + unsigned long subbuf_size, mmap_offset = 0; + unsigned long num_subbuf_alloc; + struct page **pages; + unsigned long i; + + num_pages = size >> PAGE_SHIFT; + + /* + * Verify that there is enough free pages available on the system for + * the current allocation request. + * wrapper_check_enough_free_pages uses si_mem_available() if available + * and returns if there should be enough free pages based on the + * current estimate. + */ + if (!wrapper_check_enough_free_pages(num_pages)) + goto not_enough_pages; + + /* + * Set the current user thread as the first target of the OOM killer. + * If the estimate received by si_mem_available() was off, and we do + * end up running out of memory because of this buffer allocation, we + * want to kill the offending app first. + */ + wrapper_set_current_oom_origin(); + + num_pages_per_subbuf = num_pages >> get_count_order(num_subbuf); + subbuf_size = chanb->subbuf_size; + num_subbuf_alloc = num_subbuf; + + if (extra_reader_sb) { + num_pages += num_pages_per_subbuf; /* Add pages for reader */ + num_subbuf_alloc++; + } + + pages = vmalloc_node(ALIGN(sizeof(*pages) * num_pages, + 1 << INTERNODE_CACHE_SHIFT), + cpu_to_node(max(bufb->cpu, 0))); + if (unlikely(!pages)) + goto pages_error; + + bufb->array = lttng_kvmalloc_node(ALIGN(sizeof(*bufb->array) + * num_subbuf_alloc, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(bufb->cpu, 0))); + if (unlikely(!bufb->array)) + goto array_error; + + for (i = 0; i < num_pages; i++) { + pages[i] = alloc_pages_node(cpu_to_node(max(bufb->cpu, 0)), + GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, 0); + if (unlikely(!pages[i])) + goto depopulate; + } + bufb->num_pages_per_subbuf = num_pages_per_subbuf; + + /* Allocate backend pages array elements */ + for (i = 0; i < num_subbuf_alloc; i++) { + bufb->array[i] = + lttng_kvzalloc_node(ALIGN( + sizeof(struct lib_ring_buffer_backend_pages) + + sizeof(struct lib_ring_buffer_backend_page) + * num_pages_per_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(bufb->cpu, 0))); + if (!bufb->array[i]) + goto free_array; + } + + /* Allocate write-side subbuffer table */ + bufb->buf_wsb = lttng_kvzalloc_node(ALIGN( + sizeof(struct lib_ring_buffer_backend_subbuffer) + * num_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(bufb->cpu, 0))); + if (unlikely(!bufb->buf_wsb)) + goto free_array; + + for (i = 0; i < num_subbuf; i++) + bufb->buf_wsb[i].id = subbuffer_id(config, 0, 1, i); + + /* Assign read-side subbuffer table */ + if (extra_reader_sb) + bufb->buf_rsb.id = subbuffer_id(config, 0, 1, + num_subbuf_alloc - 1); + else + bufb->buf_rsb.id = subbuffer_id(config, 0, 1, 0); + + /* Allocate subbuffer packet counter table */ + bufb->buf_cnt = lttng_kvzalloc_node(ALIGN( + sizeof(struct lib_ring_buffer_backend_counts) + * num_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(bufb->cpu, 0))); + if (unlikely(!bufb->buf_cnt)) + goto free_wsb; + + /* Assign pages to page index */ + for (i = 0; i < num_subbuf_alloc; i++) { + for (j = 0; j < num_pages_per_subbuf; j++) { + CHAN_WARN_ON(chanb, page_idx > num_pages); + bufb->array[i]->p[j].virt = page_address(pages[page_idx]); + bufb->array[i]->p[j].pfn = page_to_pfn(pages[page_idx]); + page_idx++; + } + if (config->output == RING_BUFFER_MMAP) { + bufb->array[i]->mmap_offset = mmap_offset; + mmap_offset += subbuf_size; + } + } + + /* + * If kmalloc ever uses vmalloc underneath, make sure the buffer pages + * will not fault. + */ + wrapper_vmalloc_sync_mappings(); + wrapper_clear_current_oom_origin(); + vfree(pages); + return 0; + +free_wsb: + lttng_kvfree(bufb->buf_wsb); +free_array: + for (i = 0; (i < num_subbuf_alloc && bufb->array[i]); i++) + lttng_kvfree(bufb->array[i]); +depopulate: + /* Free all allocated pages */ + for (i = 0; (i < num_pages && pages[i]); i++) + __free_page(pages[i]); + lttng_kvfree(bufb->array); +array_error: + vfree(pages); +pages_error: + wrapper_clear_current_oom_origin(); +not_enough_pages: + return -ENOMEM; +} + +int lib_ring_buffer_backend_create(struct lib_ring_buffer_backend *bufb, + struct channel_backend *chanb, int cpu) +{ + const struct lib_ring_buffer_config *config = &chanb->config; + + bufb->chan = container_of(chanb, struct channel, backend); + bufb->cpu = cpu; + + return lib_ring_buffer_backend_allocate(config, bufb, chanb->buf_size, + chanb->num_subbuf, + chanb->extra_reader_sb); +} + +void lib_ring_buffer_backend_free(struct lib_ring_buffer_backend *bufb) +{ + struct channel_backend *chanb = &bufb->chan->backend; + unsigned long i, j, num_subbuf_alloc; + + num_subbuf_alloc = chanb->num_subbuf; + if (chanb->extra_reader_sb) + num_subbuf_alloc++; + + lttng_kvfree(bufb->buf_wsb); + lttng_kvfree(bufb->buf_cnt); + for (i = 0; i < num_subbuf_alloc; i++) { + for (j = 0; j < bufb->num_pages_per_subbuf; j++) + __free_page(pfn_to_page(bufb->array[i]->p[j].pfn)); + lttng_kvfree(bufb->array[i]); + } + lttng_kvfree(bufb->array); + bufb->allocated = 0; +} + +void lib_ring_buffer_backend_reset(struct lib_ring_buffer_backend *bufb) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + unsigned long num_subbuf_alloc; + unsigned int i; + + num_subbuf_alloc = chanb->num_subbuf; + if (chanb->extra_reader_sb) + num_subbuf_alloc++; + + for (i = 0; i < chanb->num_subbuf; i++) + bufb->buf_wsb[i].id = subbuffer_id(config, 0, 1, i); + if (chanb->extra_reader_sb) + bufb->buf_rsb.id = subbuffer_id(config, 0, 1, + num_subbuf_alloc - 1); + else + bufb->buf_rsb.id = subbuffer_id(config, 0, 1, 0); + + for (i = 0; i < num_subbuf_alloc; i++) { + /* Don't reset mmap_offset */ + v_set(config, &bufb->array[i]->records_commit, 0); + v_set(config, &bufb->array[i]->records_unread, 0); + bufb->array[i]->data_size = 0; + /* Don't reset backend page and virt addresses */ + } + /* Don't reset num_pages_per_subbuf, cpu, allocated */ + v_set(config, &bufb->records_read, 0); +} + +/* + * The frontend is responsible for also calling ring_buffer_backend_reset for + * each buffer when calling channel_backend_reset. + */ +void channel_backend_reset(struct channel_backend *chanb) +{ + struct channel *chan = container_of(chanb, struct channel, backend); + const struct lib_ring_buffer_config *config = &chanb->config; + + /* + * Don't reset buf_size, subbuf_size, subbuf_size_order, + * num_subbuf_order, buf_size_order, extra_reader_sb, num_subbuf, + * priv, notifiers, config, cpumask and name. + */ + chanb->start_tsc = config->cb.ring_buffer_clock_read(chan); +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +/* + * No need to implement a "dead" callback to do a buffer switch here, + * because it will happen when tracing is stopped, or will be done by + * switch timer CPU DEAD callback. + * We don't free buffers when CPU go away, because it would make trace + * data vanish, which is unwanted. + */ +int lttng_cpuhp_rb_backend_prepare(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct channel_backend *chanb = container_of(node, + struct channel_backend, cpuhp_prepare); + const struct lib_ring_buffer_config *config = &chanb->config; + struct lib_ring_buffer *buf; + int ret; + + CHAN_WARN_ON(chanb, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + buf = per_cpu_ptr(chanb->buf, cpu); + ret = lib_ring_buffer_create(buf, chanb, cpu); + if (ret) { + printk(KERN_ERR + "ring_buffer_cpu_hp_callback: cpu %d " + "buffer creation failed\n", cpu); + return ret; + } + return 0; +} +EXPORT_SYMBOL_GPL(lttng_cpuhp_rb_backend_prepare); + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#ifdef CONFIG_HOTPLUG_CPU + +/** + * lib_ring_buffer_cpu_hp_callback - CPU hotplug callback + * @nb: notifier block + * @action: hotplug action to take + * @hcpu: CPU number + * + * Returns the success/failure of the operation. (%NOTIFY_OK, %NOTIFY_BAD) + */ +static +int lib_ring_buffer_cpu_hp_callback(struct notifier_block *nb, + unsigned long action, + void *hcpu) +{ + unsigned int cpu = (unsigned long)hcpu; + struct channel_backend *chanb = container_of(nb, struct channel_backend, + cpu_hp_notifier); + const struct lib_ring_buffer_config *config = &chanb->config; + struct lib_ring_buffer *buf; + int ret; + + CHAN_WARN_ON(chanb, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + switch (action) { + case CPU_UP_PREPARE: + case CPU_UP_PREPARE_FROZEN: + buf = per_cpu_ptr(chanb->buf, cpu); + ret = lib_ring_buffer_create(buf, chanb, cpu); + if (ret) { + printk(KERN_ERR + "ring_buffer_cpu_hp_callback: cpu %d " + "buffer creation failed\n", cpu); + return NOTIFY_BAD; + } + break; + case CPU_DEAD: + case CPU_DEAD_FROZEN: + /* No need to do a buffer switch here, because it will happen + * when tracing is stopped, or will be done by switch timer CPU + * DEAD callback. */ + break; + } + return NOTIFY_OK; +} + +#endif + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +/** + * channel_backend_init - initialize a channel backend + * @chanb: channel backend + * @name: channel name + * @config: client ring buffer configuration + * @priv: client private data + * @parent: dentry of parent directory, %NULL for root directory + * @subbuf_size: size of sub-buffers (> PAGE_SIZE, power of 2) + * @num_subbuf: number of sub-buffers (power of 2) + * + * Returns channel pointer if successful, %NULL otherwise. + * + * Creates per-cpu channel buffers using the sizes and attributes + * specified. The created channel buffer files will be named + * name_0...name_N-1. File permissions will be %S_IRUSR. + * + * Called with CPU hotplug disabled. + */ +int channel_backend_init(struct channel_backend *chanb, + const char *name, + const struct lib_ring_buffer_config *config, + void *priv, size_t subbuf_size, size_t num_subbuf) +{ + struct channel *chan = container_of(chanb, struct channel, backend); + unsigned int i; + int ret; + + if (!name) + return -EPERM; + + /* Check that the subbuffer size is larger than a page. */ + if (subbuf_size < PAGE_SIZE) + return -EINVAL; + + /* + * Make sure the number of subbuffers and subbuffer size are + * power of 2 and nonzero. + */ + if (!subbuf_size || (subbuf_size & (subbuf_size - 1))) + return -EINVAL; + if (!num_subbuf || (num_subbuf & (num_subbuf - 1))) + return -EINVAL; + /* + * Overwrite mode buffers require at least 2 subbuffers per + * buffer. + */ + if (config->mode == RING_BUFFER_OVERWRITE && num_subbuf < 2) + return -EINVAL; + + ret = subbuffer_id_check_index(config, num_subbuf); + if (ret) + return ret; + + chanb->priv = priv; + chanb->buf_size = num_subbuf * subbuf_size; + chanb->subbuf_size = subbuf_size; + chanb->buf_size_order = get_count_order(chanb->buf_size); + chanb->subbuf_size_order = get_count_order(subbuf_size); + chanb->num_subbuf_order = get_count_order(num_subbuf); + chanb->extra_reader_sb = + (config->mode == RING_BUFFER_OVERWRITE) ? 1 : 0; + chanb->num_subbuf = num_subbuf; + strlcpy(chanb->name, name, NAME_MAX); + memcpy(&chanb->config, config, sizeof(chanb->config)); + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + if (!zalloc_cpumask_var(&chanb->cpumask, GFP_KERNEL)) + return -ENOMEM; + } + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + /* Allocating the buffer per-cpu structures */ + chanb->buf = alloc_percpu(struct lib_ring_buffer); + if (!chanb->buf) + goto free_cpumask; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + chanb->cpuhp_prepare.component = LTTNG_RING_BUFFER_BACKEND; + ret = cpuhp_state_add_instance(lttng_rb_hp_prepare, + &chanb->cpuhp_prepare.node); + if (ret) + goto free_bufs; +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + + { + /* + * In case of non-hotplug cpu, if the ring-buffer is allocated + * in early initcall, it will not be notified of secondary cpus. + * In that off case, we need to allocate for all possible cpus. + */ +#ifdef CONFIG_HOTPLUG_CPU + /* + * buf->backend.allocated test takes care of concurrent CPU + * hotplug. + * Priority higher than frontend, so we create the ring buffer + * before we start the timer. + */ + chanb->cpu_hp_notifier.notifier_call = + lib_ring_buffer_cpu_hp_callback; + chanb->cpu_hp_notifier.priority = 5; + register_hotcpu_notifier(&chanb->cpu_hp_notifier); + + get_online_cpus(); + for_each_online_cpu(i) { + ret = lib_ring_buffer_create(per_cpu_ptr(chanb->buf, i), + chanb, i); + if (ret) + goto free_bufs; /* cpu hotplug locked */ + } + put_online_cpus(); +#else + for_each_possible_cpu(i) { + ret = lib_ring_buffer_create(per_cpu_ptr(chanb->buf, i), + chanb, i); + if (ret) + goto free_bufs; + } +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + } else { + chanb->buf = kzalloc(sizeof(struct lib_ring_buffer), GFP_KERNEL); + if (!chanb->buf) + goto free_cpumask; + ret = lib_ring_buffer_create(chanb->buf, chanb, -1); + if (ret) + goto free_bufs; + } + chanb->start_tsc = config->cb.ring_buffer_clock_read(chan); + + return 0; + +free_bufs: + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + /* + * Teardown of lttng_rb_hp_prepare instance + * on "add" error is handled within cpu hotplug, + * no teardown to do from the caller. + */ +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +#ifdef CONFIG_HOTPLUG_CPU + put_online_cpus(); + unregister_hotcpu_notifier(&chanb->cpu_hp_notifier); +#endif +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + for_each_possible_cpu(i) { + struct lib_ring_buffer *buf = + per_cpu_ptr(chanb->buf, i); + + if (!buf->backend.allocated) + continue; + lib_ring_buffer_free(buf); + } + free_percpu(chanb->buf); + } else + kfree(chanb->buf); +free_cpumask: + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + free_cpumask_var(chanb->cpumask); + return -ENOMEM; +} + +/** + * channel_backend_unregister_notifiers - unregister notifiers + * @chan: the channel + * + * Holds CPU hotplug. + */ +void channel_backend_unregister_notifiers(struct channel_backend *chanb) +{ + const struct lib_ring_buffer_config *config = &chanb->config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + int ret; + + ret = cpuhp_state_remove_instance(lttng_rb_hp_prepare, + &chanb->cpuhp_prepare.node); + WARN_ON(ret); +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + unregister_hotcpu_notifier(&chanb->cpu_hp_notifier); +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + } +} + +/** + * channel_backend_free - destroy the channel + * @chan: the channel + * + * Destroy all channel buffers and frees the channel. + */ +void channel_backend_free(struct channel_backend *chanb) +{ + const struct lib_ring_buffer_config *config = &chanb->config; + unsigned int i; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + for_each_possible_cpu(i) { + struct lib_ring_buffer *buf = per_cpu_ptr(chanb->buf, i); + + if (!buf->backend.allocated) + continue; + lib_ring_buffer_free(buf); + } + free_cpumask_var(chanb->cpumask); + free_percpu(chanb->buf); + } else { + struct lib_ring_buffer *buf = chanb->buf; + + CHAN_WARN_ON(chanb, !buf->backend.allocated); + lib_ring_buffer_free(buf); + kfree(buf); + } +} + +/** + * lib_ring_buffer_write - write data to a ring_buffer buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @src : source address + * @len : length to write + * @pagecpy : page size copied so far + */ +void _lib_ring_buffer_write(struct lib_ring_buffer_backend *bufb, size_t offset, + const void *src, size_t len, size_t pagecpy) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + + do { + len -= pagecpy; + src += pagecpy; + offset += pagecpy; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + + /* + * Underlying layer should never ask for writes across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + lib_ring_buffer_do_copy(config, + rpages->p[index].virt + + (offset & ~PAGE_MASK), + src, pagecpy); + } while (unlikely(len != pagecpy)); +} +EXPORT_SYMBOL_GPL(_lib_ring_buffer_write); + + +/** + * lib_ring_buffer_memset - write len bytes of c to a ring_buffer buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @c : the byte to write + * @len : length to write + * @pagecpy : page size copied so far + */ +void _lib_ring_buffer_memset(struct lib_ring_buffer_backend *bufb, + size_t offset, + int c, size_t len, size_t pagecpy) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + + do { + len -= pagecpy; + offset += pagecpy; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + + /* + * Underlying layer should never ask for writes across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + lib_ring_buffer_do_memset(rpages->p[index].virt + + (offset & ~PAGE_MASK), + c, pagecpy); + } while (unlikely(len != pagecpy)); +} +EXPORT_SYMBOL_GPL(_lib_ring_buffer_memset); + +/** + * lib_ring_buffer_strcpy - write string data to a ring_buffer buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @src : source address + * @len : length to write + * @pagecpy : page size copied so far + * @pad : character to use for padding + */ +void _lib_ring_buffer_strcpy(struct lib_ring_buffer_backend *bufb, + size_t offset, const char *src, size_t len, + size_t pagecpy, int pad) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + int src_terminated = 0; + + CHAN_WARN_ON(chanb, !len); + offset += pagecpy; + do { + len -= pagecpy; + if (!src_terminated) + src += pagecpy; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + + /* + * Underlying layer should never ask for writes across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + + if (likely(!src_terminated)) { + size_t count, to_copy; + + to_copy = pagecpy; + if (pagecpy == len) + to_copy--; /* Final '\0' */ + count = lib_ring_buffer_do_strcpy(config, + rpages->p[index].virt + + (offset & ~PAGE_MASK), + src, to_copy); + offset += count; + /* Padding */ + if (unlikely(count < to_copy)) { + size_t pad_len = to_copy - count; + + /* Next pages will have padding */ + src_terminated = 1; + lib_ring_buffer_do_memset(rpages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + } else { + size_t pad_len; + + pad_len = pagecpy; + if (pagecpy == len) + pad_len--; /* Final '\0' */ + lib_ring_buffer_do_memset(rpages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + } while (unlikely(len != pagecpy)); + /* Ending '\0' */ + lib_ring_buffer_do_memset(rpages->p[index].virt + (offset & ~PAGE_MASK), + '\0', 1); +} +EXPORT_SYMBOL_GPL(_lib_ring_buffer_strcpy); + +/** + * lib_ring_buffer_copy_from_user_inatomic - write user data to a ring_buffer buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @src : source address + * @len : length to write + * @pagecpy : page size copied so far + * + * This function deals with userspace pointers, it should never be called + * directly without having the src pointer checked with access_ok() + * previously. + */ +void _lib_ring_buffer_copy_from_user_inatomic(struct lib_ring_buffer_backend *bufb, + size_t offset, + const void __user *src, size_t len, + size_t pagecpy) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + int ret; + + do { + len -= pagecpy; + src += pagecpy; + offset += pagecpy; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + + /* + * Underlying layer should never ask for writes across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + ret = lib_ring_buffer_do_copy_from_user_inatomic(rpages->p[index].virt + + (offset & ~PAGE_MASK), + src, pagecpy) != 0; + if (ret > 0) { + /* Copy failed. */ + _lib_ring_buffer_memset(bufb, offset, 0, len, 0); + break; /* stop copy */ + } + } while (unlikely(len != pagecpy)); +} +EXPORT_SYMBOL_GPL(_lib_ring_buffer_copy_from_user_inatomic); + +/** + * lib_ring_buffer_strcpy_from_user_inatomic - write userspace string data to a ring_buffer buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @src : source address + * @len : length to write + * @pagecpy : page size copied so far + * @pad : character to use for padding + * + * This function deals with userspace pointers, it should never be called + * directly without having the src pointer checked with access_ok() + * previously. + */ +void _lib_ring_buffer_strcpy_from_user_inatomic(struct lib_ring_buffer_backend *bufb, + size_t offset, const char __user *src, size_t len, + size_t pagecpy, int pad) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + int src_terminated = 0; + + offset += pagecpy; + do { + len -= pagecpy; + if (!src_terminated) + src += pagecpy; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + + /* + * Underlying layer should never ask for writes across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + + if (likely(!src_terminated)) { + size_t count, to_copy; + + to_copy = pagecpy; + if (pagecpy == len) + to_copy--; /* Final '\0' */ + count = lib_ring_buffer_do_strcpy_from_user_inatomic(config, + rpages->p[index].virt + + (offset & ~PAGE_MASK), + src, to_copy); + offset += count; + /* Padding */ + if (unlikely(count < to_copy)) { + size_t pad_len = to_copy - count; + + /* Next pages will have padding */ + src_terminated = 1; + lib_ring_buffer_do_memset(rpages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + } else { + size_t pad_len; + + pad_len = pagecpy; + if (pagecpy == len) + pad_len--; /* Final '\0' */ + lib_ring_buffer_do_memset(rpages->p[index].virt + + (offset & ~PAGE_MASK), + pad, pad_len); + offset += pad_len; + } + } while (unlikely(len != pagecpy)); + /* Ending '\0' */ + lib_ring_buffer_do_memset(rpages->p[index].virt + (offset & ~PAGE_MASK), + '\0', 1); +} +EXPORT_SYMBOL_GPL(_lib_ring_buffer_strcpy_from_user_inatomic); + +/** + * lib_ring_buffer_read - read data from ring_buffer_buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @dest : destination address + * @len : length to copy to destination + * + * Should be protected by get_subbuf/put_subbuf. + * Returns the length copied. + */ +size_t lib_ring_buffer_read(struct lib_ring_buffer_backend *bufb, size_t offset, + void *dest, size_t len) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t index, pagecpy, orig_len; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + + orig_len = len; + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + if (unlikely(!len)) + return 0; + for (;;) { + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + memcpy(dest, rpages->p[index].virt + (offset & ~PAGE_MASK), + pagecpy); + len -= pagecpy; + if (likely(!len)) + break; + dest += pagecpy; + offset += pagecpy; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + /* + * Underlying layer should never ask for reads across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + } + return orig_len; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_read); + +/** + * __lib_ring_buffer_copy_to_user - read data from ring_buffer to userspace + * @bufb : buffer backend + * @offset : offset within the buffer + * @dest : destination userspace address + * @len : length to copy to destination + * + * Should be protected by get_subbuf/put_subbuf. + * access_ok() must have been performed on dest addresses prior to call this + * function. + * Returns -EFAULT on error, 0 if ok. + */ +int __lib_ring_buffer_copy_to_user(struct lib_ring_buffer_backend *bufb, + size_t offset, void __user *dest, size_t len) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t index; + ssize_t pagecpy; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + if (unlikely(!len)) + return 0; + for (;;) { + pagecpy = min_t(size_t, len, PAGE_SIZE - (offset & ~PAGE_MASK)); + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + if (__copy_to_user(dest, + rpages->p[index].virt + (offset & ~PAGE_MASK), + pagecpy)) + return -EFAULT; + len -= pagecpy; + if (likely(!len)) + break; + dest += pagecpy; + offset += pagecpy; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + /* + * Underlying layer should never ask for reads across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + } + return 0; +} +EXPORT_SYMBOL_GPL(__lib_ring_buffer_copy_to_user); + +/** + * lib_ring_buffer_read_cstr - read a C-style string from ring_buffer. + * @bufb : buffer backend + * @offset : offset within the buffer + * @dest : destination address + * @len : destination's length + * + * Return string's length, or -EINVAL on error. + * Should be protected by get_subbuf/put_subbuf. + * Destination length should be at least 1 to hold '\0'. + */ +int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb, size_t offset, + void *dest, size_t len) +{ + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + size_t index; + ssize_t pagecpy, pagelen, strpagelen, orig_offset; + char *str; + struct lib_ring_buffer_backend_pages *rpages; + unsigned long sb_bindex, id; + + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + orig_offset = offset; + if (unlikely(!len)) + return -EINVAL; + for (;;) { + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + str = (char *)rpages->p[index].virt + (offset & ~PAGE_MASK); + pagelen = PAGE_SIZE - (offset & ~PAGE_MASK); + strpagelen = strnlen(str, pagelen); + if (len) { + pagecpy = min_t(size_t, len, strpagelen); + if (dest) { + memcpy(dest, str, pagecpy); + dest += pagecpy; + } + len -= pagecpy; + } + offset += strpagelen; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + if (strpagelen < pagelen) + break; + /* + * Underlying layer should never ask for reads across + * subbuffers. + */ + CHAN_WARN_ON(chanb, offset >= chanb->buf_size); + } + if (dest && len) + ((char *)dest)[0] = 0; + return offset - orig_offset; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_read_cstr); + +/** + * lib_ring_buffer_read_get_pfn - Get a page frame number to read from + * @bufb : buffer backend + * @offset : offset within the buffer + * @virt : pointer to page address (output) + * + * Should be protected by get_subbuf/put_subbuf. + * Returns the pointer to the page frame number unsigned long. + */ +unsigned long *lib_ring_buffer_read_get_pfn(struct lib_ring_buffer_backend *bufb, + size_t offset, void ***virt) +{ + size_t index; + struct lib_ring_buffer_backend_pages *rpages; + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + unsigned long sb_bindex, id; + + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + *virt = &rpages->p[index].virt; + return &rpages->p[index].pfn; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_read_get_pfn); + +/** + * lib_ring_buffer_read_offset_address - get address of a buffer location + * @bufb : buffer backend + * @offset : offset within the buffer. + * + * Return the address where a given offset is located (for read). + * Should be used to get the current subbuffer header pointer. Given we know + * it's never on a page boundary, it's safe to read/write directly + * from/to this address, as long as the read/write is never bigger than a + * page size. + */ +void *lib_ring_buffer_read_offset_address(struct lib_ring_buffer_backend *bufb, + size_t offset) +{ + size_t index; + struct lib_ring_buffer_backend_pages *rpages; + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + unsigned long sb_bindex, id; + + offset &= chanb->buf_size - 1; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + id = bufb->buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + return rpages->p[index].virt + (offset & ~PAGE_MASK); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_read_offset_address); + +/** + * lib_ring_buffer_offset_address - get address of a location within the buffer + * @bufb : buffer backend + * @offset : offset within the buffer. + * + * Return the address where a given offset is located. + * Should be used to get the current subbuffer header pointer. Given we know + * it's always at the beginning of a page, it's safe to write directly to this + * address, as long as the write is never bigger than a page size. + */ +void *lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb, + size_t offset) +{ + size_t sbidx, index; + struct lib_ring_buffer_backend_pages *rpages; + struct channel_backend *chanb = &bufb->chan->backend; + const struct lib_ring_buffer_config *config = &chanb->config; + unsigned long sb_bindex, id; + + offset &= chanb->buf_size - 1; + sbidx = offset >> chanb->subbuf_size_order; + index = (offset & (chanb->subbuf_size - 1)) >> PAGE_SHIFT; + id = bufb->buf_wsb[sbidx].id; + sb_bindex = subbuffer_id_get_index(config, id); + rpages = bufb->array[sb_bindex]; + CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, id)); + return rpages->p[index].virt + (offset & ~PAGE_MASK); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_offset_address); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_frontend.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_frontend.c new file mode 100644 index 000000000000..5b912a484dc0 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_frontend.c @@ -0,0 +1,2377 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * ring_buffer_frontend.c + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + * + * Ring buffer wait-free buffer synchronization. Producer-consumer and flight + * recorder (overwrite) modes. See thesis: + * + * Desnoyers, Mathieu (2009), "Low-Impact Operating System Tracing", Ph.D. + * dissertation, Ecole Polytechnique de Montreal. + * http://www.lttng.org/pub/thesis/desnoyers-dissertation-2009-12.pdf + * + * - Algorithm presentation in Chapter 5: + * "Lockless Multi-Core High-Throughput Buffering". + * - Algorithm formal verification in Section 8.6: + * "Formal verification of LTTng" + * + * Author: + * Mathieu Desnoyers + * + * Inspired from LTT and RelayFS: + * Karim Yaghmour + * Tom Zanussi + * Bob Wisniewski + * And from K42 : + * Bob Wisniewski + * + * Buffer reader semantic : + * + * - get_subbuf_size + * while buffer is not finalized and empty + * - get_subbuf + * - if return value != 0, continue + * - splice one subbuffer worth of data to a pipe + * - splice the data from pipe to disk/network + * - put_subbuf + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Internal structure representing offsets to use at a sub-buffer switch. + */ +struct switch_offsets { + unsigned long begin, end, old; + size_t pre_header_padding, size; + unsigned int switch_new_start:1, switch_new_end:1, switch_old_start:1, + switch_old_end:1; +}; + +#ifdef CONFIG_NO_HZ +enum tick_nohz_val { + TICK_NOHZ_STOP, + TICK_NOHZ_FLUSH, + TICK_NOHZ_RESTART, +}; + +static ATOMIC_NOTIFIER_HEAD(tick_nohz_notifier); +#endif /* CONFIG_NO_HZ */ + +static DEFINE_PER_CPU(spinlock_t, ring_buffer_nohz_lock); + +DEFINE_PER_CPU(unsigned int, lib_ring_buffer_nesting); +EXPORT_PER_CPU_SYMBOL(lib_ring_buffer_nesting); + +static +void lib_ring_buffer_print_errors(struct channel *chan, + struct lib_ring_buffer *buf, int cpu); +static +void _lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf, + enum switch_mode mode); + +static +int lib_ring_buffer_poll_deliver(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan) +{ + unsigned long consumed_old, consumed_idx, commit_count, write_offset; + + consumed_old = atomic_long_read(&buf->consumed); + consumed_idx = subbuf_index(consumed_old, chan); + commit_count = v_read(config, &buf->commit_cold[consumed_idx].cc_sb); + /* + * No memory barrier here, since we are only interested + * in a statistically correct polling result. The next poll will + * get the data is we are racing. The mb() that ensures correct + * memory order is in get_subbuf. + */ + write_offset = v_read(config, &buf->offset); + + /* + * Check that the subbuffer we are trying to consume has been + * already fully committed. + */ + + if (((commit_count - chan->backend.subbuf_size) + & chan->commit_count_mask) + - (buf_trunc(consumed_old, chan) + >> chan->backend.num_subbuf_order) + != 0) + return 0; + + /* + * Check that we are not about to read the same subbuffer in + * which the writer head is. + */ + if (subbuf_trunc(write_offset, chan) - subbuf_trunc(consumed_old, chan) + == 0) + return 0; + + return 1; +} + +/* + * Must be called under cpu hotplug protection. + */ +void lib_ring_buffer_free(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + + lib_ring_buffer_print_errors(chan, buf, buf->backend.cpu); + lttng_kvfree(buf->commit_hot); + lttng_kvfree(buf->commit_cold); + lttng_kvfree(buf->ts_end); + + lib_ring_buffer_backend_free(&buf->backend); +} + +/** + * lib_ring_buffer_reset - Reset ring buffer to initial values. + * @buf: Ring buffer. + * + * Effectively empty the ring buffer. Should be called when the buffer is not + * used for writing. The ring buffer can be opened for reading, but the reader + * should not be using the iterator concurrently with reset. The previous + * current iterator record is reset. + */ +void lib_ring_buffer_reset(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned int i; + + /* + * Reset iterator first. It will put the subbuffer if it currently holds + * it. + */ + lib_ring_buffer_iterator_reset(buf); + v_set(config, &buf->offset, 0); + for (i = 0; i < chan->backend.num_subbuf; i++) { + v_set(config, &buf->commit_hot[i].cc, 0); + v_set(config, &buf->commit_hot[i].seq, 0); + v_set(config, &buf->commit_cold[i].cc_sb, 0); + buf->ts_end[i] = 0; + } + atomic_long_set(&buf->consumed, 0); + atomic_set(&buf->record_disabled, 0); + v_set(config, &buf->last_tsc, 0); + lib_ring_buffer_backend_reset(&buf->backend); + /* Don't reset number of active readers */ + v_set(config, &buf->records_lost_full, 0); + v_set(config, &buf->records_lost_wrap, 0); + v_set(config, &buf->records_lost_big, 0); + v_set(config, &buf->records_count, 0); + v_set(config, &buf->records_overrun, 0); + buf->finalized = 0; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_reset); + +/** + * channel_reset - Reset channel to initial values. + * @chan: Channel. + * + * Effectively empty the channel. Should be called when the channel is not used + * for writing. The channel can be opened for reading, but the reader should not + * be using the iterator concurrently with reset. The previous current iterator + * record is reset. + */ +void channel_reset(struct channel *chan) +{ + /* + * Reset iterators first. Will put the subbuffer if held for reading. + */ + channel_iterator_reset(chan); + atomic_set(&chan->record_disabled, 0); + /* Don't reset commit_count_mask, still valid */ + channel_backend_reset(&chan->backend); + /* Don't reset switch/read timer interval */ + /* Don't reset notifiers and notifier enable bits */ + /* Don't reset reader reference count */ +} +EXPORT_SYMBOL_GPL(channel_reset); + +/* + * Must be called under cpu hotplug protection. + */ +int lib_ring_buffer_create(struct lib_ring_buffer *buf, + struct channel_backend *chanb, int cpu) +{ + const struct lib_ring_buffer_config *config = &chanb->config; + struct channel *chan = container_of(chanb, struct channel, backend); + void *priv = chanb->priv; + size_t subbuf_header_size; + u64 tsc; + int ret; + + /* Test for cpu hotplug */ + if (buf->backend.allocated) + return 0; + + /* + * Paranoia: per cpu dynamic allocation is not officially documented as + * zeroing the memory, so let's do it here too, just in case. + */ + memset(buf, 0, sizeof(*buf)); + + ret = lib_ring_buffer_backend_create(&buf->backend, &chan->backend, cpu); + if (ret) + return ret; + + buf->commit_hot = + lttng_kvzalloc_node(ALIGN(sizeof(*buf->commit_hot) + * chan->backend.num_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(cpu, 0))); + if (!buf->commit_hot) { + ret = -ENOMEM; + goto free_chanbuf; + } + + buf->commit_cold = + lttng_kvzalloc_node(ALIGN(sizeof(*buf->commit_cold) + * chan->backend.num_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(cpu, 0))); + if (!buf->commit_cold) { + ret = -ENOMEM; + goto free_commit; + } + + buf->ts_end = + lttng_kvzalloc_node(ALIGN(sizeof(*buf->ts_end) + * chan->backend.num_subbuf, + 1 << INTERNODE_CACHE_SHIFT), + GFP_KERNEL | __GFP_NOWARN, + cpu_to_node(max(cpu, 0))); + if (!buf->ts_end) { + ret = -ENOMEM; + goto free_commit_cold; + } + + init_waitqueue_head(&buf->read_wait); + init_waitqueue_head(&buf->write_wait); + raw_spin_lock_init(&buf->raw_tick_nohz_spinlock); + + /* + * Write the subbuffer header for first subbuffer so we know the total + * duration of data gathering. + */ + subbuf_header_size = config->cb.subbuffer_header_size(); + v_set(config, &buf->offset, subbuf_header_size); + subbuffer_id_clear_noref(config, &buf->backend.buf_wsb[0].id); + tsc = config->cb.ring_buffer_clock_read(buf->backend.chan); + config->cb.buffer_begin(buf, tsc, 0); + v_add(config, subbuf_header_size, &buf->commit_hot[0].cc); + + if (config->cb.buffer_create) { + ret = config->cb.buffer_create(buf, priv, cpu, chanb->name); + if (ret) + goto free_init; + } + + /* + * Ensure the buffer is ready before setting it to allocated and setting + * the cpumask. + * Used for cpu hotplug vs cpumask iteration. + */ + smp_wmb(); + buf->backend.allocated = 1; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + CHAN_WARN_ON(chan, cpumask_test_cpu(cpu, + chan->backend.cpumask)); + cpumask_set_cpu(cpu, chan->backend.cpumask); + } + + return 0; + + /* Error handling */ +free_init: + lttng_kvfree(buf->ts_end); +free_commit_cold: + lttng_kvfree(buf->commit_cold); +free_commit: + lttng_kvfree(buf->commit_hot); +free_chanbuf: + lib_ring_buffer_backend_free(&buf->backend); + return ret; +} + +static void switch_buffer_timer(LTTNG_TIMER_FUNC_ARG_TYPE t) +{ + struct lib_ring_buffer *buf = lttng_from_timer(buf, t, switch_timer); + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + /* + * Only flush buffers periodically if readers are active. + */ + if (atomic_long_read(&buf->active_readers)) + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + lttng_mod_timer_pinned(&buf->switch_timer, + jiffies + chan->switch_timer_interval); + else + mod_timer(&buf->switch_timer, + jiffies + chan->switch_timer_interval); +} + +/* + * Called with ring_buffer_nohz_lock held for per-cpu buffers. + */ +static void lib_ring_buffer_start_switch_timer(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned int flags = 0; + + if (!chan->switch_timer_interval || buf->switch_timer_enabled) + return; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + flags = LTTNG_TIMER_PINNED; + + lttng_timer_setup(&buf->switch_timer, switch_buffer_timer, flags, buf); + buf->switch_timer.expires = jiffies + chan->switch_timer_interval; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + add_timer_on(&buf->switch_timer, buf->backend.cpu); + else + add_timer(&buf->switch_timer); + + buf->switch_timer_enabled = 1; +} + +/* + * Called with ring_buffer_nohz_lock held for per-cpu buffers. + */ +static void lib_ring_buffer_stop_switch_timer(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + + if (!chan->switch_timer_interval || !buf->switch_timer_enabled) + return; + + del_timer_sync(&buf->switch_timer); + buf->switch_timer_enabled = 0; +} + +/* + * Polling timer to check the channels for data. + */ +static void read_buffer_timer(LTTNG_TIMER_FUNC_ARG_TYPE t) +{ + struct lib_ring_buffer *buf = lttng_from_timer(buf, t, read_timer); + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + CHAN_WARN_ON(chan, !buf->backend.allocated); + + if (atomic_long_read(&buf->active_readers) + && lib_ring_buffer_poll_deliver(config, buf, chan)) { + wake_up_interruptible(&buf->read_wait); + wake_up_interruptible(&chan->read_wait); + } + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + lttng_mod_timer_pinned(&buf->read_timer, + jiffies + chan->read_timer_interval); + else + mod_timer(&buf->read_timer, + jiffies + chan->read_timer_interval); +} + +/* + * Called with ring_buffer_nohz_lock held for per-cpu buffers. + */ +static void lib_ring_buffer_start_read_timer(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned int flags = 0; + + if (config->wakeup != RING_BUFFER_WAKEUP_BY_TIMER + || !chan->read_timer_interval + || buf->read_timer_enabled) + return; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + flags = LTTNG_TIMER_PINNED; + + lttng_timer_setup(&buf->read_timer, read_buffer_timer, flags, buf); + buf->read_timer.expires = jiffies + chan->read_timer_interval; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + add_timer_on(&buf->read_timer, buf->backend.cpu); + else + add_timer(&buf->read_timer); + + buf->read_timer_enabled = 1; +} + +/* + * Called with ring_buffer_nohz_lock held for per-cpu buffers. + */ +static void lib_ring_buffer_stop_read_timer(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->wakeup != RING_BUFFER_WAKEUP_BY_TIMER + || !chan->read_timer_interval + || !buf->read_timer_enabled) + return; + + del_timer_sync(&buf->read_timer); + /* + * do one more check to catch data that has been written in the last + * timer period. + */ + if (lib_ring_buffer_poll_deliver(config, buf, chan)) { + wake_up_interruptible(&buf->read_wait); + wake_up_interruptible(&chan->read_wait); + } + buf->read_timer_enabled = 0; +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +enum cpuhp_state lttng_rb_hp_prepare; +enum cpuhp_state lttng_rb_hp_online; + +void lttng_rb_set_hp_prepare(enum cpuhp_state val) +{ + lttng_rb_hp_prepare = val; +} +EXPORT_SYMBOL_GPL(lttng_rb_set_hp_prepare); + +void lttng_rb_set_hp_online(enum cpuhp_state val) +{ + lttng_rb_hp_online = val; +} +EXPORT_SYMBOL_GPL(lttng_rb_set_hp_online); + +int lttng_cpuhp_rb_frontend_dead(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct channel *chan = container_of(node, struct channel, + cpuhp_prepare); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + /* + * Performing a buffer switch on a remote CPU. Performed by + * the CPU responsible for doing the hotunplug after the target + * CPU stopped running completely. Ensures that all data + * from that remote CPU is flushed. + */ + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_cpuhp_rb_frontend_dead); + +int lttng_cpuhp_rb_frontend_online(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct channel *chan = container_of(node, struct channel, + cpuhp_online); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + wake_up_interruptible(&chan->hp_wait); + lib_ring_buffer_start_switch_timer(buf); + lib_ring_buffer_start_read_timer(buf); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_cpuhp_rb_frontend_online); + +int lttng_cpuhp_rb_frontend_offline(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct channel *chan = container_of(node, struct channel, + cpuhp_online); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_cpuhp_rb_frontend_offline); + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#ifdef CONFIG_HOTPLUG_CPU + +/** + * lib_ring_buffer_cpu_hp_callback - CPU hotplug callback + * @nb: notifier block + * @action: hotplug action to take + * @hcpu: CPU number + * + * Returns the success/failure of the operation. (%NOTIFY_OK, %NOTIFY_BAD) + */ +static +int lib_ring_buffer_cpu_hp_callback(struct notifier_block *nb, + unsigned long action, + void *hcpu) +{ + unsigned int cpu = (unsigned long)hcpu; + struct channel *chan = container_of(nb, struct channel, + cpu_hp_notifier); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (!chan->cpu_hp_enable) + return NOTIFY_DONE; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + switch (action) { + case CPU_DOWN_FAILED: + case CPU_DOWN_FAILED_FROZEN: + case CPU_ONLINE: + case CPU_ONLINE_FROZEN: + wake_up_interruptible(&chan->hp_wait); + lib_ring_buffer_start_switch_timer(buf); + lib_ring_buffer_start_read_timer(buf); + return NOTIFY_OK; + + case CPU_DOWN_PREPARE: + case CPU_DOWN_PREPARE_FROZEN: + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + return NOTIFY_OK; + + case CPU_DEAD: + case CPU_DEAD_FROZEN: + /* + * Performing a buffer switch on a remote CPU. Performed by + * the CPU responsible for doing the hotunplug after the target + * CPU stopped running completely. Ensures that all data + * from that remote CPU is flushed. + */ + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + return NOTIFY_OK; + + default: + return NOTIFY_DONE; + } +} + +#endif + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if defined(CONFIG_NO_HZ) && defined(CONFIG_LIB_RING_BUFFER) +/* + * For per-cpu buffers, call the reader wakeups before switching the buffer, so + * that wake-up-tracing generated events are flushed before going idle (in + * tick_nohz). We test if the spinlock is locked to deal with the race where + * readers try to sample the ring buffer before we perform the switch. We let + * the readers retry in that case. If there is data in the buffer, the wake up + * is going to forbid the CPU running the reader thread from going idle. + */ +static int notrace ring_buffer_tick_nohz_callback(struct notifier_block *nb, + unsigned long val, + void *data) +{ + struct channel *chan = container_of(nb, struct channel, + tick_nohz_notifier); + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + int cpu = smp_processor_id(); + + if (config->alloc != RING_BUFFER_ALLOC_PER_CPU) { + /* + * We don't support keeping the system idle with global buffers + * and streaming active. In order to do so, we would need to + * sample a non-nohz-cpumask racelessly with the nohz updates + * without adding synchronization overhead to nohz. Leave this + * use-case out for now. + */ + return 0; + } + + buf = channel_get_ring_buffer(config, chan, cpu); + switch (val) { + case TICK_NOHZ_FLUSH: + raw_spin_lock(&buf->raw_tick_nohz_spinlock); + if (config->wakeup == RING_BUFFER_WAKEUP_BY_TIMER + && chan->read_timer_interval + && atomic_long_read(&buf->active_readers) + && (lib_ring_buffer_poll_deliver(config, buf, chan) + || lib_ring_buffer_pending_data(config, buf, chan))) { + wake_up_interruptible(&buf->read_wait); + wake_up_interruptible(&chan->read_wait); + } + if (chan->switch_timer_interval) + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + raw_spin_unlock(&buf->raw_tick_nohz_spinlock); + break; + case TICK_NOHZ_STOP: + spin_lock(lttng_this_cpu_ptr(&ring_buffer_nohz_lock)); + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + spin_unlock(lttng_this_cpu_ptr(&ring_buffer_nohz_lock)); + break; + case TICK_NOHZ_RESTART: + spin_lock(lttng_this_cpu_ptr(&ring_buffer_nohz_lock)); + lib_ring_buffer_start_read_timer(buf); + lib_ring_buffer_start_switch_timer(buf); + spin_unlock(lttng_this_cpu_ptr(&ring_buffer_nohz_lock)); + break; + } + + return 0; +} + +void notrace lib_ring_buffer_tick_nohz_flush(void) +{ + atomic_notifier_call_chain(&tick_nohz_notifier, TICK_NOHZ_FLUSH, + NULL); +} + +void notrace lib_ring_buffer_tick_nohz_stop(void) +{ + atomic_notifier_call_chain(&tick_nohz_notifier, TICK_NOHZ_STOP, + NULL); +} + +void notrace lib_ring_buffer_tick_nohz_restart(void) +{ + atomic_notifier_call_chain(&tick_nohz_notifier, TICK_NOHZ_RESTART, + NULL); +} +#endif /* defined(CONFIG_NO_HZ) && defined(CONFIG_LIB_RING_BUFFER) */ + +/* + * Holds CPU hotplug. + */ +static void channel_unregister_notifiers(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + + channel_iterator_unregister_notifiers(chan); + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { +#ifdef CONFIG_NO_HZ + /* + * Remove the nohz notifier first, so we are certain we stop + * the timers. + */ + atomic_notifier_chain_unregister(&tick_nohz_notifier, + &chan->tick_nohz_notifier); + /* + * ring_buffer_nohz_lock will not be needed below, because + * we just removed the notifiers, which were the only source of + * concurrency. + */ +#endif /* CONFIG_NO_HZ */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + { + int ret; + + ret = cpuhp_state_remove_instance(lttng_rb_hp_online, + &chan->cpuhp_online.node); + WARN_ON(ret); + ret = cpuhp_state_remove_instance_nocalls(lttng_rb_hp_prepare, + &chan->cpuhp_prepare.node); + WARN_ON(ret); + } +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + { + int cpu; + +#ifdef CONFIG_HOTPLUG_CPU + get_online_cpus(); + chan->cpu_hp_enable = 0; + for_each_online_cpu(cpu) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + } + put_online_cpus(); + unregister_cpu_notifier(&chan->cpu_hp_notifier); +#else + for_each_possible_cpu(cpu) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + } +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + } else { + struct lib_ring_buffer *buf = chan->backend.buf; + + lib_ring_buffer_stop_switch_timer(buf); + lib_ring_buffer_stop_read_timer(buf); + } + channel_backend_unregister_notifiers(&chan->backend); +} + +static void lib_ring_buffer_set_quiescent(struct lib_ring_buffer *buf) +{ + if (!buf->quiescent) { + buf->quiescent = true; + _lib_ring_buffer_switch_remote(buf, SWITCH_FLUSH); + } +} + +static void lib_ring_buffer_clear_quiescent(struct lib_ring_buffer *buf) +{ + buf->quiescent = false; +} + +void lib_ring_buffer_set_quiescent_channel(struct channel *chan) +{ + int cpu; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + get_online_cpus(); + for_each_channel_cpu(cpu, chan) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + + lib_ring_buffer_set_quiescent(buf); + } + put_online_cpus(); + } else { + struct lib_ring_buffer *buf = chan->backend.buf; + + lib_ring_buffer_set_quiescent(buf); + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_set_quiescent_channel); + +void lib_ring_buffer_clear_quiescent_channel(struct channel *chan) +{ + int cpu; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + get_online_cpus(); + for_each_channel_cpu(cpu, chan) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + + lib_ring_buffer_clear_quiescent(buf); + } + put_online_cpus(); + } else { + struct lib_ring_buffer *buf = chan->backend.buf; + + lib_ring_buffer_clear_quiescent(buf); + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_clear_quiescent_channel); + +static void channel_free(struct channel *chan) +{ + if (chan->backend.release_priv_ops) { + chan->backend.release_priv_ops(chan->backend.priv_ops); + } + channel_iterator_free(chan); + channel_backend_free(&chan->backend); + kfree(chan); +} + +/** + * channel_create - Create channel. + * @config: ring buffer instance configuration + * @name: name of the channel + * @priv: ring buffer client private data + * @buf_addr: pointer the the beginning of the preallocated buffer contiguous + * address mapping. It is used only by RING_BUFFER_STATIC + * configuration. It can be set to NULL for other backends. + * @subbuf_size: subbuffer size + * @num_subbuf: number of subbuffers + * @switch_timer_interval: Time interval (in us) to fill sub-buffers with + * padding to let readers get those sub-buffers. + * Used for live streaming. + * @read_timer_interval: Time interval (in us) to wake up pending readers. + * + * Holds cpu hotplug. + * Returns NULL on failure. + */ +struct channel *channel_create(const struct lib_ring_buffer_config *config, + const char *name, void *priv, void *buf_addr, + size_t subbuf_size, + size_t num_subbuf, unsigned int switch_timer_interval, + unsigned int read_timer_interval) +{ + int ret; + struct channel *chan; + + if (lib_ring_buffer_check_config(config, switch_timer_interval, + read_timer_interval)) + return NULL; + + chan = kzalloc(sizeof(struct channel), GFP_KERNEL); + if (!chan) + return NULL; + + ret = channel_backend_init(&chan->backend, name, config, priv, + subbuf_size, num_subbuf); + if (ret) + goto error; + + ret = channel_iterator_init(chan); + if (ret) + goto error_free_backend; + + chan->commit_count_mask = (~0UL >> chan->backend.num_subbuf_order); + chan->switch_timer_interval = usecs_to_jiffies(switch_timer_interval); + chan->read_timer_interval = usecs_to_jiffies(read_timer_interval); + kref_init(&chan->ref); + init_waitqueue_head(&chan->read_wait); + init_waitqueue_head(&chan->hp_wait); + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + chan->cpuhp_prepare.component = LTTNG_RING_BUFFER_FRONTEND; + ret = cpuhp_state_add_instance_nocalls(lttng_rb_hp_prepare, + &chan->cpuhp_prepare.node); + if (ret) + goto cpuhp_prepare_error; + + chan->cpuhp_online.component = LTTNG_RING_BUFFER_FRONTEND; + ret = cpuhp_state_add_instance(lttng_rb_hp_online, + &chan->cpuhp_online.node); + if (ret) + goto cpuhp_online_error; +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + { + int cpu; + /* + * In case of non-hotplug cpu, if the ring-buffer is allocated + * in early initcall, it will not be notified of secondary cpus. + * In that off case, we need to allocate for all possible cpus. + */ +#ifdef CONFIG_HOTPLUG_CPU + chan->cpu_hp_notifier.notifier_call = + lib_ring_buffer_cpu_hp_callback; + chan->cpu_hp_notifier.priority = 6; + register_cpu_notifier(&chan->cpu_hp_notifier); + + get_online_cpus(); + for_each_online_cpu(cpu) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + spin_lock(&per_cpu(ring_buffer_nohz_lock, cpu)); + lib_ring_buffer_start_switch_timer(buf); + lib_ring_buffer_start_read_timer(buf); + spin_unlock(&per_cpu(ring_buffer_nohz_lock, cpu)); + } + chan->cpu_hp_enable = 1; + put_online_cpus(); +#else + for_each_possible_cpu(cpu) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + spin_lock(&per_cpu(ring_buffer_nohz_lock, cpu)); + lib_ring_buffer_start_switch_timer(buf); + lib_ring_buffer_start_read_timer(buf); + spin_unlock(&per_cpu(ring_buffer_nohz_lock, cpu)); + } +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#if defined(CONFIG_NO_HZ) && defined(CONFIG_LIB_RING_BUFFER) + /* Only benefit from NO_HZ idle with per-cpu buffers for now. */ + chan->tick_nohz_notifier.notifier_call = + ring_buffer_tick_nohz_callback; + chan->tick_nohz_notifier.priority = ~0U; + atomic_notifier_chain_register(&tick_nohz_notifier, + &chan->tick_nohz_notifier); +#endif /* defined(CONFIG_NO_HZ) && defined(CONFIG_LIB_RING_BUFFER) */ + + } else { + struct lib_ring_buffer *buf = chan->backend.buf; + + lib_ring_buffer_start_switch_timer(buf); + lib_ring_buffer_start_read_timer(buf); + } + + return chan; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) +cpuhp_online_error: + ret = cpuhp_state_remove_instance_nocalls(lttng_rb_hp_prepare, + &chan->cpuhp_prepare.node); + WARN_ON(ret); +cpuhp_prepare_error: +#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +error_free_backend: + channel_backend_free(&chan->backend); +error: + kfree(chan); + return NULL; +} +EXPORT_SYMBOL_GPL(channel_create); + +static +void channel_release(struct kref *kref) +{ + struct channel *chan = container_of(kref, struct channel, ref); + channel_free(chan); +} + +/** + * channel_destroy - Finalize, wait for q.s. and destroy channel. + * @chan: channel to destroy + * + * Holds cpu hotplug. + * Call "destroy" callback, finalize channels, and then decrement the + * channel reference count. Note that when readers have completed data + * consumption of finalized channels, get_subbuf() will return -ENODATA. + * They should release their handle at that point. Returns the private + * data pointer. + */ +void *channel_destroy(struct channel *chan) +{ + int cpu; + const struct lib_ring_buffer_config *config = &chan->backend.config; + void *priv; + + channel_unregister_notifiers(chan); + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + /* + * No need to hold cpu hotplug, because all notifiers have been + * unregistered. + */ + for_each_channel_cpu(cpu, chan) { + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, + cpu); + + if (config->cb.buffer_finalize) + config->cb.buffer_finalize(buf, + chan->backend.priv, + cpu); + /* + * Perform flush before writing to finalized. + */ + smp_wmb(); + WRITE_ONCE(buf->finalized, 1); + wake_up_interruptible(&buf->read_wait); + } + } else { + struct lib_ring_buffer *buf = chan->backend.buf; + + if (config->cb.buffer_finalize) + config->cb.buffer_finalize(buf, chan->backend.priv, -1); + /* + * Perform flush before writing to finalized. + */ + smp_wmb(); + WRITE_ONCE(buf->finalized, 1); + wake_up_interruptible(&buf->read_wait); + } + WRITE_ONCE(chan->finalized, 1); + wake_up_interruptible(&chan->hp_wait); + wake_up_interruptible(&chan->read_wait); + priv = chan->backend.priv; + kref_put(&chan->ref, channel_release); + return priv; +} +EXPORT_SYMBOL_GPL(channel_destroy); + +struct lib_ring_buffer *channel_get_ring_buffer( + const struct lib_ring_buffer_config *config, + struct channel *chan, int cpu) +{ + if (config->alloc == RING_BUFFER_ALLOC_GLOBAL) + return chan->backend.buf; + else + return per_cpu_ptr(chan->backend.buf, cpu); +} +EXPORT_SYMBOL_GPL(channel_get_ring_buffer); + +int lib_ring_buffer_open_read(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + + if (!atomic_long_add_unless(&buf->active_readers, 1, 1)) + return -EBUSY; + if (!lttng_kref_get(&chan->ref)) { + atomic_long_dec(&buf->active_readers); + return -EOVERFLOW; + } + lttng_smp_mb__after_atomic(); + return 0; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_open_read); + +void lib_ring_buffer_release_read(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + + CHAN_WARN_ON(chan, atomic_long_read(&buf->active_readers) != 1); + lttng_smp_mb__before_atomic(); + atomic_long_dec(&buf->active_readers); + kref_put(&chan->ref, channel_release); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_release_read); + +/* + * Promote compiler barrier to a smp_mb(). + * For the specific ring buffer case, this IPI call should be removed if the + * architecture does not reorder writes. This should eventually be provided by + * a separate architecture-specific infrastructure. + */ +static void remote_mb(void *info) +{ + smp_mb(); +} + +/** + * lib_ring_buffer_snapshot - save subbuffer position snapshot (for read) + * @buf: ring buffer + * @consumed: consumed count indicating the position where to read + * @produced: produced count, indicates position when to stop reading + * + * Returns -ENODATA if buffer is finalized, -EAGAIN if there is currently no + * data to read at consumed position, or 0 if the get operation succeeds. + * Busy-loop trying to get data if the tick_nohz sequence lock is held. + */ + +int lib_ring_buffer_snapshot(struct lib_ring_buffer *buf, + unsigned long *consumed, unsigned long *produced) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long consumed_cur, write_offset; + int finalized; + +retry: + finalized = LTTNG_READ_ONCE(buf->finalized); + /* + * Read finalized before counters. + */ + smp_rmb(); + consumed_cur = atomic_long_read(&buf->consumed); + /* + * No need to issue a memory barrier between consumed count read and + * write offset read, because consumed count can only change + * concurrently in overwrite mode, and we keep a sequence counter + * identifier derived from the write offset to check we are getting + * the same sub-buffer we are expecting (the sub-buffers are atomically + * "tagged" upon writes, tags are checked upon read). + */ + write_offset = v_read(config, &buf->offset); + + /* + * Check that we are not about to read the same subbuffer in + * which the writer head is. + */ + if (subbuf_trunc(write_offset, chan) - subbuf_trunc(consumed_cur, chan) + == 0) + goto nodata; + + *consumed = consumed_cur; + *produced = subbuf_trunc(write_offset, chan); + + return 0; + +nodata: + /* + * The memory barriers __wait_event()/wake_up_interruptible() take care + * of "raw_spin_is_locked" memory ordering. + */ + if (finalized) + return -ENODATA; + else if (raw_spin_is_locked(&buf->raw_tick_nohz_spinlock)) + goto retry; + else + return -EAGAIN; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_snapshot); + +/** + * Performs the same function as lib_ring_buffer_snapshot(), but the positions + * are saved regardless of whether the consumed and produced positions are + * in the same subbuffer. + * @buf: ring buffer + * @consumed: consumed byte count indicating the last position read + * @produced: produced byte count indicating the last position written + * + * This function is meant to provide information on the exact producer and + * consumer positions without regard for the "snapshot" feature. + */ +int lib_ring_buffer_snapshot_sample_positions(struct lib_ring_buffer *buf, + unsigned long *consumed, unsigned long *produced) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + smp_rmb(); + *consumed = atomic_long_read(&buf->consumed); + /* + * No need to issue a memory barrier between consumed count read and + * write offset read, because consumed count can only change + * concurrently in overwrite mode, and we keep a sequence counter + * identifier derived from the write offset to check we are getting + * the same sub-buffer we are expecting (the sub-buffers are atomically + * "tagged" upon writes, tags are checked upon read). + */ + *produced = v_read(config, &buf->offset); + return 0; +} + +/** + * lib_ring_buffer_put_snapshot - move consumed counter forward + * + * Should only be called from consumer context. + * @buf: ring buffer + * @consumed_new: new consumed count value + */ +void lib_ring_buffer_move_consumer(struct lib_ring_buffer *buf, + unsigned long consumed_new) +{ + struct lib_ring_buffer_backend *bufb = &buf->backend; + struct channel *chan = bufb->chan; + unsigned long consumed; + + CHAN_WARN_ON(chan, atomic_long_read(&buf->active_readers) != 1); + + /* + * Only push the consumed value forward. + * If the consumed cmpxchg fails, this is because we have been pushed by + * the writer in flight recorder mode. + */ + consumed = atomic_long_read(&buf->consumed); + while ((long) consumed - (long) consumed_new < 0) + consumed = atomic_long_cmpxchg(&buf->consumed, consumed, + consumed_new); + /* Wake-up the metadata producer */ + wake_up_interruptible(&buf->write_wait); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_move_consumer); + +#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE +static void lib_ring_buffer_flush_read_subbuf_dcache( + const struct lib_ring_buffer_config *config, + struct channel *chan, + struct lib_ring_buffer *buf) +{ + struct lib_ring_buffer_backend_pages *pages; + unsigned long sb_bindex, id, i, nr_pages; + + if (config->output != RING_BUFFER_MMAP) + return; + + /* + * Architectures with caches aliased on virtual addresses may + * use different cache lines for the linear mapping vs + * user-space memory mapping. Given that the ring buffer is + * based on the kernel linear mapping, aligning it with the + * user-space mapping is not straightforward, and would require + * extra TLB entries. Therefore, simply flush the dcache for the + * entire sub-buffer before reading it. + */ + id = buf->backend.buf_rsb.id; + sb_bindex = subbuffer_id_get_index(config, id); + pages = buf->backend.array[sb_bindex]; + nr_pages = buf->backend.num_pages_per_subbuf; + for (i = 0; i < nr_pages; i++) { + struct lib_ring_buffer_backend_page *backend_page; + + backend_page = &pages->p[i]; + flush_dcache_page(pfn_to_page(backend_page->pfn)); + } +} +#else +static void lib_ring_buffer_flush_read_subbuf_dcache( + const struct lib_ring_buffer_config *config, + struct channel *chan, + struct lib_ring_buffer *buf) +{ +} +#endif + +/** + * lib_ring_buffer_get_subbuf - get exclusive access to subbuffer for reading + * @buf: ring buffer + * @consumed: consumed count indicating the position where to read + * + * Returns -ENODATA if buffer is finalized, -EAGAIN if there is currently no + * data to read at consumed position, or 0 if the get operation succeeds. + * Busy-loop trying to get data if the tick_nohz sequence lock is held. + */ +int lib_ring_buffer_get_subbuf(struct lib_ring_buffer *buf, + unsigned long consumed) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long consumed_cur, consumed_idx, commit_count, write_offset; + int ret; + int finalized; + + if (buf->get_subbuf) { + /* + * Reader is trying to get a subbuffer twice. + */ + CHAN_WARN_ON(chan, 1); + return -EBUSY; + } +retry: + finalized = LTTNG_READ_ONCE(buf->finalized); + /* + * Read finalized before counters. + */ + smp_rmb(); + consumed_cur = atomic_long_read(&buf->consumed); + consumed_idx = subbuf_index(consumed, chan); + commit_count = v_read(config, &buf->commit_cold[consumed_idx].cc_sb); + /* + * Make sure we read the commit count before reading the buffer + * data and the write offset. Correct consumed offset ordering + * wrt commit count is insured by the use of cmpxchg to update + * the consumed offset. + * smp_call_function_single can fail if the remote CPU is offline, + * this is OK because then there is no wmb to execute there. + * If our thread is executing on the same CPU as the on the buffers + * belongs to, we don't have to synchronize it at all. If we are + * migrated, the scheduler will take care of the memory barriers. + * Normally, smp_call_function_single() should ensure program order when + * executing the remote function, which implies that it surrounds the + * function execution with : + * smp_mb() + * send IPI + * csd_lock_wait + * recv IPI + * smp_mb() + * exec. function + * smp_mb() + * csd unlock + * smp_mb() + * + * However, smp_call_function_single() does not seem to clearly execute + * such barriers. It depends on spinlock semantic to provide the barrier + * before executing the IPI and, when busy-looping, csd_lock_wait only + * executes smp_mb() when it has to wait for the other CPU. + * + * I don't trust this code. Therefore, let's add the smp_mb() sequence + * required ourself, even if duplicated. It has no performance impact + * anyway. + * + * smp_mb() is needed because smp_rmb() and smp_wmb() only order read vs + * read and write vs write. They do not ensure core synchronization. We + * really have to ensure total order between the 3 barriers running on + * the 2 CPUs. + */ + if (config->ipi == RING_BUFFER_IPI_BARRIER) { + if (config->sync == RING_BUFFER_SYNC_PER_CPU + && config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + if (raw_smp_processor_id() != buf->backend.cpu) { + /* Total order with IPI handler smp_mb() */ + smp_mb(); + smp_call_function_single(buf->backend.cpu, + remote_mb, NULL, 1); + /* Total order with IPI handler smp_mb() */ + smp_mb(); + } + } else { + /* Total order with IPI handler smp_mb() */ + smp_mb(); + smp_call_function(remote_mb, NULL, 1); + /* Total order with IPI handler smp_mb() */ + smp_mb(); + } + } else { + /* + * Local rmb to match the remote wmb to read the commit count + * before the buffer data and the write offset. + */ + smp_rmb(); + } + + write_offset = v_read(config, &buf->offset); + + /* + * Check that the buffer we are getting is after or at consumed_cur + * position. + */ + if ((long) subbuf_trunc(consumed, chan) + - (long) subbuf_trunc(consumed_cur, chan) < 0) + goto nodata; + + /* + * Check that the subbuffer we are trying to consume has been + * already fully committed. + */ + if (((commit_count - chan->backend.subbuf_size) + & chan->commit_count_mask) + - (buf_trunc(consumed, chan) + >> chan->backend.num_subbuf_order) + != 0) + goto nodata; + + /* + * Check that we are not about to read the same subbuffer in + * which the writer head is. + */ + if (subbuf_trunc(write_offset, chan) - subbuf_trunc(consumed, chan) + == 0) + goto nodata; + + /* + * Failure to get the subbuffer causes a busy-loop retry without going + * to a wait queue. These are caused by short-lived race windows where + * the writer is getting access to a subbuffer we were trying to get + * access to. Also checks that the "consumed" buffer count we are + * looking for matches the one contained in the subbuffer id. + */ + ret = update_read_sb_index(config, &buf->backend, &chan->backend, + consumed_idx, buf_trunc_val(consumed, chan)); + if (ret) + goto retry; + subbuffer_id_clear_noref(config, &buf->backend.buf_rsb.id); + + buf->get_subbuf_consumed = consumed; + buf->get_subbuf = 1; + + lib_ring_buffer_flush_read_subbuf_dcache(config, chan, buf); + + return 0; + +nodata: + /* + * The memory barriers __wait_event()/wake_up_interruptible() take care + * of "raw_spin_is_locked" memory ordering. + */ + if (finalized) + return -ENODATA; + else if (raw_spin_is_locked(&buf->raw_tick_nohz_spinlock)) + goto retry; + else + return -EAGAIN; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_get_subbuf); + +/** + * lib_ring_buffer_put_subbuf - release exclusive subbuffer access + * @buf: ring buffer + */ +void lib_ring_buffer_put_subbuf(struct lib_ring_buffer *buf) +{ + struct lib_ring_buffer_backend *bufb = &buf->backend; + struct channel *chan = bufb->chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long read_sb_bindex, consumed_idx, consumed; + + CHAN_WARN_ON(chan, atomic_long_read(&buf->active_readers) != 1); + + if (!buf->get_subbuf) { + /* + * Reader puts a subbuffer it did not get. + */ + CHAN_WARN_ON(chan, 1); + return; + } + consumed = buf->get_subbuf_consumed; + buf->get_subbuf = 0; + + /* + * Clear the records_unread counter. (overruns counter) + * Can still be non-zero if a file reader simply grabbed the data + * without using iterators. + * Can be below zero if an iterator is used on a snapshot more than + * once. + */ + read_sb_bindex = subbuffer_id_get_index(config, bufb->buf_rsb.id); + v_add(config, v_read(config, + &bufb->array[read_sb_bindex]->records_unread), + &bufb->records_read); + v_set(config, &bufb->array[read_sb_bindex]->records_unread, 0); + CHAN_WARN_ON(chan, config->mode == RING_BUFFER_OVERWRITE + && subbuffer_id_is_noref(config, bufb->buf_rsb.id)); + subbuffer_id_set_noref(config, &bufb->buf_rsb.id); + + /* + * Exchange the reader subbuffer with the one we put in its place in the + * writer subbuffer table. Expect the original consumed count. If + * update_read_sb_index fails, this is because the writer updated the + * subbuffer concurrently. We should therefore keep the subbuffer we + * currently have: it has become invalid to try reading this sub-buffer + * consumed count value anyway. + */ + consumed_idx = subbuf_index(consumed, chan); + update_read_sb_index(config, &buf->backend, &chan->backend, + consumed_idx, buf_trunc_val(consumed, chan)); + /* + * update_read_sb_index return value ignored. Don't exchange sub-buffer + * if the writer concurrently updated it. + */ +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_put_subbuf); + +/* + * cons_offset is an iterator on all subbuffer offsets between the reader + * position and the writer position. (inclusive) + */ +static +void lib_ring_buffer_print_subbuffer_errors(struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long cons_offset, + int cpu) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long cons_idx, commit_count, commit_count_sb; + + cons_idx = subbuf_index(cons_offset, chan); + commit_count = v_read(config, &buf->commit_hot[cons_idx].cc); + commit_count_sb = v_read(config, &buf->commit_cold[cons_idx].cc_sb); + + if (subbuf_offset(commit_count, chan) != 0) + printk(KERN_WARNING + "ring buffer %s, cpu %d: " + "commit count in subbuffer %lu,\n" + "expecting multiples of %lu bytes\n" + " [ %lu bytes committed, %lu bytes reader-visible ]\n", + chan->backend.name, cpu, cons_idx, + chan->backend.subbuf_size, + commit_count, commit_count_sb); + + printk(KERN_DEBUG "ring buffer: %s, cpu %d: %lu bytes committed\n", + chan->backend.name, cpu, commit_count); +} + +static +void lib_ring_buffer_print_buffer_errors(struct lib_ring_buffer *buf, + struct channel *chan, + void *priv, int cpu) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long write_offset, cons_offset; + + /* + * No need to order commit_count, write_offset and cons_offset reads + * because we execute at teardown when no more writer nor reader + * references are left. + */ + write_offset = v_read(config, &buf->offset); + cons_offset = atomic_long_read(&buf->consumed); + if (write_offset != cons_offset) + printk(KERN_DEBUG + "ring buffer %s, cpu %d: " + "non-consumed data\n" + " [ %lu bytes written, %lu bytes read ]\n", + chan->backend.name, cpu, write_offset, cons_offset); + + for (cons_offset = atomic_long_read(&buf->consumed); + (long) (subbuf_trunc((unsigned long) v_read(config, &buf->offset), + chan) + - cons_offset) > 0; + cons_offset = subbuf_align(cons_offset, chan)) + lib_ring_buffer_print_subbuffer_errors(buf, chan, cons_offset, + cpu); +} + +#ifdef LTTNG_RING_BUFFER_COUNT_EVENTS +static +void lib_ring_buffer_print_records_count(struct channel *chan, + struct lib_ring_buffer *buf, + int cpu) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (!strcmp(chan->backend.name, "relay-metadata")) { + printk(KERN_DEBUG "ring buffer %s: %lu records written, " + "%lu records overrun\n", + chan->backend.name, + v_read(config, &buf->records_count), + v_read(config, &buf->records_overrun)); + } else { + printk(KERN_DEBUG "ring buffer %s, cpu %d: %lu records written, " + "%lu records overrun\n", + chan->backend.name, cpu, + v_read(config, &buf->records_count), + v_read(config, &buf->records_overrun)); + } +} +#else +static +void lib_ring_buffer_print_records_count(struct channel *chan, + struct lib_ring_buffer *buf, + int cpu) +{ +} +#endif + +static +void lib_ring_buffer_print_errors(struct channel *chan, + struct lib_ring_buffer *buf, int cpu) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + void *priv = chan->backend.priv; + + lib_ring_buffer_print_records_count(chan, buf, cpu); + if (strcmp(chan->backend.name, "relay-metadata")) { + if (v_read(config, &buf->records_lost_full) + || v_read(config, &buf->records_lost_wrap) + || v_read(config, &buf->records_lost_big)) + printk(KERN_WARNING + "ring buffer %s, cpu %d: records were lost. Caused by:\n" + " [ %lu buffer full, %lu nest buffer wrap-around, " + "%lu event too big ]\n", + chan->backend.name, cpu, + v_read(config, &buf->records_lost_full), + v_read(config, &buf->records_lost_wrap), + v_read(config, &buf->records_lost_big)); + } + lib_ring_buffer_print_buffer_errors(buf, chan, priv, cpu); +} + +/* + * lib_ring_buffer_switch_old_start: Populate old subbuffer header. + * + * Only executed when the buffer is finalized, in SWITCH_FLUSH. + */ +static +void lib_ring_buffer_switch_old_start(struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + u64 tsc) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long oldidx = subbuf_index(offsets->old, chan); + unsigned long commit_count; + struct commit_counters_hot *cc_hot; + + config->cb.buffer_begin(buf, tsc, oldidx); + + /* + * Order all writes to buffer before the commit count update that will + * determine that the subbuffer is full. + */ + if (config->ipi == RING_BUFFER_IPI_BARRIER) { + /* + * Must write slot data before incrementing commit count. This + * compiler barrier is upgraded into a smp_mb() by the IPI sent + * by get_subbuf(). + */ + barrier(); + } else + smp_wmb(); + cc_hot = &buf->commit_hot[oldidx]; + v_add(config, config->cb.subbuffer_header_size(), &cc_hot->cc); + commit_count = v_read(config, &cc_hot->cc); + /* Check if the written buffer has to be delivered */ + lib_ring_buffer_check_deliver(config, buf, chan, offsets->old, + commit_count, oldidx, tsc); + lib_ring_buffer_write_commit_counter(config, buf, chan, + offsets->old + config->cb.subbuffer_header_size(), + commit_count, cc_hot); +} + +/* + * lib_ring_buffer_switch_old_end: switch old subbuffer + * + * Note : offset_old should never be 0 here. It is ok, because we never perform + * buffer switch on an empty subbuffer in SWITCH_ACTIVE mode. The caller + * increments the offset_old value when doing a SWITCH_FLUSH on an empty + * subbuffer. + */ +static +void lib_ring_buffer_switch_old_end(struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + u64 tsc) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long oldidx = subbuf_index(offsets->old - 1, chan); + unsigned long commit_count, padding_size, data_size; + struct commit_counters_hot *cc_hot; + u64 *ts_end; + + data_size = subbuf_offset(offsets->old - 1, chan) + 1; + padding_size = chan->backend.subbuf_size - data_size; + subbuffer_set_data_size(config, &buf->backend, oldidx, data_size); + + ts_end = &buf->ts_end[oldidx]; + /* + * This is the last space reservation in that sub-buffer before + * it gets delivered. This provides exclusive access to write to + * this sub-buffer's ts_end. There are also no concurrent + * readers of that ts_end because delivery of that sub-buffer is + * postponed until the commit counter is incremented for the + * current space reservation. + */ + *ts_end = tsc; + + /* + * Order all writes to buffer and store to ts_end before the commit + * count update that will determine that the subbuffer is full. + */ + if (config->ipi == RING_BUFFER_IPI_BARRIER) { + /* + * Must write slot data before incrementing commit count. This + * compiler barrier is upgraded into a smp_mb() by the IPI sent + * by get_subbuf(). + */ + barrier(); + } else + smp_wmb(); + cc_hot = &buf->commit_hot[oldidx]; + v_add(config, padding_size, &cc_hot->cc); + commit_count = v_read(config, &cc_hot->cc); + lib_ring_buffer_check_deliver(config, buf, chan, offsets->old - 1, + commit_count, oldidx, tsc); + lib_ring_buffer_write_commit_counter(config, buf, chan, + offsets->old + padding_size, commit_count, + cc_hot); +} + +/* + * lib_ring_buffer_switch_new_start: Populate new subbuffer. + * + * This code can be executed unordered : writers may already have written to the + * sub-buffer before this code gets executed, caution. The commit makes sure + * that this code is executed before the deliver of this sub-buffer. + */ +static +void lib_ring_buffer_switch_new_start(struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + u64 tsc) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long beginidx = subbuf_index(offsets->begin, chan); + unsigned long commit_count; + struct commit_counters_hot *cc_hot; + + config->cb.buffer_begin(buf, tsc, beginidx); + + /* + * Order all writes to buffer before the commit count update that will + * determine that the subbuffer is full. + */ + if (config->ipi == RING_BUFFER_IPI_BARRIER) { + /* + * Must write slot data before incrementing commit count. This + * compiler barrier is upgraded into a smp_mb() by the IPI sent + * by get_subbuf(). + */ + barrier(); + } else + smp_wmb(); + cc_hot = &buf->commit_hot[beginidx]; + v_add(config, config->cb.subbuffer_header_size(), &cc_hot->cc); + commit_count = v_read(config, &cc_hot->cc); + /* Check if the written buffer has to be delivered */ + lib_ring_buffer_check_deliver(config, buf, chan, offsets->begin, + commit_count, beginidx, tsc); + lib_ring_buffer_write_commit_counter(config, buf, chan, + offsets->begin + config->cb.subbuffer_header_size(), + commit_count, cc_hot); +} + +/* + * lib_ring_buffer_switch_new_end: finish switching current subbuffer + * + * Calls subbuffer_set_data_size() to set the data size of the current + * sub-buffer. We do not need to perform check_deliver nor commit here, + * since this task will be done by the "commit" of the event for which + * we are currently doing the space reservation. + */ +static +void lib_ring_buffer_switch_new_end(struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + u64 tsc) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long endidx, data_size; + u64 *ts_end; + + endidx = subbuf_index(offsets->end - 1, chan); + data_size = subbuf_offset(offsets->end - 1, chan) + 1; + subbuffer_set_data_size(config, &buf->backend, endidx, data_size); + ts_end = &buf->ts_end[endidx]; + /* + * This is the last space reservation in that sub-buffer before + * it gets delivered. This provides exclusive access to write to + * this sub-buffer's ts_end. There are also no concurrent + * readers of that ts_end because delivery of that sub-buffer is + * postponed until the commit counter is incremented for the + * current space reservation. + */ + *ts_end = tsc; +} + +/* + * Returns : + * 0 if ok + * !0 if execution must be aborted. + */ +static +int lib_ring_buffer_try_switch_slow(enum switch_mode mode, + struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + u64 *tsc) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long off, reserve_commit_diff; + + offsets->begin = v_read(config, &buf->offset); + offsets->old = offsets->begin; + offsets->switch_old_start = 0; + off = subbuf_offset(offsets->begin, chan); + + *tsc = config->cb.ring_buffer_clock_read(chan); + + /* + * Ensure we flush the header of an empty subbuffer when doing the + * finalize (SWITCH_FLUSH). This ensures that we end up knowing the + * total data gathering duration even if there were no records saved + * after the last buffer switch. + * In SWITCH_ACTIVE mode, switch the buffer when it contains events. + * SWITCH_ACTIVE only flushes the current subbuffer, dealing with end of + * subbuffer header as appropriate. + * The next record that reserves space will be responsible for + * populating the following subbuffer header. We choose not to populate + * the next subbuffer header here because we want to be able to use + * SWITCH_ACTIVE for periodical buffer flush and CPU tick_nohz stop + * buffer flush, which must guarantee that all the buffer content + * (records and header timestamps) are visible to the reader. This is + * required for quiescence guarantees for the fusion merge. + */ + if (mode != SWITCH_FLUSH && !off) + return -1; /* we do not have to switch : buffer is empty */ + + if (unlikely(off == 0)) { + unsigned long sb_index, commit_count; + + /* + * We are performing a SWITCH_FLUSH. At this stage, there are no + * concurrent writes into the buffer. + * + * The client does not save any header information. Don't + * switch empty subbuffer on finalize, because it is invalid to + * deliver a completely empty subbuffer. + */ + if (!config->cb.subbuffer_header_size()) + return -1; + + /* Test new buffer integrity */ + sb_index = subbuf_index(offsets->begin, chan); + commit_count = v_read(config, + &buf->commit_cold[sb_index].cc_sb); + reserve_commit_diff = + (buf_trunc(offsets->begin, chan) + >> chan->backend.num_subbuf_order) + - (commit_count & chan->commit_count_mask); + if (likely(reserve_commit_diff == 0)) { + /* Next subbuffer not being written to. */ + if (unlikely(config->mode != RING_BUFFER_OVERWRITE && + subbuf_trunc(offsets->begin, chan) + - subbuf_trunc((unsigned long) + atomic_long_read(&buf->consumed), chan) + >= chan->backend.buf_size)) { + /* + * We do not overwrite non consumed buffers + * and we are full : don't switch. + */ + return -1; + } else { + /* + * Next subbuffer not being written to, and we + * are either in overwrite mode or the buffer is + * not full. It's safe to write in this new + * subbuffer. + */ + } + } else { + /* + * Next subbuffer reserve offset does not match the + * commit offset. Don't perform switch in + * producer-consumer and overwrite mode. Caused by + * either a writer OOPS or too many nested writes over a + * reserve/commit pair. + */ + return -1; + } + + /* + * Need to write the subbuffer start header on finalize. + */ + offsets->switch_old_start = 1; + } + offsets->begin = subbuf_align(offsets->begin, chan); + /* Note: old points to the next subbuf at offset 0 */ + offsets->end = offsets->begin; + return 0; +} + +/* + * Force a sub-buffer switch. This operation is completely reentrant : can be + * called while tracing is active with absolutely no lock held. + * + * Note, however, that as a v_cmpxchg is used for some atomic + * operations, this function must be called from the CPU which owns the buffer + * for a ACTIVE flush. + */ +void lib_ring_buffer_switch_slow(struct lib_ring_buffer *buf, enum switch_mode mode) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct switch_offsets offsets; + unsigned long oldidx; + u64 tsc; + + offsets.size = 0; + + /* + * Perform retryable operations. + */ + do { + if (lib_ring_buffer_try_switch_slow(mode, buf, chan, &offsets, + &tsc)) + return; /* Switch not needed */ + } while (v_cmpxchg(config, &buf->offset, offsets.old, offsets.end) + != offsets.old); + + /* + * Atomically update last_tsc. This update races against concurrent + * atomic updates, but the race will always cause supplementary full TSC + * records, never the opposite (missing a full TSC record when it would + * be needed). + */ + save_last_tsc(config, buf, tsc); + + /* + * Push the reader if necessary + */ + lib_ring_buffer_reserve_push_reader(buf, chan, offsets.old); + + oldidx = subbuf_index(offsets.old, chan); + lib_ring_buffer_clear_noref(config, &buf->backend, oldidx); + + /* + * May need to populate header start on SWITCH_FLUSH. + */ + if (offsets.switch_old_start) { + lib_ring_buffer_switch_old_start(buf, chan, &offsets, tsc); + offsets.old += config->cb.subbuffer_header_size(); + } + + /* + * Switch old subbuffer. + */ + lib_ring_buffer_switch_old_end(buf, chan, &offsets, tsc); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_switch_slow); + +struct switch_param { + struct lib_ring_buffer *buf; + enum switch_mode mode; +}; + +static void remote_switch(void *info) +{ + struct switch_param *param = info; + struct lib_ring_buffer *buf = param->buf; + + lib_ring_buffer_switch_slow(buf, param->mode); +} + +static void _lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf, + enum switch_mode mode) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + int ret; + struct switch_param param; + + /* + * With global synchronization we don't need to use the IPI scheme. + */ + if (config->sync == RING_BUFFER_SYNC_GLOBAL) { + lib_ring_buffer_switch_slow(buf, mode); + return; + } + + /* + * Disabling preemption ensures two things: first, that the + * target cpu is not taken concurrently offline while we are within + * smp_call_function_single(). Secondly, if it happens that the + * CPU is not online, our own call to lib_ring_buffer_switch_slow() + * needs to be protected from CPU hotplug handlers, which can + * also perform a remote subbuffer switch. + */ + preempt_disable(); + param.buf = buf; + param.mode = mode; + ret = smp_call_function_single(buf->backend.cpu, + remote_switch, ¶m, 1); + if (ret) { + /* Remote CPU is offline, do it ourself. */ + lib_ring_buffer_switch_slow(buf, mode); + } + preempt_enable(); +} + +/* Switch sub-buffer if current sub-buffer is non-empty. */ +void lib_ring_buffer_switch_remote(struct lib_ring_buffer *buf) +{ + _lib_ring_buffer_switch_remote(buf, SWITCH_ACTIVE); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_switch_remote); + +/* Switch sub-buffer even if current sub-buffer is empty. */ +void lib_ring_buffer_switch_remote_empty(struct lib_ring_buffer *buf) +{ + _lib_ring_buffer_switch_remote(buf, SWITCH_FLUSH); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_switch_remote_empty); + +/* + * Returns : + * 0 if ok + * -ENOSPC if event size is too large for packet. + * -ENOBUFS if there is currently not enough space in buffer for the event. + * -EIO if data cannot be written into the buffer for any other reason. + */ +static +int lib_ring_buffer_try_reserve_slow(struct lib_ring_buffer *buf, + struct channel *chan, + struct switch_offsets *offsets, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long reserve_commit_diff, offset_cmp; + +retry: + offsets->begin = offset_cmp = v_read(config, &buf->offset); + offsets->old = offsets->begin; + offsets->switch_new_start = 0; + offsets->switch_new_end = 0; + offsets->switch_old_end = 0; + offsets->pre_header_padding = 0; + + ctx->tsc = config->cb.ring_buffer_clock_read(chan); + if ((int64_t) ctx->tsc == -EIO) + return -EIO; + + if (last_tsc_overflow(config, buf, ctx->tsc)) + ctx->rflags |= RING_BUFFER_RFLAG_FULL_TSC; + + if (unlikely(subbuf_offset(offsets->begin, ctx->chan) == 0)) { + offsets->switch_new_start = 1; /* For offsets->begin */ + } else { + offsets->size = config->cb.record_header_size(config, chan, + offsets->begin, + &offsets->pre_header_padding, + ctx, client_ctx); + offsets->size += + lib_ring_buffer_align(offsets->begin + offsets->size, + ctx->largest_align) + + ctx->data_size; + if (unlikely(subbuf_offset(offsets->begin, chan) + + offsets->size > chan->backend.subbuf_size)) { + offsets->switch_old_end = 1; /* For offsets->old */ + offsets->switch_new_start = 1; /* For offsets->begin */ + } + } + if (unlikely(offsets->switch_new_start)) { + unsigned long sb_index, commit_count; + + /* + * We are typically not filling the previous buffer completely. + */ + if (likely(offsets->switch_old_end)) + offsets->begin = subbuf_align(offsets->begin, chan); + offsets->begin = offsets->begin + + config->cb.subbuffer_header_size(); + /* Test new buffer integrity */ + sb_index = subbuf_index(offsets->begin, chan); + /* + * Read buf->offset before buf->commit_cold[sb_index].cc_sb. + * lib_ring_buffer_check_deliver() has the matching + * memory barriers required around commit_cold cc_sb + * updates to ensure reserve and commit counter updates + * are not seen reordered when updated by another CPU. + */ + smp_rmb(); + commit_count = v_read(config, + &buf->commit_cold[sb_index].cc_sb); + /* Read buf->commit_cold[sb_index].cc_sb before buf->offset. */ + smp_rmb(); + if (unlikely(offset_cmp != v_read(config, &buf->offset))) { + /* + * The reserve counter have been concurrently updated + * while we read the commit counter. This means the + * commit counter we read might not match buf->offset + * due to concurrent update. We therefore need to retry. + */ + goto retry; + } + reserve_commit_diff = + (buf_trunc(offsets->begin, chan) + >> chan->backend.num_subbuf_order) + - (commit_count & chan->commit_count_mask); + if (likely(reserve_commit_diff == 0)) { + /* Next subbuffer not being written to. */ + if (unlikely(config->mode != RING_BUFFER_OVERWRITE && + subbuf_trunc(offsets->begin, chan) + - subbuf_trunc((unsigned long) + atomic_long_read(&buf->consumed), chan) + >= chan->backend.buf_size)) { + /* + * We do not overwrite non consumed buffers + * and we are full : record is lost. + */ + v_inc(config, &buf->records_lost_full); + return -ENOBUFS; + } else { + /* + * Next subbuffer not being written to, and we + * are either in overwrite mode or the buffer is + * not full. It's safe to write in this new + * subbuffer. + */ + } + } else { + /* + * Next subbuffer reserve offset does not match the + * commit offset, and this did not involve update to the + * reserve counter. Drop record in producer-consumer and + * overwrite mode. Caused by either a writer OOPS or + * too many nested writes over a reserve/commit pair. + */ + v_inc(config, &buf->records_lost_wrap); + return -EIO; + } + offsets->size = + config->cb.record_header_size(config, chan, + offsets->begin, + &offsets->pre_header_padding, + ctx, client_ctx); + offsets->size += + lib_ring_buffer_align(offsets->begin + offsets->size, + ctx->largest_align) + + ctx->data_size; + if (unlikely(subbuf_offset(offsets->begin, chan) + + offsets->size > chan->backend.subbuf_size)) { + /* + * Record too big for subbuffers, report error, don't + * complete the sub-buffer switch. + */ + v_inc(config, &buf->records_lost_big); + return -ENOSPC; + } else { + /* + * We just made a successful buffer switch and the + * record fits in the new subbuffer. Let's write. + */ + } + } else { + /* + * Record fits in the current buffer and we are not on a switch + * boundary. It's safe to write. + */ + } + offsets->end = offsets->begin + offsets->size; + + if (unlikely(subbuf_offset(offsets->end, chan) == 0)) { + /* + * The offset_end will fall at the very beginning of the next + * subbuffer. + */ + offsets->switch_new_end = 1; /* For offsets->begin */ + } + return 0; +} + +static struct lib_ring_buffer *get_current_buf(struct channel *chan, int cpu) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + return per_cpu_ptr(chan->backend.buf, cpu); + else + return chan->backend.buf; +} + +void lib_ring_buffer_lost_event_too_big(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf = get_current_buf(chan, smp_processor_id()); + + v_inc(config, &buf->records_lost_big); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_lost_event_too_big); + +/** + * lib_ring_buffer_reserve_slow - Atomic slot reservation in a buffer. + * @ctx: ring buffer context. + * + * Return : -NOBUFS if not enough space, -ENOSPC if event size too large, + * -EIO for other errors, else returns 0. + * It will take care of sub-buffer switching. + */ +int lib_ring_buffer_reserve_slow(struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + struct channel *chan = ctx->chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + struct switch_offsets offsets; + int ret; + + ctx->buf = buf = get_current_buf(chan, ctx->cpu); + offsets.size = 0; + + do { + ret = lib_ring_buffer_try_reserve_slow(buf, chan, &offsets, + ctx, client_ctx); + if (unlikely(ret)) + return ret; + } while (unlikely(v_cmpxchg(config, &buf->offset, offsets.old, + offsets.end) + != offsets.old)); + + /* + * Atomically update last_tsc. This update races against concurrent + * atomic updates, but the race will always cause supplementary full TSC + * records, never the opposite (missing a full TSC record when it would + * be needed). + */ + save_last_tsc(config, buf, ctx->tsc); + + /* + * Push the reader if necessary + */ + lib_ring_buffer_reserve_push_reader(buf, chan, offsets.end - 1); + + /* + * Clear noref flag for this subbuffer. + */ + lib_ring_buffer_clear_noref(config, &buf->backend, + subbuf_index(offsets.end - 1, chan)); + + /* + * Switch old subbuffer if needed. + */ + if (unlikely(offsets.switch_old_end)) { + lib_ring_buffer_clear_noref(config, &buf->backend, + subbuf_index(offsets.old - 1, chan)); + lib_ring_buffer_switch_old_end(buf, chan, &offsets, ctx->tsc); + } + + /* + * Populate new subbuffer. + */ + if (unlikely(offsets.switch_new_start)) + lib_ring_buffer_switch_new_start(buf, chan, &offsets, ctx->tsc); + + if (unlikely(offsets.switch_new_end)) + lib_ring_buffer_switch_new_end(buf, chan, &offsets, ctx->tsc); + + ctx->slot_size = offsets.size; + ctx->pre_offset = offsets.begin; + ctx->buf_offset = offsets.begin + offsets.pre_header_padding; + return 0; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_reserve_slow); + +static +void lib_ring_buffer_vmcore_check_deliver(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + unsigned long commit_count, + unsigned long idx) +{ + if (config->oops == RING_BUFFER_OOPS_CONSISTENCY) + v_set(config, &buf->commit_hot[idx].seq, commit_count); +} + +/* + * The ring buffer can count events recorded and overwritten per buffer, + * but it is disabled by default due to its performance overhead. + */ +#ifdef LTTNG_RING_BUFFER_COUNT_EVENTS +static +void deliver_count_events(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + unsigned long idx) +{ + v_add(config, subbuffer_get_records_count(config, + &buf->backend, idx), + &buf->records_count); + v_add(config, subbuffer_count_records_overrun(config, + &buf->backend, idx), + &buf->records_overrun); +} +#else /* LTTNG_RING_BUFFER_COUNT_EVENTS */ +static +void deliver_count_events(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + unsigned long idx) +{ +} +#endif /* #else LTTNG_RING_BUFFER_COUNT_EVENTS */ + + +void lib_ring_buffer_check_deliver_slow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + struct channel *chan, + unsigned long offset, + unsigned long commit_count, + unsigned long idx, + u64 tsc) +{ + unsigned long old_commit_count = commit_count + - chan->backend.subbuf_size; + + /* + * If we succeeded at updating cc_sb below, we are the subbuffer + * writer delivering the subbuffer. Deals with concurrent + * updates of the "cc" value without adding a add_return atomic + * operation to the fast path. + * + * We are doing the delivery in two steps: + * - First, we cmpxchg() cc_sb to the new value + * old_commit_count + 1. This ensures that we are the only + * subbuffer user successfully filling the subbuffer, but we + * do _not_ set the cc_sb value to "commit_count" yet. + * Therefore, other writers that would wrap around the ring + * buffer and try to start writing to our subbuffer would + * have to drop records, because it would appear as + * non-filled. + * We therefore have exclusive access to the subbuffer control + * structures. This mutual exclusion with other writers is + * crucially important to perform record overruns count in + * flight recorder mode locklessly. + * - When we are ready to release the subbuffer (either for + * reading or for overrun by other writers), we simply set the + * cc_sb value to "commit_count" and perform delivery. + * + * The subbuffer size is least 2 bytes (minimum size: 1 page). + * This guarantees that old_commit_count + 1 != commit_count. + */ + + /* + * Order prior updates to reserve count prior to the + * commit_cold cc_sb update. + */ + smp_wmb(); + if (likely(v_cmpxchg(config, &buf->commit_cold[idx].cc_sb, + old_commit_count, old_commit_count + 1) + == old_commit_count)) { + u64 *ts_end; + + /* + * Start of exclusive subbuffer access. We are + * guaranteed to be the last writer in this subbuffer + * and any other writer trying to access this subbuffer + * in this state is required to drop records. + * + * We can read the ts_end for the current sub-buffer + * which has been saved by the very last space + * reservation for the current sub-buffer. + * + * Order increment of commit counter before reading ts_end. + */ + smp_mb(); + ts_end = &buf->ts_end[idx]; + deliver_count_events(config, buf, idx); + config->cb.buffer_end(buf, *ts_end, idx, + lib_ring_buffer_get_data_size(config, + buf, + idx)); + + /* + * Increment the packet counter while we have exclusive + * access. + */ + subbuffer_inc_packet_count(config, &buf->backend, idx); + + /* + * Set noref flag and offset for this subbuffer id. + * Contains a memory barrier that ensures counter stores + * are ordered before set noref and offset. + */ + lib_ring_buffer_set_noref_offset(config, &buf->backend, idx, + buf_trunc_val(offset, chan)); + + /* + * Order set_noref and record counter updates before the + * end of subbuffer exclusive access. Orders with + * respect to writers coming into the subbuffer after + * wrap around, and also order wrt concurrent readers. + */ + smp_mb(); + /* End of exclusive subbuffer access */ + v_set(config, &buf->commit_cold[idx].cc_sb, + commit_count); + /* + * Order later updates to reserve count after + * the commit_cold cc_sb update. + */ + smp_wmb(); + lib_ring_buffer_vmcore_check_deliver(config, buf, + commit_count, idx); + + /* + * RING_BUFFER_WAKEUP_BY_WRITER wakeup is not lock-free. + */ + if (config->wakeup == RING_BUFFER_WAKEUP_BY_WRITER + && atomic_long_read(&buf->active_readers) + && lib_ring_buffer_poll_deliver(config, buf, chan)) { + wake_up_interruptible(&buf->read_wait); + wake_up_interruptible(&chan->read_wait); + } + + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_check_deliver_slow); + +int __init init_lib_ring_buffer_frontend(void) +{ + int cpu; + + for_each_possible_cpu(cpu) + spin_lock_init(&per_cpu(ring_buffer_nohz_lock, cpu)); + return 0; +} + +module_init(init_lib_ring_buffer_frontend); + +void __exit exit_lib_ring_buffer_frontend(void) +{ +} + +module_exit(exit_lib_ring_buffer_frontend); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_iterator.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_iterator.c new file mode 100644 index 000000000000..7b4f20a5a208 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_iterator.c @@ -0,0 +1,841 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * ring_buffer_iterator.c + * + * Ring buffer and channel iterators. Get each event of a channel in order. Uses + * a prio heap for per-cpu buffers, giving a O(log(NR_CPUS)) algorithmic + * complexity for the "get next event" operation. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include + +/* + * Safety factor taking into account internal kernel interrupt latency. + * Assuming 250ms worse-case latency. + */ +#define MAX_SYSTEM_LATENCY 250 + +/* + * Maximum delta expected between trace clocks. At most 1 jiffy delta. + */ +#define MAX_CLOCK_DELTA (jiffies_to_usecs(1) * 1000) + +/** + * lib_ring_buffer_get_next_record - Get the next record in a buffer. + * @chan: channel + * @buf: buffer + * + * Returns the size of the event read, -EAGAIN if buffer is empty, -ENODATA if + * buffer is empty and finalized. The buffer must already be opened for reading. + */ +ssize_t lib_ring_buffer_get_next_record(struct channel *chan, + struct lib_ring_buffer *buf) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer_iter *iter = &buf->iter; + int ret; + +restart: + switch (iter->state) { + case ITER_GET_SUBBUF: + ret = lib_ring_buffer_get_next_subbuf(buf); + if (ret && !LTTNG_READ_ONCE(buf->finalized) + && config->alloc == RING_BUFFER_ALLOC_GLOBAL) { + /* + * Use "pull" scheme for global buffers. The reader + * itself flushes the buffer to "pull" data not visible + * to readers yet. Flush current subbuffer and re-try. + * + * Per-CPU buffers rather use a "push" scheme because + * the IPI needed to flush all CPU's buffers is too + * costly. In the "push" scheme, the reader waits for + * the writer periodic timer to flush the + * buffers (keeping track of a quiescent state + * timestamp). Therefore, the writer "pushes" data out + * of the buffers rather than letting the reader "pull" + * data from the buffer. + */ + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + ret = lib_ring_buffer_get_next_subbuf(buf); + } + if (ret) + return ret; + iter->consumed = buf->cons_snapshot; + iter->data_size = lib_ring_buffer_get_read_data_size(config, buf); + iter->read_offset = iter->consumed; + /* skip header */ + iter->read_offset += config->cb.subbuffer_header_size(); + iter->state = ITER_TEST_RECORD; + goto restart; + case ITER_TEST_RECORD: + if (iter->read_offset - iter->consumed >= iter->data_size) { + iter->state = ITER_PUT_SUBBUF; + } else { + CHAN_WARN_ON(chan, !config->cb.record_get); + config->cb.record_get(config, chan, buf, + iter->read_offset, + &iter->header_len, + &iter->payload_len, + &iter->timestamp); + iter->read_offset += iter->header_len; + subbuffer_consume_record(config, &buf->backend); + iter->state = ITER_NEXT_RECORD; + return iter->payload_len; + } + goto restart; + case ITER_NEXT_RECORD: + iter->read_offset += iter->payload_len; + iter->state = ITER_TEST_RECORD; + goto restart; + case ITER_PUT_SUBBUF: + lib_ring_buffer_put_next_subbuf(buf); + iter->state = ITER_GET_SUBBUF; + goto restart; + default: + CHAN_WARN_ON(chan, 1); /* Should not happen */ + return -EPERM; + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_get_next_record); + +static int buf_is_higher(void *a, void *b) +{ + struct lib_ring_buffer *bufa = a; + struct lib_ring_buffer *bufb = b; + + /* Consider lowest timestamps to be at the top of the heap */ + return (bufa->iter.timestamp < bufb->iter.timestamp); +} + +static +void lib_ring_buffer_get_empty_buf_records(const struct lib_ring_buffer_config *config, + struct channel *chan) +{ + struct lttng_ptr_heap *heap = &chan->iter.heap; + struct lib_ring_buffer *buf, *tmp; + ssize_t len; + + list_for_each_entry_safe(buf, tmp, &chan->iter.empty_head, + iter.empty_node) { + len = lib_ring_buffer_get_next_record(chan, buf); + + /* + * Deal with -EAGAIN and -ENODATA. + * len >= 0 means record contains data. + * -EBUSY should never happen, because we support only one + * reader. + */ + switch (len) { + case -EAGAIN: + /* Keep node in empty list */ + break; + case -ENODATA: + /* + * Buffer is finalized. Don't add to list of empty + * buffer, because it has no more data to provide, ever. + */ + list_del(&buf->iter.empty_node); + break; + case -EBUSY: + CHAN_WARN_ON(chan, 1); + break; + default: + /* + * Insert buffer into the heap, remove from empty buffer + * list. + */ + CHAN_WARN_ON(chan, len < 0); + list_del(&buf->iter.empty_node); + CHAN_WARN_ON(chan, lttng_heap_insert(heap, buf)); + } + } +} + +static +void lib_ring_buffer_wait_for_qs(const struct lib_ring_buffer_config *config, + struct channel *chan) +{ + u64 timestamp_qs; + unsigned long wait_msecs; + + /* + * No need to wait if no empty buffers are present. + */ + if (list_empty(&chan->iter.empty_head)) + return; + + timestamp_qs = config->cb.ring_buffer_clock_read(chan); + /* + * We need to consider previously empty buffers. + * Do a get next buf record on each of them. Add them to + * the heap if they have data. If at least one of them + * don't have data, we need to wait for + * switch_timer_interval + MAX_SYSTEM_LATENCY (so we are sure the + * buffers have been switched either by the timer or idle entry) and + * check them again, adding them if they have data. + */ + lib_ring_buffer_get_empty_buf_records(config, chan); + + /* + * No need to wait if no empty buffers are present. + */ + if (list_empty(&chan->iter.empty_head)) + return; + + /* + * We need to wait for the buffer switch timer to run. If the + * CPU is idle, idle entry performed the switch. + * TODO: we could optimize further by skipping the sleep if all + * empty buffers belong to idle or offline cpus. + */ + wait_msecs = jiffies_to_msecs(chan->switch_timer_interval); + wait_msecs += MAX_SYSTEM_LATENCY; + msleep(wait_msecs); + lib_ring_buffer_get_empty_buf_records(config, chan); + /* + * Any buffer still in the empty list here cannot possibly + * contain an event with a timestamp prior to "timestamp_qs". + * The new quiescent state timestamp is the one we grabbed + * before waiting for buffer data. It is therefore safe to + * ignore empty buffers up to last_qs timestamp for fusion + * merge. + */ + chan->iter.last_qs = timestamp_qs; +} + +/** + * channel_get_next_record - Get the next record in a channel. + * @chan: channel + * @ret_buf: the buffer in which the event is located (output) + * + * Returns the size of new current event, -EAGAIN if all buffers are empty, + * -ENODATA if all buffers are empty and finalized. The channel must already be + * opened for reading. + */ + +ssize_t channel_get_next_record(struct channel *chan, + struct lib_ring_buffer **ret_buf) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + struct lttng_ptr_heap *heap; + ssize_t len; + + if (config->alloc == RING_BUFFER_ALLOC_GLOBAL) { + *ret_buf = channel_get_ring_buffer(config, chan, 0); + return lib_ring_buffer_get_next_record(chan, *ret_buf); + } + + heap = &chan->iter.heap; + + /* + * get next record for topmost buffer. + */ + buf = lttng_heap_maximum(heap); + if (buf) { + len = lib_ring_buffer_get_next_record(chan, buf); + /* + * Deal with -EAGAIN and -ENODATA. + * len >= 0 means record contains data. + */ + switch (len) { + case -EAGAIN: + buf->iter.timestamp = 0; + list_add(&buf->iter.empty_node, &chan->iter.empty_head); + /* Remove topmost buffer from the heap */ + CHAN_WARN_ON(chan, lttng_heap_remove(heap) != buf); + break; + case -ENODATA: + /* + * Buffer is finalized. Remove buffer from heap and + * don't add to list of empty buffer, because it has no + * more data to provide, ever. + */ + CHAN_WARN_ON(chan, lttng_heap_remove(heap) != buf); + break; + case -EBUSY: + CHAN_WARN_ON(chan, 1); + break; + default: + /* + * Reinsert buffer into the heap. Note that heap can be + * partially empty, so we need to use + * lttng_heap_replace_max(). + */ + CHAN_WARN_ON(chan, len < 0); + CHAN_WARN_ON(chan, lttng_heap_replace_max(heap, buf) != buf); + break; + } + } + + buf = lttng_heap_maximum(heap); + if (!buf || buf->iter.timestamp > chan->iter.last_qs) { + /* + * Deal with buffers previously showing no data. + * Add buffers containing data to the heap, update + * last_qs. + */ + lib_ring_buffer_wait_for_qs(config, chan); + } + + *ret_buf = buf = lttng_heap_maximum(heap); + if (buf) { + /* + * If this warning triggers, you probably need to check your + * system interrupt latency. Typical causes: too many printk() + * output going to a serial console with interrupts off. + * Allow for MAX_CLOCK_DELTA ns timestamp delta going backward. + * Observed on SMP KVM setups with trace_clock(). + */ + if (chan->iter.last_timestamp + > (buf->iter.timestamp + MAX_CLOCK_DELTA)) { + printk(KERN_WARNING "ring_buffer: timestamps going " + "backward. Last time %llu ns, cpu %d, " + "current time %llu ns, cpu %d, " + "delta %llu ns.\n", + chan->iter.last_timestamp, chan->iter.last_cpu, + buf->iter.timestamp, buf->backend.cpu, + chan->iter.last_timestamp - buf->iter.timestamp); + CHAN_WARN_ON(chan, 1); + } + chan->iter.last_timestamp = buf->iter.timestamp; + chan->iter.last_cpu = buf->backend.cpu; + return buf->iter.payload_len; + } else { + /* Heap is empty */ + if (list_empty(&chan->iter.empty_head)) + return -ENODATA; /* All buffers finalized */ + else + return -EAGAIN; /* Temporarily empty */ + } +} +EXPORT_SYMBOL_GPL(channel_get_next_record); + +static +void lib_ring_buffer_iterator_init(struct channel *chan, struct lib_ring_buffer *buf) +{ + if (buf->iter.allocated) + return; + + buf->iter.allocated = 1; + if (chan->iter.read_open && !buf->iter.read_open) { + CHAN_WARN_ON(chan, lib_ring_buffer_open_read(buf) != 0); + buf->iter.read_open = 1; + } + + /* Add to list of buffers without any current record */ + if (chan->backend.config.alloc == RING_BUFFER_ALLOC_PER_CPU) + list_add(&buf->iter.empty_node, &chan->iter.empty_head); +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +int lttng_cpuhp_rb_iter_online(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct channel *chan = container_of(node, struct channel, + cpuhp_iter_online); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + lib_ring_buffer_iterator_init(chan, buf); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_cpuhp_rb_iter_online); + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#ifdef CONFIG_HOTPLUG_CPU +static +int channel_iterator_cpu_hotplug(struct notifier_block *nb, + unsigned long action, + void *hcpu) +{ + unsigned int cpu = (unsigned long)hcpu; + struct channel *chan = container_of(nb, struct channel, + hp_iter_notifier); + struct lib_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (!chan->hp_iter_enable) + return NOTIFY_DONE; + + CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_GLOBAL); + + switch (action) { + case CPU_DOWN_FAILED: + case CPU_DOWN_FAILED_FROZEN: + case CPU_ONLINE: + case CPU_ONLINE_FROZEN: + lib_ring_buffer_iterator_init(chan, buf); + return NOTIFY_OK; + default: + return NOTIFY_DONE; + } +} +#endif + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +int channel_iterator_init(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + int ret; + + INIT_LIST_HEAD(&chan->iter.empty_head); + ret = lttng_heap_init(&chan->iter.heap, + num_possible_cpus(), + GFP_KERNEL, buf_is_higher); + if (ret) + return ret; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + chan->cpuhp_iter_online.component = LTTNG_RING_BUFFER_ITER; + ret = cpuhp_state_add_instance(lttng_rb_hp_online, + &chan->cpuhp_iter_online.node); + if (ret) + return ret; +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + { + int cpu; + + /* + * In case of non-hotplug cpu, if the ring-buffer is allocated + * in early initcall, it will not be notified of secondary cpus. + * In that off case, we need to allocate for all possible cpus. + */ +#ifdef CONFIG_HOTPLUG_CPU + chan->hp_iter_notifier.notifier_call = + channel_iterator_cpu_hotplug; + chan->hp_iter_notifier.priority = 10; + register_cpu_notifier(&chan->hp_iter_notifier); + + get_online_cpus(); + for_each_online_cpu(cpu) { + buf = per_cpu_ptr(chan->backend.buf, cpu); + lib_ring_buffer_iterator_init(chan, buf); + } + chan->hp_iter_enable = 1; + put_online_cpus(); +#else + for_each_possible_cpu(cpu) { + buf = per_cpu_ptr(chan->backend.buf, cpu); + lib_ring_buffer_iterator_init(chan, buf); + } +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + } else { + buf = channel_get_ring_buffer(config, chan, 0); + lib_ring_buffer_iterator_init(chan, buf); + } + return 0; +} + +void channel_iterator_unregister_notifiers(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + { + int ret; + + ret = cpuhp_state_remove_instance(lttng_rb_hp_online, + &chan->cpuhp_iter_online.node); + WARN_ON(ret); + } +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + chan->hp_iter_enable = 0; + unregister_cpu_notifier(&chan->hp_iter_notifier); +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + } +} + +void channel_iterator_free(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + lttng_heap_free(&chan->iter.heap); +} + +int lib_ring_buffer_iterator_open(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + CHAN_WARN_ON(chan, config->output != RING_BUFFER_ITERATOR); + return lib_ring_buffer_open_read(buf); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_iterator_open); + +/* + * Note: Iterators must not be mixed with other types of outputs, because an + * iterator can leave the buffer in "GET" state, which is not consistent with + * other types of output (mmap, splice, raw data read). + */ +void lib_ring_buffer_iterator_release(struct lib_ring_buffer *buf) +{ + lib_ring_buffer_release_read(buf); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_iterator_release); + +int channel_iterator_open(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + int ret = 0, cpu; + + CHAN_WARN_ON(chan, config->output != RING_BUFFER_ITERATOR); + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + get_online_cpus(); + /* Allow CPU hotplug to keep track of opened reader */ + chan->iter.read_open = 1; + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(config, chan, cpu); + ret = lib_ring_buffer_iterator_open(buf); + if (ret) + goto error; + buf->iter.read_open = 1; + } + put_online_cpus(); + } else { + buf = channel_get_ring_buffer(config, chan, 0); + ret = lib_ring_buffer_iterator_open(buf); + } + return ret; +error: + /* Error should always happen on CPU 0, hence no close is required. */ + CHAN_WARN_ON(chan, cpu != 0); + put_online_cpus(); + return ret; +} +EXPORT_SYMBOL_GPL(channel_iterator_open); + +void channel_iterator_release(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + int cpu; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { + get_online_cpus(); + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(config, chan, cpu); + if (buf->iter.read_open) { + lib_ring_buffer_iterator_release(buf); + buf->iter.read_open = 0; + } + } + chan->iter.read_open = 0; + put_online_cpus(); + } else { + buf = channel_get_ring_buffer(config, chan, 0); + lib_ring_buffer_iterator_release(buf); + } +} +EXPORT_SYMBOL_GPL(channel_iterator_release); + +void lib_ring_buffer_iterator_reset(struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + + if (buf->iter.state != ITER_GET_SUBBUF) + lib_ring_buffer_put_next_subbuf(buf); + buf->iter.state = ITER_GET_SUBBUF; + /* Remove from heap (if present). */ + if (lttng_heap_cherrypick(&chan->iter.heap, buf)) + list_add(&buf->iter.empty_node, &chan->iter.empty_head); + buf->iter.timestamp = 0; + buf->iter.header_len = 0; + buf->iter.payload_len = 0; + buf->iter.consumed = 0; + buf->iter.read_offset = 0; + buf->iter.data_size = 0; + /* Don't reset allocated and read_open */ +} + +void channel_iterator_reset(struct channel *chan) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lib_ring_buffer *buf; + int cpu; + + /* Empty heap, put into empty_head */ + while ((buf = lttng_heap_remove(&chan->iter.heap)) != NULL) + list_add(&buf->iter.empty_node, &chan->iter.empty_head); + + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(config, chan, cpu); + lib_ring_buffer_iterator_reset(buf); + } + /* Don't reset read_open */ + chan->iter.last_qs = 0; + chan->iter.last_timestamp = 0; + chan->iter.last_cpu = 0; + chan->iter.len_left = 0; +} + +/* + * Ring buffer payload extraction read() implementation. + */ +static +ssize_t channel_ring_buffer_file_read(struct file *filp, + char __user *user_buf, + size_t count, + loff_t *ppos, + struct channel *chan, + struct lib_ring_buffer *buf, + int fusionmerge) +{ + const struct lib_ring_buffer_config *config = &chan->backend.config; + size_t read_count = 0, read_offset; + ssize_t len; + + might_sleep(); + if (!lttng_access_ok(VERIFY_WRITE, user_buf, count)) + return -EFAULT; + + /* Finish copy of previous record */ + if (*ppos != 0) { + if (read_count < count) { + len = chan->iter.len_left; + read_offset = *ppos; + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU + && fusionmerge) + buf = lttng_heap_maximum(&chan->iter.heap); + CHAN_WARN_ON(chan, !buf); + goto skip_get_next; + } + } + + while (read_count < count) { + size_t copy_len, space_left; + + if (fusionmerge) + len = channel_get_next_record(chan, &buf); + else + len = lib_ring_buffer_get_next_record(chan, buf); +len_test: + if (len < 0) { + /* + * Check if buffer is finalized (end of file). + */ + if (len == -ENODATA) { + /* A 0 read_count will tell about end of file */ + goto nodata; + } + if (filp->f_flags & O_NONBLOCK) { + if (!read_count) + read_count = -EAGAIN; + goto nodata; + } else { + int error; + + /* + * No data available at the moment, return what + * we got. + */ + if (read_count) + goto nodata; + + /* + * Wait for returned len to be >= 0 or -ENODATA. + */ + if (fusionmerge) + error = wait_event_interruptible( + chan->read_wait, + ((len = channel_get_next_record(chan, + &buf)), len != -EAGAIN)); + else + error = wait_event_interruptible( + buf->read_wait, + ((len = lib_ring_buffer_get_next_record( + chan, buf)), len != -EAGAIN)); + CHAN_WARN_ON(chan, len == -EBUSY); + if (error) { + read_count = error; + goto nodata; + } + CHAN_WARN_ON(chan, len < 0 && len != -ENODATA); + goto len_test; + } + } + read_offset = buf->iter.read_offset; +skip_get_next: + space_left = count - read_count; + if (len <= space_left) { + copy_len = len; + chan->iter.len_left = 0; + *ppos = 0; + } else { + copy_len = space_left; + chan->iter.len_left = len - copy_len; + *ppos = read_offset + copy_len; + } + if (__lib_ring_buffer_copy_to_user(&buf->backend, read_offset, + &user_buf[read_count], + copy_len)) { + /* + * Leave the len_left and ppos values at their current + * state, as we currently have a valid event to read. + */ + return -EFAULT; + } + read_count += copy_len; + }; + return read_count; + +nodata: + *ppos = 0; + chan->iter.len_left = 0; + return read_count; +} + +/** + * lib_ring_buffer_file_read - Read buffer record payload. + * @filp: file structure pointer. + * @buffer: user buffer to read data into. + * @count: number of bytes to read. + * @ppos: file read position. + * + * Returns a negative value on error, or the number of bytes read on success. + * ppos is used to save the position _within the current record_ between calls + * to read(). + */ +static +ssize_t lib_ring_buffer_file_read(struct file *filp, + char __user *user_buf, + size_t count, + loff_t *ppos) +{ + struct inode *inode = filp->lttng_f_dentry->d_inode; + struct lib_ring_buffer *buf = inode->i_private; + struct channel *chan = buf->backend.chan; + + return channel_ring_buffer_file_read(filp, user_buf, count, ppos, + chan, buf, 0); +} + +/** + * channel_file_read - Read channel record payload. + * @filp: file structure pointer. + * @buffer: user buffer to read data into. + * @count: number of bytes to read. + * @ppos: file read position. + * + * Returns a negative value on error, or the number of bytes read on success. + * ppos is used to save the position _within the current record_ between calls + * to read(). + */ +static +ssize_t channel_file_read(struct file *filp, + char __user *user_buf, + size_t count, + loff_t *ppos) +{ + struct inode *inode = filp->lttng_f_dentry->d_inode; + struct channel *chan = inode->i_private; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) + return channel_ring_buffer_file_read(filp, user_buf, count, + ppos, chan, NULL, 1); + else { + struct lib_ring_buffer *buf = + channel_get_ring_buffer(config, chan, 0); + return channel_ring_buffer_file_read(filp, user_buf, count, + ppos, chan, buf, 0); + } +} + +static +int lib_ring_buffer_file_open(struct inode *inode, struct file *file) +{ + struct lib_ring_buffer *buf = inode->i_private; + int ret; + + ret = lib_ring_buffer_iterator_open(buf); + if (ret) + return ret; + + file->private_data = buf; + ret = nonseekable_open(inode, file); + if (ret) + goto release_iter; + return 0; + +release_iter: + lib_ring_buffer_iterator_release(buf); + return ret; +} + +static +int lib_ring_buffer_file_release(struct inode *inode, struct file *file) +{ + struct lib_ring_buffer *buf = inode->i_private; + + lib_ring_buffer_iterator_release(buf); + return 0; +} + +static +int channel_file_open(struct inode *inode, struct file *file) +{ + struct channel *chan = inode->i_private; + int ret; + + ret = channel_iterator_open(chan); + if (ret) + return ret; + + file->private_data = chan; + ret = nonseekable_open(inode, file); + if (ret) + goto release_iter; + return 0; + +release_iter: + channel_iterator_release(chan); + return ret; +} + +static +int channel_file_release(struct inode *inode, struct file *file) +{ + struct channel *chan = inode->i_private; + + channel_iterator_release(chan); + return 0; +} + +const struct file_operations channel_payload_file_operations = { + .owner = THIS_MODULE, + .open = channel_file_open, + .release = channel_file_release, + .read = channel_file_read, + .llseek = vfs_lib_ring_buffer_no_llseek, +}; +EXPORT_SYMBOL_GPL(channel_payload_file_operations); + +const struct file_operations lib_ring_buffer_payload_file_operations = { + .owner = THIS_MODULE, + .open = lib_ring_buffer_file_open, + .release = lib_ring_buffer_file_release, + .read = lib_ring_buffer_file_read, + .llseek = vfs_lib_ring_buffer_no_llseek, +}; +EXPORT_SYMBOL_GPL(lib_ring_buffer_payload_file_operations); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_mmap.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_mmap.c new file mode 100644 index 000000000000..fab945887855 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_mmap.c @@ -0,0 +1,139 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * ring_buffer_mmap.c + * + * Copyright (C) 2002-2005 - Tom Zanussi , IBM Corp + * Copyright (C) 1999-2005 - Karim Yaghmour + * Copyright (C) 2008-2012 - Mathieu Desnoyers + * + * Re-using code from kernel/relay.c, hence the GPL-2.0 license for this + * file. + */ + +#include +#include + +#include +#include +#include + +/* + * fault() vm_op implementation for ring buffer file mapping. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) +static vm_fault_t lib_ring_buffer_fault_compat(struct vm_area_struct *vma, struct vm_fault *vmf) +#else +static int lib_ring_buffer_fault_compat(struct vm_area_struct *vma, struct vm_fault *vmf) +#endif +{ + struct lib_ring_buffer *buf = vma->vm_private_data; + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + pgoff_t pgoff = vmf->pgoff; + unsigned long *pfnp; + void **virt; + unsigned long offset, sb_bindex; + + /* + * Verify that faults are only done on the range of pages owned by the + * reader. + */ + offset = pgoff << PAGE_SHIFT; + sb_bindex = subbuffer_id_get_index(config, buf->backend.buf_rsb.id); + if (!(offset >= buf->backend.array[sb_bindex]->mmap_offset + && offset < buf->backend.array[sb_bindex]->mmap_offset + + buf->backend.chan->backend.subbuf_size)) + return VM_FAULT_SIGBUS; + /* + * ring_buffer_read_get_pfn() gets the page frame number for the + * current reader's pages. + */ + pfnp = lib_ring_buffer_read_get_pfn(&buf->backend, offset, &virt); + if (!*pfnp) + return VM_FAULT_SIGBUS; + get_page(pfn_to_page(*pfnp)); + vmf->page = pfn_to_page(*pfnp); + + return 0; +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) +static vm_fault_t lib_ring_buffer_fault(struct vm_fault *vmf) +{ + struct vm_area_struct *vma = vmf->vma; + return lib_ring_buffer_fault_compat(vma, vmf); +} +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +static int lib_ring_buffer_fault(struct vm_fault *vmf) +{ + struct vm_area_struct *vma = vmf->vma; + return lib_ring_buffer_fault_compat(vma, vmf); +} +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +static int lib_ring_buffer_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + return lib_ring_buffer_fault_compat(vma, vmf); +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +/* + * vm_ops for ring buffer file mappings. + */ +static const struct vm_operations_struct lib_ring_buffer_mmap_ops = { + .fault = lib_ring_buffer_fault, +}; + +/** + * lib_ring_buffer_mmap_buf: - mmap channel buffer to process address space + * @buf: ring buffer to map + * @vma: vm_area_struct describing memory to be mapped + * + * Returns 0 if ok, negative on error + * + * Caller should already have grabbed mmap_sem. + */ +static int lib_ring_buffer_mmap_buf(struct lib_ring_buffer *buf, + struct vm_area_struct *vma) +{ + unsigned long length = vma->vm_end - vma->vm_start; + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned long mmap_buf_len; + + if (config->output != RING_BUFFER_MMAP) + return -EINVAL; + + mmap_buf_len = chan->backend.buf_size; + if (chan->backend.extra_reader_sb) + mmap_buf_len += chan->backend.subbuf_size; + + if (length != mmap_buf_len) + return -EINVAL; + + vma->vm_ops = &lib_ring_buffer_mmap_ops; + vma->vm_flags |= VM_DONTEXPAND; + vma->vm_private_data = buf; + + return 0; +} + +int lib_ring_buffer_mmap(struct file *filp, struct vm_area_struct *vma, + struct lib_ring_buffer *buf) +{ + return lib_ring_buffer_mmap_buf(buf, vma); +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_mmap); + +/** + * vfs_lib_ring_buffer_mmap - mmap file op + * @filp: the file + * @vma: the vma describing what to map + * + * Calls upon lib_ring_buffer_mmap_buf() to map the file into user space. + */ +int vfs_lib_ring_buffer_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct lib_ring_buffer *buf = filp->private_data; + return lib_ring_buffer_mmap(filp, vma, buf); +} +EXPORT_SYMBOL_GPL(vfs_lib_ring_buffer_mmap); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_splice.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_splice.c new file mode 100644 index 000000000000..eca591d80f84 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_splice.c @@ -0,0 +1,241 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * ring_buffer_splice.c + * + * Copyright (C) 2002-2005 - Tom Zanussi , IBM Corp + * Copyright (C) 1999-2005 - Karim Yaghmour + * Copyright (C) 2008-2012 - Mathieu Desnoyers + * + * Re-using code from kernel/relay.c, which is why it is licensed under + * the GPL-2.0. + */ + +#include +#include +#include + +#include +#include +#include +#include + +#if 0 +#define printk_dbg(fmt, args...) printk(fmt, args) +#else +#define printk_dbg(fmt, args...) +#endif + +loff_t vfs_lib_ring_buffer_no_llseek(struct file *file, loff_t offset, + int origin) +{ + return -ESPIPE; +} +EXPORT_SYMBOL_GPL(vfs_lib_ring_buffer_no_llseek); + +/* + * Release pages from the buffer so splice pipe_to_file can move them. + * Called after the pipe has been populated with buffer pages. + */ +static void lib_ring_buffer_pipe_buf_release(struct pipe_inode_info *pipe, + struct pipe_buffer *pbuf) +{ + __free_page(pbuf->page); +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .release = lib_ring_buffer_pipe_buf_release, + .try_steal = generic_pipe_buf_try_steal, + .get = generic_pipe_buf_get +}; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .confirm = generic_pipe_buf_confirm, + .release = lib_ring_buffer_pipe_buf_release, + .steal = generic_pipe_buf_steal, + .get = generic_pipe_buf_get +}; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .can_merge = 0, + .confirm = generic_pipe_buf_confirm, + .release = lib_ring_buffer_pipe_buf_release, + .steal = generic_pipe_buf_steal, + .get = generic_pipe_buf_get +}; +#else +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .can_merge = 0, + .map = generic_pipe_buf_map, + .unmap = generic_pipe_buf_unmap, + .confirm = generic_pipe_buf_confirm, + .release = lib_ring_buffer_pipe_buf_release, + .steal = generic_pipe_buf_steal, + .get = generic_pipe_buf_get +}; +#endif + +/* + * Page release operation after splice pipe_to_file ends. + */ +static void lib_ring_buffer_page_release(struct splice_pipe_desc *spd, + unsigned int i) +{ + __free_page(spd->pages[i]); +} + +/* + * subbuf_splice_actor - splice up to one subbuf's worth of data + */ +static int subbuf_splice_actor(struct file *in, + loff_t *ppos, + struct pipe_inode_info *pipe, + size_t len, + unsigned int flags, + struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + unsigned int poff, subbuf_pages, nr_pages; + struct page *pages[PIPE_DEF_BUFFERS]; + struct partial_page partial[PIPE_DEF_BUFFERS]; + struct splice_pipe_desc spd = { + .pages = pages, + .nr_pages = 0, + .partial = partial, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)) + .flags = flags, +#endif + .ops = &ring_buffer_pipe_buf_ops, + .spd_release = lib_ring_buffer_page_release, + }; + unsigned long consumed_old, roffset; + unsigned long bytes_avail; + + /* + * Check that a GET_SUBBUF ioctl has been done before. + */ + WARN_ON(atomic_long_read(&buf->active_readers) != 1); + consumed_old = lib_ring_buffer_get_consumed(config, buf); + consumed_old += *ppos; + + /* + * Adjust read len, if longer than what is available. + * Max read size is 1 subbuffer due to get_subbuf/put_subbuf for + * protection. + */ + bytes_avail = chan->backend.subbuf_size; + WARN_ON(bytes_avail > chan->backend.buf_size); + len = min_t(size_t, len, bytes_avail); + subbuf_pages = bytes_avail >> PAGE_SHIFT; + nr_pages = min_t(unsigned int, subbuf_pages, PIPE_DEF_BUFFERS); + roffset = consumed_old & PAGE_MASK; + poff = consumed_old & ~PAGE_MASK; + printk_dbg(KERN_DEBUG "SPLICE actor len %zu pos %zd write_pos %ld\n", + len, (ssize_t)*ppos, lib_ring_buffer_get_offset(config, buf)); + + for (; spd.nr_pages < nr_pages; spd.nr_pages++) { + unsigned int this_len; + unsigned long *pfnp, new_pfn; + struct page *new_page; + void **virt; + + if (!len) + break; + printk_dbg(KERN_DEBUG "SPLICE actor loop len %zu roffset %ld\n", + len, roffset); + + /* + * We have to replace the page we are moving into the splice + * pipe. + */ + new_page = alloc_pages_node(cpu_to_node(max(buf->backend.cpu, + 0)), + GFP_KERNEL | __GFP_ZERO, 0); + if (!new_page) + break; + new_pfn = page_to_pfn(new_page); + this_len = PAGE_SIZE - poff; + pfnp = lib_ring_buffer_read_get_pfn(&buf->backend, roffset, &virt); + spd.pages[spd.nr_pages] = pfn_to_page(*pfnp); + *pfnp = new_pfn; + *virt = page_address(new_page); + spd.partial[spd.nr_pages].offset = poff; + spd.partial[spd.nr_pages].len = this_len; + + poff = 0; + roffset += PAGE_SIZE; + len -= this_len; + } + + if (!spd.nr_pages) + return 0; + + return wrapper_splice_to_pipe(pipe, &spd); +} + +ssize_t lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags, + struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + ssize_t spliced; + int ret; + + if (config->output != RING_BUFFER_SPLICE) + return -EINVAL; + + /* + * We require ppos and length to be page-aligned for performance reasons + * (no page copy). Size is known using the ioctl + * RING_BUFFER_GET_PADDED_SUBBUF_SIZE, which is page-size padded. + * We fail when the ppos or len passed is not page-sized, because splice + * is not allowed to copy more than the length passed as parameter (so + * the ABI does not let us silently copy more than requested to include + * padding). + */ + if (*ppos != PAGE_ALIGN(*ppos) || len != PAGE_ALIGN(len)) + return -EINVAL; + + ret = 0; + spliced = 0; + + printk_dbg(KERN_DEBUG "SPLICE read len %zu pos %zd\n", len, + (ssize_t)*ppos); + while (len && !spliced) { + ret = subbuf_splice_actor(in, ppos, pipe, len, flags, buf); + printk_dbg(KERN_DEBUG "SPLICE read loop ret %d\n", ret); + if (ret < 0) + break; + else if (!ret) { + if (flags & SPLICE_F_NONBLOCK) + ret = -EAGAIN; + break; + } + + *ppos += ret; + if (ret > len) + len = 0; + else + len -= ret; + spliced += ret; + } + + if (spliced) + return spliced; + + return ret; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_splice_read); + +ssize_t vfs_lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + struct lib_ring_buffer *buf = in->private_data; + + return lib_ring_buffer_splice_read(in, ppos, pipe, len, flags, buf); +} +EXPORT_SYMBOL_GPL(vfs_lib_ring_buffer_splice_read); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_vfs.c b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_vfs.c new file mode 100644 index 000000000000..f6c0e3dfe21d --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/ring_buffer_vfs.c @@ -0,0 +1,454 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * ring_buffer_vfs.c + * + * Ring Buffer VFS file operations. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +static int put_ulong(unsigned long val, unsigned long arg) +{ + return put_user(val, (unsigned long __user *)arg); +} + +#ifdef CONFIG_COMPAT +static int compat_put_ulong(compat_ulong_t val, unsigned long arg) +{ + return put_user(val, (compat_ulong_t __user *)compat_ptr(arg)); +} +#endif + +/* + * This is not used by anonymous file descriptors. This code is left + * there if we ever want to implement an inode with open() operation. + */ +int lib_ring_buffer_open(struct inode *inode, struct file *file, + struct lib_ring_buffer *buf) +{ + int ret; + + if (!buf) + return -EINVAL; + + ret = lib_ring_buffer_open_read(buf); + if (ret) + return ret; + + ret = nonseekable_open(inode, file); + if (ret) + goto release_read; + return 0; + +release_read: + lib_ring_buffer_release_read(buf); + return ret; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_open); + +/** + * vfs_lib_ring_buffer_open - ring buffer open file operation + * @inode: opened inode + * @file: opened file + * + * Open implementation. Makes sure only one open instance of a buffer is + * done at a given moment. + */ +static +int vfs_lib_ring_buffer_open(struct inode *inode, struct file *file) +{ + struct lib_ring_buffer *buf = inode->i_private; + + file->private_data = buf; + return lib_ring_buffer_open(inode, file, buf); +} + +int lib_ring_buffer_release(struct inode *inode, struct file *file, + struct lib_ring_buffer *buf) +{ + lib_ring_buffer_release_read(buf); + + return 0; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_release); + +/** + * vfs_lib_ring_buffer_release - ring buffer release file operation + * @inode: opened inode + * @file: opened file + * + * Release implementation. + */ +static +int vfs_lib_ring_buffer_release(struct inode *inode, struct file *file) +{ + struct lib_ring_buffer *buf = file->private_data; + + return lib_ring_buffer_release(inode, file, buf); +} + +unsigned int lib_ring_buffer_poll(struct file *filp, poll_table *wait, + struct lib_ring_buffer *buf) +{ + unsigned int mask = 0; + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + int finalized, disabled; + + if (filp->f_mode & FMODE_READ) { + poll_wait_set_exclusive(wait); + poll_wait(filp, &buf->read_wait, wait); + + finalized = lib_ring_buffer_is_finalized(config, buf); + disabled = lib_ring_buffer_channel_is_disabled(chan); + + /* + * lib_ring_buffer_is_finalized() contains a smp_rmb() ordering + * finalized load before offsets loads. + */ + WARN_ON(atomic_long_read(&buf->active_readers) != 1); +retry: + if (disabled) + return POLLERR; + + if (subbuf_trunc(lib_ring_buffer_get_offset(config, buf), chan) + - subbuf_trunc(lib_ring_buffer_get_consumed(config, buf), chan) + == 0) { + if (finalized) + return POLLHUP; + else { + /* + * The memory barriers + * __wait_event()/wake_up_interruptible() take + * care of "raw_spin_is_locked" memory ordering. + */ + if (raw_spin_is_locked(&buf->raw_tick_nohz_spinlock)) + goto retry; + else + return 0; + } + } else { + if (subbuf_trunc(lib_ring_buffer_get_offset(config, buf), + chan) + - subbuf_trunc(lib_ring_buffer_get_consumed(config, buf), + chan) + >= chan->backend.buf_size) + return POLLPRI | POLLRDBAND; + else + return POLLIN | POLLRDNORM; + } + } + return mask; +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_poll); + +/** + * vfs_lib_ring_buffer_poll - ring buffer poll file operation + * @filp: the file + * @wait: poll table + * + * Poll implementation. + */ +static +unsigned int vfs_lib_ring_buffer_poll(struct file *filp, poll_table *wait) +{ + struct lib_ring_buffer *buf = filp->private_data; + + return lib_ring_buffer_poll(filp, wait, buf); +} + +long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg, struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (lib_ring_buffer_channel_is_disabled(chan)) + return -EIO; + + switch (cmd) { + case RING_BUFFER_SNAPSHOT: + return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot, + &buf->prod_snapshot); + case RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS: + return lib_ring_buffer_snapshot_sample_positions(buf, + &buf->cons_snapshot, &buf->prod_snapshot); + case RING_BUFFER_SNAPSHOT_GET_CONSUMED: + return put_ulong(buf->cons_snapshot, arg); + case RING_BUFFER_SNAPSHOT_GET_PRODUCED: + return put_ulong(buf->prod_snapshot, arg); + case RING_BUFFER_GET_SUBBUF: + { + unsigned long uconsume; + long ret; + + ret = get_user(uconsume, (unsigned long __user *) arg); + if (ret) + return ret; /* will return -EFAULT */ + ret = lib_ring_buffer_get_subbuf(buf, uconsume); + if (!ret) { + /* Set file position to zero at each successful "get" */ + filp->f_pos = 0; + } + return ret; + } + case RING_BUFFER_PUT_SUBBUF: + lib_ring_buffer_put_subbuf(buf); + return 0; + + case RING_BUFFER_GET_NEXT_SUBBUF: + { + long ret; + + ret = lib_ring_buffer_get_next_subbuf(buf); + if (!ret) { + /* Set file position to zero at each successful "get" */ + filp->f_pos = 0; + } + return ret; + } + case RING_BUFFER_PUT_NEXT_SUBBUF: + lib_ring_buffer_put_next_subbuf(buf); + return 0; + case RING_BUFFER_GET_SUBBUF_SIZE: + return put_ulong(lib_ring_buffer_get_read_data_size(config, buf), + arg); + case RING_BUFFER_GET_PADDED_SUBBUF_SIZE: + { + unsigned long size; + + size = lib_ring_buffer_get_read_data_size(config, buf); + size = PAGE_ALIGN(size); + return put_ulong(size, arg); + } + case RING_BUFFER_GET_MAX_SUBBUF_SIZE: + return put_ulong(chan->backend.subbuf_size, arg); + case RING_BUFFER_GET_MMAP_LEN: + { + unsigned long mmap_buf_len; + + if (config->output != RING_BUFFER_MMAP) + return -EINVAL; + mmap_buf_len = chan->backend.buf_size; + if (chan->backend.extra_reader_sb) + mmap_buf_len += chan->backend.subbuf_size; + if (mmap_buf_len > INT_MAX) + return -EFBIG; + return put_ulong(mmap_buf_len, arg); + } + case RING_BUFFER_GET_MMAP_READ_OFFSET: + { + unsigned long sb_bindex; + + if (config->output != RING_BUFFER_MMAP) + return -EINVAL; + sb_bindex = subbuffer_id_get_index(config, + buf->backend.buf_rsb.id); + return put_ulong(buf->backend.array[sb_bindex]->mmap_offset, + arg); + } + case RING_BUFFER_FLUSH: + lib_ring_buffer_switch_remote(buf); + return 0; + case RING_BUFFER_FLUSH_EMPTY: + lib_ring_buffer_switch_remote_empty(buf); + return 0; + default: + return -ENOIOCTLCMD; + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_ioctl); + +/** + * vfs_lib_ring_buffer_ioctl - control ring buffer reader synchronization + * + * @filp: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements commands necessary for producer/consumer + * and flight recorder reader interaction : + * RING_BUFFER_GET_NEXT_SUBBUF + * Get the next sub-buffer that can be read. It never blocks. + * RING_BUFFER_PUT_NEXT_SUBBUF + * Release the currently read sub-buffer. + * RING_BUFFER_GET_SUBBUF_SIZE + * returns the size of the current sub-buffer. + * RING_BUFFER_GET_MAX_SUBBUF_SIZE + * returns the maximum size for sub-buffers. + * RING_BUFFER_GET_NUM_SUBBUF + * returns the number of reader-visible sub-buffers in the per cpu + * channel (for mmap). + * RING_BUFFER_GET_MMAP_READ_OFFSET + * returns the offset of the subbuffer belonging to the reader. + * Should only be used for mmap clients. + */ +static +long vfs_lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct lib_ring_buffer *buf = filp->private_data; + + return lib_ring_buffer_ioctl(filp, cmd, arg, buf); +} + +#ifdef CONFIG_COMPAT +long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg, struct lib_ring_buffer *buf) +{ + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + + if (lib_ring_buffer_channel_is_disabled(chan)) + return -EIO; + + switch (cmd) { + case RING_BUFFER_COMPAT_SNAPSHOT: + return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot, + &buf->prod_snapshot); + case RING_BUFFER_COMPAT_SNAPSHOT_SAMPLE_POSITIONS: + return lib_ring_buffer_snapshot_sample_positions(buf, + &buf->cons_snapshot, &buf->prod_snapshot); + case RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED: + return compat_put_ulong(buf->cons_snapshot, arg); + case RING_BUFFER_COMPAT_SNAPSHOT_GET_PRODUCED: + return compat_put_ulong(buf->prod_snapshot, arg); + case RING_BUFFER_COMPAT_GET_SUBBUF: + { + __u32 uconsume; + unsigned long consume; + long ret; + + ret = get_user(uconsume, (__u32 __user *) arg); + if (ret) + return ret; /* will return -EFAULT */ + consume = buf->cons_snapshot; + consume &= ~0xFFFFFFFFL; + consume |= uconsume; + ret = lib_ring_buffer_get_subbuf(buf, consume); + if (!ret) { + /* Set file position to zero at each successful "get" */ + filp->f_pos = 0; + } + return ret; + } + case RING_BUFFER_COMPAT_PUT_SUBBUF: + lib_ring_buffer_put_subbuf(buf); + return 0; + + case RING_BUFFER_COMPAT_GET_NEXT_SUBBUF: + { + long ret; + + ret = lib_ring_buffer_get_next_subbuf(buf); + if (!ret) { + /* Set file position to zero at each successful "get" */ + filp->f_pos = 0; + } + return ret; + } + case RING_BUFFER_COMPAT_PUT_NEXT_SUBBUF: + lib_ring_buffer_put_next_subbuf(buf); + return 0; + case RING_BUFFER_COMPAT_GET_SUBBUF_SIZE: + { + unsigned long data_size; + + data_size = lib_ring_buffer_get_read_data_size(config, buf); + if (data_size > UINT_MAX) + return -EFBIG; + return compat_put_ulong(data_size, arg); + } + case RING_BUFFER_COMPAT_GET_PADDED_SUBBUF_SIZE: + { + unsigned long size; + + size = lib_ring_buffer_get_read_data_size(config, buf); + size = PAGE_ALIGN(size); + if (size > UINT_MAX) + return -EFBIG; + return compat_put_ulong(size, arg); + } + case RING_BUFFER_COMPAT_GET_MAX_SUBBUF_SIZE: + if (chan->backend.subbuf_size > UINT_MAX) + return -EFBIG; + return compat_put_ulong(chan->backend.subbuf_size, arg); + case RING_BUFFER_COMPAT_GET_MMAP_LEN: + { + unsigned long mmap_buf_len; + + if (config->output != RING_BUFFER_MMAP) + return -EINVAL; + mmap_buf_len = chan->backend.buf_size; + if (chan->backend.extra_reader_sb) + mmap_buf_len += chan->backend.subbuf_size; + if (mmap_buf_len > UINT_MAX) + return -EFBIG; + return compat_put_ulong(mmap_buf_len, arg); + } + case RING_BUFFER_COMPAT_GET_MMAP_READ_OFFSET: + { + unsigned long sb_bindex, read_offset; + + if (config->output != RING_BUFFER_MMAP) + return -EINVAL; + sb_bindex = subbuffer_id_get_index(config, + buf->backend.buf_rsb.id); + read_offset = buf->backend.array[sb_bindex]->mmap_offset; + if (read_offset > UINT_MAX) + return -EINVAL; + return compat_put_ulong(read_offset, arg); + } + case RING_BUFFER_COMPAT_FLUSH: + lib_ring_buffer_switch_remote(buf); + return 0; + case RING_BUFFER_COMPAT_FLUSH_EMPTY: + lib_ring_buffer_switch_remote_empty(buf); + return 0; + default: + return -ENOIOCTLCMD; + } +} +EXPORT_SYMBOL_GPL(lib_ring_buffer_compat_ioctl); + +static +long vfs_lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + struct lib_ring_buffer *buf = filp->private_data; + + return lib_ring_buffer_compat_ioctl(filp, cmd, arg, buf); +} +#endif + +const struct file_operations lib_ring_buffer_file_operations = { + .owner = THIS_MODULE, + .open = vfs_lib_ring_buffer_open, + .release = vfs_lib_ring_buffer_release, + .poll = vfs_lib_ring_buffer_poll, + .splice_read = vfs_lib_ring_buffer_splice_read, + .mmap = vfs_lib_ring_buffer_mmap, + .unlocked_ioctl = vfs_lib_ring_buffer_ioctl, + .llseek = vfs_lib_ring_buffer_no_llseek, +#ifdef CONFIG_COMPAT + .compat_ioctl = vfs_lib_ring_buffer_compat_ioctl, +#endif +}; +EXPORT_SYMBOL_GPL(lib_ring_buffer_file_operations); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng ring buffer library"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/vatomic.h b/ltt/lttng-2.11.0/lib/ringbuffer/vatomic.h new file mode 100644 index 000000000000..4f93f7d7182c --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/vatomic.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/vatomic.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_VATOMIC_H +#define _LIB_RING_BUFFER_VATOMIC_H + +#include +#include + +/* + * Same data type (long) accessed differently depending on configuration. + * v field is for non-atomic access (protected by mutual exclusion). + * In the fast-path, the ring_buffer_config structure is constant, so the + * compiler can statically select the appropriate branch. + * local_t is used for per-cpu and per-thread buffers. + * atomic_long_t is used for globally shared buffers. + */ +union v_atomic { + local_t l; + atomic_long_t a; + long v; +}; + +static inline +long v_read(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +{ + if (config->sync == RING_BUFFER_SYNC_PER_CPU) + return local_read(&v_a->l); + else + return atomic_long_read(&v_a->a); +} + +static inline +void v_set(const struct lib_ring_buffer_config *config, union v_atomic *v_a, + long v) +{ + if (config->sync == RING_BUFFER_SYNC_PER_CPU) + local_set(&v_a->l, v); + else + atomic_long_set(&v_a->a, v); +} + +static inline +void v_add(const struct lib_ring_buffer_config *config, long v, union v_atomic *v_a) +{ + if (config->sync == RING_BUFFER_SYNC_PER_CPU) + local_add(v, &v_a->l); + else + atomic_long_add(v, &v_a->a); +} + +static inline +void v_inc(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +{ + if (config->sync == RING_BUFFER_SYNC_PER_CPU) + local_inc(&v_a->l); + else + atomic_long_inc(&v_a->a); +} + +/* + * Non-atomic decrement. Only used by reader, apply to reader-owned subbuffer. + */ +static inline +void _v_dec(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +{ + --v_a->v; +} + +static inline +long v_cmpxchg(const struct lib_ring_buffer_config *config, union v_atomic *v_a, + long old, long _new) +{ + if (config->sync == RING_BUFFER_SYNC_PER_CPU) + return local_cmpxchg(&v_a->l, old, _new); + else + return atomic_long_cmpxchg(&v_a->a, old, _new); +} + +#endif /* _LIB_RING_BUFFER_VATOMIC_H */ diff --git a/ltt/lttng-2.11.0/lib/ringbuffer/vfs.h b/ltt/lttng-2.11.0/lib/ringbuffer/vfs.h new file mode 100644 index 000000000000..44a8bc24a0b8 --- /dev/null +++ b/ltt/lttng-2.11.0/lib/ringbuffer/vfs.h @@ -0,0 +1,174 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * lib/ringbuffer/vfs.h + * + * Wait-free ring buffer VFS file operations. + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + */ + +#ifndef _LIB_RING_BUFFER_VFS_H +#define _LIB_RING_BUFFER_VFS_H + +#include +#include + +/* VFS API */ + +extern const struct file_operations lib_ring_buffer_file_operations; + +/* + * Internal file operations. + */ + +struct lib_ring_buffer; + +int lib_ring_buffer_open(struct inode *inode, struct file *file, + struct lib_ring_buffer *buf); +int lib_ring_buffer_release(struct inode *inode, struct file *file, + struct lib_ring_buffer *buf); +unsigned int lib_ring_buffer_poll(struct file *filp, poll_table *wait, + struct lib_ring_buffer *buf); +ssize_t lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags, struct lib_ring_buffer *buf); +int lib_ring_buffer_mmap(struct file *filp, struct vm_area_struct *vma, + struct lib_ring_buffer *buf); + +/* Ring Buffer ioctl() and ioctl numbers */ +long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg, struct lib_ring_buffer *buf); +#ifdef CONFIG_COMPAT +long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg, struct lib_ring_buffer *buf); +#endif + +ssize_t vfs_lib_ring_buffer_file_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, unsigned int flags); +loff_t vfs_lib_ring_buffer_no_llseek(struct file *file, loff_t offset, + int origin); +int vfs_lib_ring_buffer_mmap(struct file *filp, struct vm_area_struct *vma); +ssize_t vfs_lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); + +/* + * Use RING_BUFFER_GET_NEXT_SUBBUF / RING_BUFFER_PUT_NEXT_SUBBUF to read and + * consume sub-buffers sequentially. + * + * Reading sub-buffers without consuming them can be performed with: + * + * RING_BUFFER_SNAPSHOT + * RING_BUFFER_SNAPSHOT_GET_CONSUMED + * RING_BUFFER_SNAPSHOT_GET_PRODUCED + * + * to get the offset range to consume, and then by passing each sub-buffer + * offset to RING_BUFFER_GET_SUBBUF, read the sub-buffer, and then release it + * with RING_BUFFER_PUT_SUBBUF. + * + * Note that the "snapshot" API can be used to read the sub-buffer in reverse + * order, which is useful for flight recorder snapshots. + */ + +/* Get a snapshot of the current ring buffer producer and consumer positions */ +#define RING_BUFFER_SNAPSHOT _IO(0xF6, 0x00) +/* Get the consumer position (iteration start) */ +#define RING_BUFFER_SNAPSHOT_GET_CONSUMED _IOR(0xF6, 0x01, unsigned long) +/* Get the producer position (iteration end) */ +#define RING_BUFFER_SNAPSHOT_GET_PRODUCED _IOR(0xF6, 0x02, unsigned long) +/* Get exclusive read access to the specified sub-buffer position */ +#define RING_BUFFER_GET_SUBBUF _IOW(0xF6, 0x03, unsigned long) +/* Release exclusive sub-buffer access */ +#define RING_BUFFER_PUT_SUBBUF _IO(0xF6, 0x04) + +/* Get exclusive read access to the next sub-buffer that can be read. */ +#define RING_BUFFER_GET_NEXT_SUBBUF _IO(0xF6, 0x05) +/* Release exclusive sub-buffer access, move consumer forward. */ +#define RING_BUFFER_PUT_NEXT_SUBBUF _IO(0xF6, 0x06) +/* returns the size of the current sub-buffer, without padding (for mmap). */ +#define RING_BUFFER_GET_SUBBUF_SIZE _IOR(0xF6, 0x07, unsigned long) +/* returns the size of the current sub-buffer, with padding (for splice). */ +#define RING_BUFFER_GET_PADDED_SUBBUF_SIZE _IOR(0xF6, 0x08, unsigned long) +/* returns the maximum size for sub-buffers. */ +#define RING_BUFFER_GET_MAX_SUBBUF_SIZE _IOR(0xF6, 0x09, unsigned long) +/* returns the length to mmap. */ +#define RING_BUFFER_GET_MMAP_LEN _IOR(0xF6, 0x0A, unsigned long) +/* returns the offset of the subbuffer belonging to the mmap reader. */ +#define RING_BUFFER_GET_MMAP_READ_OFFSET _IOR(0xF6, 0x0B, unsigned long) +/* Flush the current sub-buffer, if non-empty. */ +#define RING_BUFFER_FLUSH _IO(0xF6, 0x0C) +/* Get the current version of the metadata cache (after a get_next). */ +#define RING_BUFFER_GET_METADATA_VERSION _IOR(0xF6, 0x0D, uint64_t) +/* + * Get a snapshot of the current ring buffer producer and consumer positions, + * regardless of whether or not the two positions are contained within the same + * sub-buffer. + */ +#define RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS _IO(0xF6, 0x0E) +/* Flush the current sub-buffer, even if empty. */ +#define RING_BUFFER_FLUSH_EMPTY _IO(0xF6, 0x0F) +/* + * Reset the position of what has been consumed from the metadata cache to 0 + * so it can be read again. + */ +#define RING_BUFFER_METADATA_CACHE_DUMP _IO(0xF6, 0x10) +/* + * Get next metadata subbuffer, returning a flag indicating whether the + * metadata is guaranteed to be in a consistent state at the end of this + * sub-buffer (can be parsed). + */ +#define RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK _IOR(0xF6, 0x12, uint32_t) + +#ifdef CONFIG_COMPAT +/* Get a snapshot of the current ring buffer producer and consumer positions */ +#define RING_BUFFER_COMPAT_SNAPSHOT RING_BUFFER_SNAPSHOT +/* Get the consumer position (iteration start) */ +#define RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED \ + _IOR(0xF6, 0x01, compat_ulong_t) +/* Get the producer position (iteration end) */ +#define RING_BUFFER_COMPAT_SNAPSHOT_GET_PRODUCED \ + _IOR(0xF6, 0x02, compat_ulong_t) +/* Get exclusive read access to the specified sub-buffer position */ +#define RING_BUFFER_COMPAT_GET_SUBBUF _IOW(0xF6, 0x03, compat_ulong_t) +/* Release exclusive sub-buffer access */ +#define RING_BUFFER_COMPAT_PUT_SUBBUF RING_BUFFER_PUT_SUBBUF + +/* Get exclusive read access to the next sub-buffer that can be read. */ +#define RING_BUFFER_COMPAT_GET_NEXT_SUBBUF RING_BUFFER_GET_NEXT_SUBBUF +/* Release exclusive sub-buffer access, move consumer forward. */ +#define RING_BUFFER_COMPAT_PUT_NEXT_SUBBUF RING_BUFFER_PUT_NEXT_SUBBUF +/* returns the size of the current sub-buffer, without padding (for mmap). */ +#define RING_BUFFER_COMPAT_GET_SUBBUF_SIZE _IOR(0xF6, 0x07, compat_ulong_t) +/* returns the size of the current sub-buffer, with padding (for splice). */ +#define RING_BUFFER_COMPAT_GET_PADDED_SUBBUF_SIZE \ + _IOR(0xF6, 0x08, compat_ulong_t) +/* returns the maximum size for sub-buffers. */ +#define RING_BUFFER_COMPAT_GET_MAX_SUBBUF_SIZE _IOR(0xF6, 0x09, compat_ulong_t) +/* returns the length to mmap. */ +#define RING_BUFFER_COMPAT_GET_MMAP_LEN _IOR(0xF6, 0x0A, compat_ulong_t) +/* returns the offset of the subbuffer belonging to the mmap reader. */ +#define RING_BUFFER_COMPAT_GET_MMAP_READ_OFFSET _IOR(0xF6, 0x0B, compat_ulong_t) +/* Flush the current sub-buffer, if non-empty. */ +#define RING_BUFFER_COMPAT_FLUSH RING_BUFFER_FLUSH +/* Get the current version of the metadata cache (after a get_next). */ +#define RING_BUFFER_COMPAT_GET_METADATA_VERSION RING_BUFFER_GET_METADATA_VERSION +/* + * Get a snapshot of the current ring buffer producer and consumer positions, + * regardless of whether or not the two positions are contained within the same + * sub-buffer. + */ +#define RING_BUFFER_COMPAT_SNAPSHOT_SAMPLE_POSITIONS \ + RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS +/* Flush the current sub-buffer, even if empty. */ +#define RING_BUFFER_COMPAT_FLUSH_EMPTY \ + RING_BUFFER_FLUSH_EMPTY +/* + * Get next metadata subbuffer, returning a flag indicating whether the + * metadata is guaranteed to be in a consistent state at the end of this + * sub-buffer (can be parsed). + */ +#define RING_BUFFER_COMPAT_GET_NEXT_SUBBUF_METADATA_CHECK \ + RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK +#endif /* CONFIG_COMPAT */ + +#endif /* _LIB_RING_BUFFER_VFS_H */ diff --git a/ltt/lttng-2.11.0/lttng-abi-old.h b/ltt/lttng-2.11.0/lttng-abi-old.h new file mode 100644 index 000000000000..07b3fe7eff1a --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-abi-old.h @@ -0,0 +1,128 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-abi-old.h + * + * LTTng old ABI header (without support for compat 32/64 bits) + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_ABI_OLD_H +#define _LTTNG_ABI_OLD_H + +#include +#include + +/* + * LTTng DebugFS ABI structures. + */ +#define LTTNG_KERNEL_OLD_CHANNEL_PADDING LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_old_channel { + int overwrite; /* 1: overwrite, 0: discard */ + uint64_t subbuf_size; /* in bytes */ + uint64_t num_subbuf; + unsigned int switch_timer_interval; /* usecs */ + unsigned int read_timer_interval; /* usecs */ + enum lttng_kernel_output output; /* splice, mmap */ + char padding[LTTNG_KERNEL_OLD_CHANNEL_PADDING]; +}; + +struct lttng_kernel_old_kretprobe { + uint64_t addr; + + uint64_t offset; + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +}; + +/* + * Either addr is used, or symbol_name and offset. + */ +struct lttng_kernel_old_kprobe { + uint64_t addr; + + uint64_t offset; + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +}; + +struct lttng_kernel_old_function_tracer { + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +}; + +/* + * For syscall tracing, name = '\0' means "enable all". + */ +#define LTTNG_KERNEL_OLD_EVENT_PADDING1 16 +#define LTTNG_KERNEL_OLD_EVENT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_old_event { + char name[LTTNG_KERNEL_SYM_NAME_LEN]; /* event name */ + enum lttng_kernel_instrumentation instrumentation; + char padding[LTTNG_KERNEL_OLD_EVENT_PADDING1]; + + /* Per instrumentation type configuration */ + union { + struct lttng_kernel_old_kretprobe kretprobe; + struct lttng_kernel_old_kprobe kprobe; + struct lttng_kernel_old_function_tracer ftrace; + char padding[LTTNG_KERNEL_OLD_EVENT_PADDING2]; + } u; +}; + +struct lttng_kernel_old_tracer_version { + uint32_t major; + uint32_t minor; + uint32_t patchlevel; +}; + +struct lttng_kernel_old_calibrate { + enum lttng_kernel_calibrate_type type; /* type (input) */ +}; + +struct lttng_kernel_old_perf_counter_ctx { + uint32_t type; + uint64_t config; + char name[LTTNG_KERNEL_SYM_NAME_LEN]; +}; + +#define LTTNG_KERNEL_OLD_CONTEXT_PADDING1 16 +#define LTTNG_KERNEL_OLD_CONTEXT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_old_context { + enum lttng_kernel_context_type ctx; + char padding[LTTNG_KERNEL_OLD_CONTEXT_PADDING1]; + + union { + struct lttng_kernel_old_perf_counter_ctx perf_counter; + char padding[LTTNG_KERNEL_OLD_CONTEXT_PADDING2]; + } u; +}; + +/* LTTng file descriptor ioctl */ +#define LTTNG_KERNEL_OLD_SESSION _IO(0xF6, 0x40) +#define LTTNG_KERNEL_OLD_TRACER_VERSION \ + _IOR(0xF6, 0x41, struct lttng_kernel_old_tracer_version) +#define LTTNG_KERNEL_OLD_TRACEPOINT_LIST _IO(0xF6, 0x42) +#define LTTNG_KERNEL_OLD_WAIT_QUIESCENT _IO(0xF6, 0x43) +#define LTTNG_KERNEL_OLD_CALIBRATE \ + _IOWR(0xF6, 0x44, struct lttng_kernel_old_calibrate) + +/* Session FD ioctl */ +#define LTTNG_KERNEL_OLD_METADATA \ + _IOW(0xF6, 0x50, struct lttng_kernel_old_channel) +#define LTTNG_KERNEL_OLD_CHANNEL \ + _IOW(0xF6, 0x51, struct lttng_kernel_old_channel) +#define LTTNG_KERNEL_OLD_SESSION_START _IO(0xF6, 0x52) +#define LTTNG_KERNEL_OLD_SESSION_STOP _IO(0xF6, 0x53) + +/* Channel FD ioctl */ +#define LTTNG_KERNEL_OLD_STREAM _IO(0xF6, 0x60) +#define LTTNG_KERNEL_OLD_EVENT \ + _IOW(0xF6, 0x61, struct lttng_kernel_old_event) + +/* Event and Channel FD ioctl */ +#define LTTNG_KERNEL_OLD_CONTEXT \ + _IOW(0xF6, 0x70, struct lttng_kernel_old_context) + +/* Event, Channel and Session ioctl */ +#define LTTNG_KERNEL_OLD_ENABLE _IO(0xF6, 0x80) +#define LTTNG_KERNEL_OLD_DISABLE _IO(0xF6, 0x81) + +#endif /* _LTTNG_ABI_OLD_H */ diff --git a/ltt/lttng-2.11.0/lttng-abi.c b/ltt/lttng-2.11.0/lttng-abi.c new file mode 100644 index 000000000000..04950eed51f6 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-abi.c @@ -0,0 +1,1976 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-abi.c + * + * LTTng ABI + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * + * Mimic system calls for: + * - session creation, returns a file descriptor or failure. + * - channel creation, returns a file descriptor or failure. + * - Operates on a session file descriptor + * - Takes all channel options as parameters. + * - stream get, returns a file descriptor or failure. + * - Operates on a channel file descriptor. + * - stream notifier get, returns a file descriptor or failure. + * - Operates on a channel file descriptor. + * - event creation, returns a file descriptor or failure. + * - Operates on a channel file descriptor + * - Takes an event name as parameter + * - Takes an instrumentation source as parameter + * - e.g. tracepoints, dynamic_probes... + * - Takes instrumentation source specific arguments. + */ + +#include +#include +#include +#include +#include +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This is LTTng's own personal way to create a system call as an external + * module. We use ioctl() on /proc/lttng. + */ + +static struct proc_dir_entry *lttng_proc_dentry; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +static const struct proc_ops lttng_proc_ops; +#else +static const struct file_operations lttng_proc_ops; +#endif + +static const struct file_operations lttng_session_fops; +static const struct file_operations lttng_channel_fops; +static const struct file_operations lttng_metadata_fops; +static const struct file_operations lttng_event_fops; +static struct file_operations lttng_stream_ring_buffer_file_operations; + +static int put_u64(uint64_t val, unsigned long arg); +static int put_u32(uint32_t val, unsigned long arg); + +/* + * Teardown management: opened file descriptors keep a refcount on the module, + * so it can only exit when all file descriptors are closed. + */ + +static +int lttng_abi_create_session(void) +{ + struct lttng_session *session; + struct file *session_file; + int session_fd, ret; + + session = lttng_session_create(); + if (!session) + return -ENOMEM; + session_fd = lttng_get_unused_fd(); + if (session_fd < 0) { + ret = session_fd; + goto fd_error; + } + session_file = anon_inode_getfile("[lttng_session]", + <tng_session_fops, + session, O_RDWR); + if (IS_ERR(session_file)) { + ret = PTR_ERR(session_file); + goto file_error; + } + session->file = session_file; + fd_install(session_fd, session_file); + return session_fd; + +file_error: + put_unused_fd(session_fd); +fd_error: + lttng_session_destroy(session); + return ret; +} + +static +int lttng_abi_tracepoint_list(void) +{ + struct file *tracepoint_list_file; + int file_fd, ret; + + file_fd = lttng_get_unused_fd(); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + + tracepoint_list_file = anon_inode_getfile("[lttng_tracepoint_list]", + <tng_tracepoint_list_fops, + NULL, O_RDWR); + if (IS_ERR(tracepoint_list_file)) { + ret = PTR_ERR(tracepoint_list_file); + goto file_error; + } + ret = lttng_tracepoint_list_fops.open(NULL, tracepoint_list_file); + if (ret < 0) + goto open_error; + fd_install(file_fd, tracepoint_list_file); + return file_fd; + +open_error: + fput(tracepoint_list_file); +file_error: + put_unused_fd(file_fd); +fd_error: + return ret; +} + +#ifndef CONFIG_HAVE_SYSCALL_TRACEPOINTS +static inline +int lttng_abi_syscall_list(void) +{ + return -ENOSYS; +} +#else +static +int lttng_abi_syscall_list(void) +{ + struct file *syscall_list_file; + int file_fd, ret; + + file_fd = lttng_get_unused_fd(); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + + syscall_list_file = anon_inode_getfile("[lttng_syscall_list]", + <tng_syscall_list_fops, + NULL, O_RDWR); + if (IS_ERR(syscall_list_file)) { + ret = PTR_ERR(syscall_list_file); + goto file_error; + } + ret = lttng_syscall_list_fops.open(NULL, syscall_list_file); + if (ret < 0) + goto open_error; + fd_install(file_fd, syscall_list_file); + return file_fd; + +open_error: + fput(syscall_list_file); +file_error: + put_unused_fd(file_fd); +fd_error: + return ret; +} +#endif + +static +void lttng_abi_tracer_version(struct lttng_kernel_tracer_version *v) +{ + v->major = LTTNG_MODULES_MAJOR_VERSION; + v->minor = LTTNG_MODULES_MINOR_VERSION; + v->patchlevel = LTTNG_MODULES_PATCHLEVEL_VERSION; +} + +static +void lttng_abi_tracer_abi_version(struct lttng_kernel_tracer_abi_version *v) +{ + v->major = LTTNG_MODULES_ABI_MAJOR_VERSION; + v->minor = LTTNG_MODULES_ABI_MINOR_VERSION; +} + +static +long lttng_abi_add_context(struct file *file, + struct lttng_kernel_context *context_param, + struct lttng_ctx **ctx, struct lttng_session *session) +{ + + if (session->been_active) + return -EPERM; + + switch (context_param->ctx) { + case LTTNG_KERNEL_CONTEXT_PID: + return lttng_add_pid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_PRIO: + return lttng_add_prio_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_NICE: + return lttng_add_nice_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_VPID: + return lttng_add_vpid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_TID: + return lttng_add_tid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_VTID: + return lttng_add_vtid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_PPID: + return lttng_add_ppid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_VPPID: + return lttng_add_vppid_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_PERF_COUNTER: + context_param->u.perf_counter.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + return lttng_add_perf_counter_to_ctx(context_param->u.perf_counter.type, + context_param->u.perf_counter.config, + context_param->u.perf_counter.name, + ctx); + case LTTNG_KERNEL_CONTEXT_PROCNAME: + return lttng_add_procname_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_HOSTNAME: + return lttng_add_hostname_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_CPU_ID: + return lttng_add_cpu_id_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_INTERRUPTIBLE: + return lttng_add_interruptible_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_NEED_RESCHEDULE: + return lttng_add_need_reschedule_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_PREEMPTIBLE: + return lttng_add_preemptible_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_MIGRATABLE: + return lttng_add_migratable_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL: + case LTTNG_KERNEL_CONTEXT_CALLSTACK_USER: + return lttng_add_callstack_to_ctx(ctx, context_param->ctx); + default: + return -EINVAL; + } +} + +/** + * lttng_ioctl - lttng syscall through ioctl + * + * @file: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements lttng commands: + * LTTNG_KERNEL_SESSION + * Returns a LTTng trace session file descriptor + * LTTNG_KERNEL_TRACER_VERSION + * Returns the LTTng kernel tracer version + * LTTNG_KERNEL_TRACEPOINT_LIST + * Returns a file descriptor listing available tracepoints + * LTTNG_KERNEL_WAIT_QUIESCENT + * Returns after all previously running probes have completed + * LTTNG_KERNEL_TRACER_ABI_VERSION + * Returns the LTTng kernel tracer ABI version + * + * The returned session will be deleted when its file descriptor is closed. + */ +static +long lttng_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case LTTNG_KERNEL_OLD_SESSION: + case LTTNG_KERNEL_SESSION: + return lttng_abi_create_session(); + case LTTNG_KERNEL_OLD_TRACER_VERSION: + { + struct lttng_kernel_tracer_version v; + struct lttng_kernel_old_tracer_version oldv; + struct lttng_kernel_old_tracer_version *uversion = + (struct lttng_kernel_old_tracer_version __user *) arg; + + lttng_abi_tracer_version(&v); + oldv.major = v.major; + oldv.minor = v.minor; + oldv.patchlevel = v.patchlevel; + + if (copy_to_user(uversion, &oldv, sizeof(oldv))) + return -EFAULT; + return 0; + } + case LTTNG_KERNEL_TRACER_VERSION: + { + struct lttng_kernel_tracer_version version; + struct lttng_kernel_tracer_version *uversion = + (struct lttng_kernel_tracer_version __user *) arg; + + lttng_abi_tracer_version(&version); + + if (copy_to_user(uversion, &version, sizeof(version))) + return -EFAULT; + return 0; + } + case LTTNG_KERNEL_TRACER_ABI_VERSION: + { + struct lttng_kernel_tracer_abi_version version; + struct lttng_kernel_tracer_abi_version *uversion = + (struct lttng_kernel_tracer_abi_version __user *) arg; + + lttng_abi_tracer_abi_version(&version); + + if (copy_to_user(uversion, &version, sizeof(version))) + return -EFAULT; + return 0; + } + case LTTNG_KERNEL_OLD_TRACEPOINT_LIST: + case LTTNG_KERNEL_TRACEPOINT_LIST: + return lttng_abi_tracepoint_list(); + case LTTNG_KERNEL_SYSCALL_LIST: + return lttng_abi_syscall_list(); + case LTTNG_KERNEL_OLD_WAIT_QUIESCENT: + case LTTNG_KERNEL_WAIT_QUIESCENT: + synchronize_trace(); + return 0; + case LTTNG_KERNEL_OLD_CALIBRATE: + { + struct lttng_kernel_old_calibrate __user *ucalibrate = + (struct lttng_kernel_old_calibrate __user *) arg; + struct lttng_kernel_old_calibrate old_calibrate; + struct lttng_kernel_calibrate calibrate; + int ret; + + if (copy_from_user(&old_calibrate, ucalibrate, sizeof(old_calibrate))) + return -EFAULT; + calibrate.type = old_calibrate.type; + ret = lttng_calibrate(&calibrate); + if (copy_to_user(ucalibrate, &old_calibrate, sizeof(old_calibrate))) + return -EFAULT; + return ret; + } + case LTTNG_KERNEL_CALIBRATE: + { + struct lttng_kernel_calibrate __user *ucalibrate = + (struct lttng_kernel_calibrate __user *) arg; + struct lttng_kernel_calibrate calibrate; + int ret; + + if (copy_from_user(&calibrate, ucalibrate, sizeof(calibrate))) + return -EFAULT; + ret = lttng_calibrate(&calibrate); + if (copy_to_user(ucalibrate, &calibrate, sizeof(calibrate))) + return -EFAULT; + return ret; + } + default: + return -ENOIOCTLCMD; + } +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +static const struct proc_ops lttng_proc_ops = { + .proc_ioctl = lttng_ioctl, +#ifdef CONFIG_COMPAT + .proc_compat_ioctl = lttng_ioctl, +#endif /* CONFIG_COMPAT */ +}; +#else +static const struct file_operations lttng_proc_ops = { + .owner = THIS_MODULE, + .unlocked_ioctl = lttng_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_ioctl, +#endif /* CONFIG_COMPAT */ +}; +#endif + +static +int lttng_abi_create_channel(struct file *session_file, + struct lttng_kernel_channel *chan_param, + enum channel_type channel_type) +{ + struct lttng_session *session = session_file->private_data; + const struct file_operations *fops = NULL; + const char *transport_name; + struct lttng_channel *chan; + struct file *chan_file; + int chan_fd; + int ret = 0; + + chan_fd = lttng_get_unused_fd(); + if (chan_fd < 0) { + ret = chan_fd; + goto fd_error; + } + switch (channel_type) { + case PER_CPU_CHANNEL: + fops = <tng_channel_fops; + break; + case METADATA_CHANNEL: + fops = <tng_metadata_fops; + break; + } + + chan_file = anon_inode_getfile("[lttng_channel]", + fops, + NULL, O_RDWR); + if (IS_ERR(chan_file)) { + ret = PTR_ERR(chan_file); + goto file_error; + } + switch (channel_type) { + case PER_CPU_CHANNEL: + if (chan_param->output == LTTNG_KERNEL_SPLICE) { + transport_name = chan_param->overwrite ? + "relay-overwrite" : "relay-discard"; + } else if (chan_param->output == LTTNG_KERNEL_MMAP) { + transport_name = chan_param->overwrite ? + "relay-overwrite-mmap" : "relay-discard-mmap"; + } else { + return -EINVAL; + } + break; + case METADATA_CHANNEL: + if (chan_param->output == LTTNG_KERNEL_SPLICE) + transport_name = "relay-metadata"; + else if (chan_param->output == LTTNG_KERNEL_MMAP) + transport_name = "relay-metadata-mmap"; + else + return -EINVAL; + break; + default: + transport_name = ""; + break; + } + if (!atomic_long_add_unless(&session_file->f_count, 1, LONG_MAX)) { + ret = -EOVERFLOW; + goto refcount_error; + } + /* + * We tolerate no failure path after channel creation. It will stay + * invariant for the rest of the session. + */ + chan = lttng_channel_create(session, transport_name, NULL, + chan_param->subbuf_size, + chan_param->num_subbuf, + chan_param->switch_timer_interval, + chan_param->read_timer_interval, + channel_type); + if (!chan) { + ret = -EINVAL; + goto chan_error; + } + chan->file = chan_file; + chan_file->private_data = chan; + fd_install(chan_fd, chan_file); + + return chan_fd; + +chan_error: + atomic_long_dec(&session_file->f_count); +refcount_error: + fput(chan_file); +file_error: + put_unused_fd(chan_fd); +fd_error: + return ret; +} + +static +int lttng_abi_session_set_name(struct lttng_session *session, + struct lttng_kernel_session_name *name) +{ + size_t len; + + len = strnlen(name->name, LTTNG_KERNEL_SESSION_NAME_LEN); + + if (len == LTTNG_KERNEL_SESSION_NAME_LEN) { + /* Name is too long/malformed */ + return -EINVAL; + } + + strcpy(session->name, name->name); + return 0; +} + +static +int lttng_abi_session_set_creation_time(struct lttng_session *session, + struct lttng_kernel_session_creation_time *time) +{ + size_t len; + + len = strnlen(time->iso8601, LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN); + + if (len == LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN) { + /* Time is too long/malformed */ + return -EINVAL; + } + + strcpy(session->creation_time, time->iso8601); + return 0; +} + +/** + * lttng_session_ioctl - lttng session fd ioctl + * + * @file: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements lttng commands: + * LTTNG_KERNEL_CHANNEL + * Returns a LTTng channel file descriptor + * LTTNG_KERNEL_ENABLE + * Enables tracing for a session (weak enable) + * LTTNG_KERNEL_DISABLE + * Disables tracing for a session (strong disable) + * LTTNG_KERNEL_METADATA + * Returns a LTTng metadata file descriptor + * LTTNG_KERNEL_SESSION_TRACK_PID + * Add PID to session tracker + * LTTNG_KERNEL_SESSION_UNTRACK_PID + * Remove PID from session tracker + * + * The returned channel will be deleted when its file descriptor is closed. + */ +static +long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct lttng_session *session = file->private_data; + struct lttng_kernel_channel chan_param; + struct lttng_kernel_old_channel old_chan_param; + + switch (cmd) { + case LTTNG_KERNEL_OLD_CHANNEL: + { + if (copy_from_user(&old_chan_param, + (struct lttng_kernel_old_channel __user *) arg, + sizeof(struct lttng_kernel_old_channel))) + return -EFAULT; + chan_param.overwrite = old_chan_param.overwrite; + chan_param.subbuf_size = old_chan_param.subbuf_size; + chan_param.num_subbuf = old_chan_param.num_subbuf; + chan_param.switch_timer_interval = old_chan_param.switch_timer_interval; + chan_param.read_timer_interval = old_chan_param.read_timer_interval; + chan_param.output = old_chan_param.output; + + return lttng_abi_create_channel(file, &chan_param, + PER_CPU_CHANNEL); + } + case LTTNG_KERNEL_CHANNEL: + { + if (copy_from_user(&chan_param, + (struct lttng_kernel_channel __user *) arg, + sizeof(struct lttng_kernel_channel))) + return -EFAULT; + return lttng_abi_create_channel(file, &chan_param, + PER_CPU_CHANNEL); + } + case LTTNG_KERNEL_OLD_SESSION_START: + case LTTNG_KERNEL_OLD_ENABLE: + case LTTNG_KERNEL_SESSION_START: + case LTTNG_KERNEL_ENABLE: + return lttng_session_enable(session); + case LTTNG_KERNEL_OLD_SESSION_STOP: + case LTTNG_KERNEL_OLD_DISABLE: + case LTTNG_KERNEL_SESSION_STOP: + case LTTNG_KERNEL_DISABLE: + return lttng_session_disable(session); + case LTTNG_KERNEL_OLD_METADATA: + { + if (copy_from_user(&old_chan_param, + (struct lttng_kernel_old_channel __user *) arg, + sizeof(struct lttng_kernel_old_channel))) + return -EFAULT; + chan_param.overwrite = old_chan_param.overwrite; + chan_param.subbuf_size = old_chan_param.subbuf_size; + chan_param.num_subbuf = old_chan_param.num_subbuf; + chan_param.switch_timer_interval = old_chan_param.switch_timer_interval; + chan_param.read_timer_interval = old_chan_param.read_timer_interval; + chan_param.output = old_chan_param.output; + + return lttng_abi_create_channel(file, &chan_param, + METADATA_CHANNEL); + } + case LTTNG_KERNEL_METADATA: + { + if (copy_from_user(&chan_param, + (struct lttng_kernel_channel __user *) arg, + sizeof(struct lttng_kernel_channel))) + return -EFAULT; + return lttng_abi_create_channel(file, &chan_param, + METADATA_CHANNEL); + } + case LTTNG_KERNEL_SESSION_TRACK_PID: + return lttng_session_track_pid(session, (int) arg); + case LTTNG_KERNEL_SESSION_UNTRACK_PID: + return lttng_session_untrack_pid(session, (int) arg); + case LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS: + return lttng_session_list_tracker_pids(session); + case LTTNG_KERNEL_SESSION_METADATA_REGEN: + return lttng_session_metadata_regenerate(session); + case LTTNG_KERNEL_SESSION_STATEDUMP: + return lttng_session_statedump(session); + case LTTNG_KERNEL_SESSION_SET_NAME: + { + struct lttng_kernel_session_name name; + + if (copy_from_user(&name, + (struct lttng_kernel_session_name __user *) arg, + sizeof(struct lttng_kernel_session_name))) + return -EFAULT; + return lttng_abi_session_set_name(session, &name); + } + case LTTNG_KERNEL_SESSION_SET_CREATION_TIME: + { + struct lttng_kernel_session_creation_time time; + + if (copy_from_user(&time, + (struct lttng_kernel_session_creation_time __user *) arg, + sizeof(struct lttng_kernel_session_creation_time))) + return -EFAULT; + return lttng_abi_session_set_creation_time(session, &time); + } + default: + return -ENOIOCTLCMD; + } +} + +/* + * Called when the last file reference is dropped. + * + * Big fat note: channels and events are invariant for the whole session after + * their creation. So this session destruction also destroys all channel and + * event structures specific to this session (they are not destroyed when their + * individual file is released). + */ +static +int lttng_session_release(struct inode *inode, struct file *file) +{ + struct lttng_session *session = file->private_data; + + if (session) + lttng_session_destroy(session); + return 0; +} + +static const struct file_operations lttng_session_fops = { + .owner = THIS_MODULE, + .release = lttng_session_release, + .unlocked_ioctl = lttng_session_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_session_ioctl, +#endif +}; + +/** + * lttng_metadata_ring_buffer_poll - LTTng ring buffer poll file operation + * @filp: the file + * @wait: poll table + * + * Handles the poll operations for the metadata channels. + */ +static +unsigned int lttng_metadata_ring_buffer_poll(struct file *filp, + poll_table *wait) +{ + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + int finalized; + unsigned int mask = 0; + + if (filp->f_mode & FMODE_READ) { + poll_wait_set_exclusive(wait); + poll_wait(filp, &stream->read_wait, wait); + + finalized = stream->finalized; + + /* + * lib_ring_buffer_is_finalized() contains a smp_rmb() + * ordering finalized load before offsets loads. + */ + WARN_ON(atomic_long_read(&buf->active_readers) != 1); + + if (finalized) + mask |= POLLHUP; + + mutex_lock(&stream->metadata_cache->lock); + if (stream->metadata_cache->metadata_written > + stream->metadata_out) + mask |= POLLIN; + mutex_unlock(&stream->metadata_cache->lock); + } + + return mask; +} + +static +void lttng_metadata_ring_buffer_ioctl_put_next_subbuf(struct file *filp, + unsigned int cmd, unsigned long arg) +{ + struct lttng_metadata_stream *stream = filp->private_data; + + stream->metadata_out = stream->metadata_in; +} + +/* + * Reset the counter of how much metadata has been consumed to 0. That way, + * the consumer receives the content of the metadata cache unchanged. This is + * different from the metadata_regenerate where the offset from epoch is + * resampled, here we want the exact same content as the last time the metadata + * was generated. This command is only possible if all the metadata written + * in the cache has been output to the metadata stream to avoid corrupting the + * metadata file. + * + * Return 0 on success, a negative value on error. + */ +static +int lttng_metadata_cache_dump(struct lttng_metadata_stream *stream) +{ + int ret; + struct lttng_metadata_cache *cache = stream->metadata_cache; + + mutex_lock(&cache->lock); + if (stream->metadata_out != cache->metadata_written) { + ret = -EBUSY; + goto end; + } + stream->metadata_out = 0; + stream->metadata_in = 0; + wake_up_interruptible(&stream->read_wait); + ret = 0; + +end: + mutex_unlock(&cache->lock); + return ret; +} + +static +long lttng_metadata_ring_buffer_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg) +{ + int ret; + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + unsigned int rb_cmd; + bool coherent; + + if (cmd == RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK) + rb_cmd = RING_BUFFER_GET_NEXT_SUBBUF; + else + rb_cmd = cmd; + + switch (cmd) { + case RING_BUFFER_GET_NEXT_SUBBUF: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + ret = lttng_metadata_output_channel(stream, chan, NULL); + if (ret > 0) { + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + ret = 0; + } else if (ret < 0) + goto err; + break; + } + case RING_BUFFER_GET_SUBBUF: + { + /* + * Random access is not allowed for metadata channel. + */ + return -ENOSYS; + } + case RING_BUFFER_FLUSH_EMPTY: /* Fall-through. */ + case RING_BUFFER_FLUSH: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + /* + * Before doing the actual ring buffer flush, write up to one + * packet of metadata in the ring buffer. + */ + ret = lttng_metadata_output_channel(stream, chan, NULL); + if (ret < 0) + goto err; + break; + } + case RING_BUFFER_GET_METADATA_VERSION: + { + struct lttng_metadata_stream *stream = filp->private_data; + + return put_u64(stream->version, arg); + } + case RING_BUFFER_METADATA_CACHE_DUMP: + { + struct lttng_metadata_stream *stream = filp->private_data; + + return lttng_metadata_cache_dump(stream); + } + case RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + ret = lttng_metadata_output_channel(stream, chan, &coherent); + if (ret > 0) { + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + ret = 0; + } else if (ret < 0) { + goto err; + } + break; + } + default: + break; + } + /* PUT_SUBBUF is the one from lib ring buffer, unmodified. */ + + /* Performing lib ring buffer ioctl after our own. */ + ret = lib_ring_buffer_ioctl(filp, rb_cmd, arg, buf); + if (ret < 0) + goto err; + + switch (cmd) { + case RING_BUFFER_PUT_NEXT_SUBBUF: + { + lttng_metadata_ring_buffer_ioctl_put_next_subbuf(filp, + cmd, arg); + break; + } + case RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK: + { + return put_u32(coherent, arg); + } + default: + break; + } +err: + return ret; +} + +#ifdef CONFIG_COMPAT +static +long lttng_metadata_ring_buffer_compat_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg) +{ + int ret; + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + unsigned int rb_cmd; + bool coherent; + + if (cmd == RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK) + rb_cmd = RING_BUFFER_GET_NEXT_SUBBUF; + else + rb_cmd = cmd; + + switch (cmd) { + case RING_BUFFER_GET_NEXT_SUBBUF: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + ret = lttng_metadata_output_channel(stream, chan, NULL); + if (ret > 0) { + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + ret = 0; + } else if (ret < 0) + goto err; + break; + } + case RING_BUFFER_GET_SUBBUF: + { + /* + * Random access is not allowed for metadata channel. + */ + return -ENOSYS; + } + case RING_BUFFER_FLUSH_EMPTY: /* Fall-through. */ + case RING_BUFFER_FLUSH: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + /* + * Before doing the actual ring buffer flush, write up to one + * packet of metadata in the ring buffer. + */ + ret = lttng_metadata_output_channel(stream, chan, NULL); + if (ret < 0) + goto err; + break; + } + case RING_BUFFER_GET_METADATA_VERSION: + { + struct lttng_metadata_stream *stream = filp->private_data; + + return put_u64(stream->version, arg); + } + case RING_BUFFER_METADATA_CACHE_DUMP: + { + struct lttng_metadata_stream *stream = filp->private_data; + + return lttng_metadata_cache_dump(stream); + } + case RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK: + { + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + struct channel *chan = buf->backend.chan; + + ret = lttng_metadata_output_channel(stream, chan, &coherent); + if (ret > 0) { + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + ret = 0; + } else if (ret < 0) { + goto err; + } + break; + } + default: + break; + } + /* PUT_SUBBUF is the one from lib ring buffer, unmodified. */ + + /* Performing lib ring buffer ioctl after our own. */ + ret = lib_ring_buffer_compat_ioctl(filp, rb_cmd, arg, buf); + if (ret < 0) + goto err; + + switch (cmd) { + case RING_BUFFER_PUT_NEXT_SUBBUF: + { + lttng_metadata_ring_buffer_ioctl_put_next_subbuf(filp, + cmd, arg); + break; + } + case RING_BUFFER_GET_NEXT_SUBBUF_METADATA_CHECK: + { + return put_u32(coherent, arg); + } + default: + break; + } +err: + return ret; +} +#endif + +/* + * This is not used by anonymous file descriptors. This code is left + * there if we ever want to implement an inode with open() operation. + */ +static +int lttng_metadata_ring_buffer_open(struct inode *inode, struct file *file) +{ + struct lttng_metadata_stream *stream = inode->i_private; + struct lib_ring_buffer *buf = stream->priv; + + file->private_data = buf; + /* + * Since life-time of metadata cache differs from that of + * session, we need to keep our own reference on the transport. + */ + if (!try_module_get(stream->transport->owner)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + return -EBUSY; + } + return lib_ring_buffer_open(inode, file, buf); +} + +static +int lttng_metadata_ring_buffer_release(struct inode *inode, struct file *file) +{ + struct lttng_metadata_stream *stream = file->private_data; + struct lib_ring_buffer *buf = stream->priv; + + mutex_lock(&stream->metadata_cache->lock); + list_del(&stream->list); + mutex_unlock(&stream->metadata_cache->lock); + kref_put(&stream->metadata_cache->refcount, metadata_cache_destroy); + module_put(stream->transport->owner); + kfree(stream); + return lib_ring_buffer_release(inode, file, buf); +} + +static +ssize_t lttng_metadata_ring_buffer_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + struct lttng_metadata_stream *stream = in->private_data; + struct lib_ring_buffer *buf = stream->priv; + + return lib_ring_buffer_splice_read(in, ppos, pipe, len, + flags, buf); +} + +static +int lttng_metadata_ring_buffer_mmap(struct file *filp, + struct vm_area_struct *vma) +{ + struct lttng_metadata_stream *stream = filp->private_data; + struct lib_ring_buffer *buf = stream->priv; + + return lib_ring_buffer_mmap(filp, vma, buf); +} + +static +const struct file_operations lttng_metadata_ring_buffer_file_operations = { + .owner = THIS_MODULE, + .open = lttng_metadata_ring_buffer_open, + .release = lttng_metadata_ring_buffer_release, + .poll = lttng_metadata_ring_buffer_poll, + .splice_read = lttng_metadata_ring_buffer_splice_read, + .mmap = lttng_metadata_ring_buffer_mmap, + .unlocked_ioctl = lttng_metadata_ring_buffer_ioctl, + .llseek = vfs_lib_ring_buffer_no_llseek, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_metadata_ring_buffer_compat_ioctl, +#endif +}; + +static +int lttng_abi_create_stream_fd(struct file *channel_file, void *stream_priv, + const struct file_operations *fops) +{ + int stream_fd, ret; + struct file *stream_file; + + stream_fd = lttng_get_unused_fd(); + if (stream_fd < 0) { + ret = stream_fd; + goto fd_error; + } + stream_file = anon_inode_getfile("[lttng_stream]", fops, + stream_priv, O_RDWR); + if (IS_ERR(stream_file)) { + ret = PTR_ERR(stream_file); + goto file_error; + } + /* + * OPEN_FMODE, called within anon_inode_getfile/alloc_file, don't honor + * FMODE_LSEEK, FMODE_PREAD nor FMODE_PWRITE. We need to read from this + * file descriptor, so we set FMODE_PREAD here. + */ + stream_file->f_mode |= FMODE_PREAD; + fd_install(stream_fd, stream_file); + /* + * The stream holds a reference to the channel within the generic ring + * buffer library, so no need to hold a refcount on the channel and + * session files here. + */ + return stream_fd; + +file_error: + put_unused_fd(stream_fd); +fd_error: + return ret; +} + +static +int lttng_abi_open_stream(struct file *channel_file) +{ + struct lttng_channel *channel = channel_file->private_data; + struct lib_ring_buffer *buf; + int ret; + void *stream_priv; + + buf = channel->ops->buffer_read_open(channel->chan); + if (!buf) + return -ENOENT; + + stream_priv = buf; + ret = lttng_abi_create_stream_fd(channel_file, stream_priv, + <tng_stream_ring_buffer_file_operations); + if (ret < 0) + goto fd_error; + + return ret; + +fd_error: + channel->ops->buffer_read_close(buf); + return ret; +} + +static +int lttng_abi_open_metadata_stream(struct file *channel_file) +{ + struct lttng_channel *channel = channel_file->private_data; + struct lttng_session *session = channel->session; + struct lib_ring_buffer *buf; + int ret; + struct lttng_metadata_stream *metadata_stream; + void *stream_priv; + + buf = channel->ops->buffer_read_open(channel->chan); + if (!buf) + return -ENOENT; + + metadata_stream = kzalloc(sizeof(struct lttng_metadata_stream), + GFP_KERNEL); + if (!metadata_stream) { + ret = -ENOMEM; + goto nomem; + } + metadata_stream->metadata_cache = session->metadata_cache; + init_waitqueue_head(&metadata_stream->read_wait); + metadata_stream->priv = buf; + stream_priv = metadata_stream; + metadata_stream->transport = channel->transport; + /* Initial state is an empty metadata, considered as incoherent. */ + metadata_stream->coherent = false; + + /* + * Since life-time of metadata cache differs from that of + * session, we need to keep our own reference on the transport. + */ + if (!try_module_get(metadata_stream->transport->owner)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + ret = -EINVAL; + goto notransport; + } + + if (!lttng_kref_get(&session->metadata_cache->refcount)) { + ret = -EOVERFLOW; + goto kref_error; + } + + ret = lttng_abi_create_stream_fd(channel_file, stream_priv, + <tng_metadata_ring_buffer_file_operations); + if (ret < 0) + goto fd_error; + + mutex_lock(&session->metadata_cache->lock); + list_add(&metadata_stream->list, + &session->metadata_cache->metadata_stream); + mutex_unlock(&session->metadata_cache->lock); + return ret; + +fd_error: + kref_put(&session->metadata_cache->refcount, metadata_cache_destroy); +kref_error: + module_put(metadata_stream->transport->owner); +notransport: + kfree(metadata_stream); +nomem: + channel->ops->buffer_read_close(buf); + return ret; +} + +static +int lttng_abi_validate_event_param(struct lttng_kernel_event *event_param) +{ + /* Limit ABI to implemented features. */ + switch (event_param->instrumentation) { + case LTTNG_KERNEL_SYSCALL: + switch (event_param->u.syscall.entryexit) { + case LTTNG_KERNEL_SYSCALL_ENTRYEXIT: + break; + default: + return -EINVAL; + } + switch (event_param->u.syscall.abi) { + case LTTNG_KERNEL_SYSCALL_ABI_ALL: + break; + default: + return -EINVAL; + } + switch (event_param->u.syscall.match) { + case LTTNG_SYSCALL_MATCH_NAME: + break; + default: + return -EINVAL; + } + break; + + case LTTNG_KERNEL_TRACEPOINT: /* Fallthrough */ + case LTTNG_KERNEL_KPROBE: /* Fallthrough */ + case LTTNG_KERNEL_KRETPROBE: /* Fallthrough */ + case LTTNG_KERNEL_NOOP: /* Fallthrough */ + case LTTNG_KERNEL_UPROBE: + break; + + case LTTNG_KERNEL_FUNCTION: /* Fallthrough */ + default: + return -EINVAL; + } + return 0; +} + +static +int lttng_abi_create_event(struct file *channel_file, + struct lttng_kernel_event *event_param) +{ + struct lttng_channel *channel = channel_file->private_data; + int event_fd, ret; + struct file *event_file; + void *priv; + + event_param->name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + switch (event_param->instrumentation) { + case LTTNG_KERNEL_KRETPROBE: + event_param->u.kretprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + break; + case LTTNG_KERNEL_KPROBE: + event_param->u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + break; + case LTTNG_KERNEL_FUNCTION: + WARN_ON_ONCE(1); + /* Not implemented. */ + break; + default: + break; + } + event_fd = lttng_get_unused_fd(); + if (event_fd < 0) { + ret = event_fd; + goto fd_error; + } + event_file = anon_inode_getfile("[lttng_event]", + <tng_event_fops, + NULL, O_RDWR); + if (IS_ERR(event_file)) { + ret = PTR_ERR(event_file); + goto file_error; + } + /* The event holds a reference on the channel */ + if (!atomic_long_add_unless(&channel_file->f_count, 1, LONG_MAX)) { + ret = -EOVERFLOW; + goto refcount_error; + } + ret = lttng_abi_validate_event_param(event_param); + if (ret) + goto event_error; + if (event_param->instrumentation == LTTNG_KERNEL_TRACEPOINT + || event_param->instrumentation == LTTNG_KERNEL_SYSCALL) { + struct lttng_enabler *enabler; + + if (strutils_is_star_glob_pattern(event_param->name)) { + /* + * If the event name is a star globbing pattern, + * we create the special star globbing enabler. + */ + enabler = lttng_enabler_create(LTTNG_ENABLER_STAR_GLOB, + event_param, channel); + } else { + enabler = lttng_enabler_create(LTTNG_ENABLER_NAME, + event_param, channel); + } + priv = enabler; + } else { + struct lttng_event *event; + + /* + * We tolerate no failure path after event creation. It + * will stay invariant for the rest of the session. + */ + event = lttng_event_create(channel, event_param, + NULL, NULL, + event_param->instrumentation); + WARN_ON_ONCE(!event); + if (IS_ERR(event)) { + ret = PTR_ERR(event); + goto event_error; + } + priv = event; + } + event_file->private_data = priv; + fd_install(event_fd, event_file); + return event_fd; + +event_error: + atomic_long_dec(&channel_file->f_count); +refcount_error: + fput(event_file); +file_error: + put_unused_fd(event_fd); +fd_error: + return ret; +} + +/** + * lttng_channel_ioctl - lttng syscall through ioctl + * + * @file: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements lttng commands: + * LTTNG_KERNEL_STREAM + * Returns an event stream file descriptor or failure. + * (typically, one event stream records events from one CPU) + * LTTNG_KERNEL_EVENT + * Returns an event file descriptor or failure. + * LTTNG_KERNEL_CONTEXT + * Prepend a context field to each event in the channel + * LTTNG_KERNEL_ENABLE + * Enable recording for events in this channel (weak enable) + * LTTNG_KERNEL_DISABLE + * Disable recording for events in this channel (strong disable) + * + * Channel and event file descriptors also hold a reference on the session. + */ +static +long lttng_channel_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct lttng_channel *channel = file->private_data; + + switch (cmd) { + case LTTNG_KERNEL_OLD_STREAM: + case LTTNG_KERNEL_STREAM: + return lttng_abi_open_stream(file); + case LTTNG_KERNEL_OLD_EVENT: + { + struct lttng_kernel_event *uevent_param; + struct lttng_kernel_old_event *old_uevent_param; + int ret; + + uevent_param = kmalloc(sizeof(struct lttng_kernel_event), + GFP_KERNEL); + if (!uevent_param) { + ret = -ENOMEM; + goto old_event_end; + } + old_uevent_param = kmalloc( + sizeof(struct lttng_kernel_old_event), + GFP_KERNEL); + if (!old_uevent_param) { + ret = -ENOMEM; + goto old_event_error_free_param; + } + if (copy_from_user(old_uevent_param, + (struct lttng_kernel_old_event __user *) arg, + sizeof(struct lttng_kernel_old_event))) { + ret = -EFAULT; + goto old_event_error_free_old_param; + } + + memcpy(uevent_param->name, old_uevent_param->name, + sizeof(uevent_param->name)); + uevent_param->instrumentation = + old_uevent_param->instrumentation; + + switch (old_uevent_param->instrumentation) { + case LTTNG_KERNEL_KPROBE: + uevent_param->u.kprobe.addr = + old_uevent_param->u.kprobe.addr; + uevent_param->u.kprobe.offset = + old_uevent_param->u.kprobe.offset; + memcpy(uevent_param->u.kprobe.symbol_name, + old_uevent_param->u.kprobe.symbol_name, + sizeof(uevent_param->u.kprobe.symbol_name)); + break; + case LTTNG_KERNEL_KRETPROBE: + uevent_param->u.kretprobe.addr = + old_uevent_param->u.kretprobe.addr; + uevent_param->u.kretprobe.offset = + old_uevent_param->u.kretprobe.offset; + memcpy(uevent_param->u.kretprobe.symbol_name, + old_uevent_param->u.kretprobe.symbol_name, + sizeof(uevent_param->u.kretprobe.symbol_name)); + break; + case LTTNG_KERNEL_FUNCTION: + WARN_ON_ONCE(1); + /* Not implemented. */ + break; + default: + break; + } + ret = lttng_abi_create_event(file, uevent_param); + +old_event_error_free_old_param: + kfree(old_uevent_param); +old_event_error_free_param: + kfree(uevent_param); +old_event_end: + return ret; + } + case LTTNG_KERNEL_EVENT: + { + struct lttng_kernel_event uevent_param; + + if (copy_from_user(&uevent_param, + (struct lttng_kernel_event __user *) arg, + sizeof(uevent_param))) + return -EFAULT; + return lttng_abi_create_event(file, &uevent_param); + } + case LTTNG_KERNEL_OLD_CONTEXT: + { + struct lttng_kernel_context *ucontext_param; + struct lttng_kernel_old_context *old_ucontext_param; + int ret; + + ucontext_param = kmalloc(sizeof(struct lttng_kernel_context), + GFP_KERNEL); + if (!ucontext_param) { + ret = -ENOMEM; + goto old_ctx_end; + } + old_ucontext_param = kmalloc(sizeof(struct lttng_kernel_old_context), + GFP_KERNEL); + if (!old_ucontext_param) { + ret = -ENOMEM; + goto old_ctx_error_free_param; + } + + if (copy_from_user(old_ucontext_param, + (struct lttng_kernel_old_context __user *) arg, + sizeof(struct lttng_kernel_old_context))) { + ret = -EFAULT; + goto old_ctx_error_free_old_param; + } + ucontext_param->ctx = old_ucontext_param->ctx; + memcpy(ucontext_param->padding, old_ucontext_param->padding, + sizeof(ucontext_param->padding)); + /* only type that uses the union */ + if (old_ucontext_param->ctx == LTTNG_KERNEL_CONTEXT_PERF_COUNTER) { + ucontext_param->u.perf_counter.type = + old_ucontext_param->u.perf_counter.type; + ucontext_param->u.perf_counter.config = + old_ucontext_param->u.perf_counter.config; + memcpy(ucontext_param->u.perf_counter.name, + old_ucontext_param->u.perf_counter.name, + sizeof(ucontext_param->u.perf_counter.name)); + } + + ret = lttng_abi_add_context(file, + ucontext_param, + &channel->ctx, channel->session); + +old_ctx_error_free_old_param: + kfree(old_ucontext_param); +old_ctx_error_free_param: + kfree(ucontext_param); +old_ctx_end: + return ret; + } + case LTTNG_KERNEL_CONTEXT: + { + struct lttng_kernel_context ucontext_param; + + if (copy_from_user(&ucontext_param, + (struct lttng_kernel_context __user *) arg, + sizeof(ucontext_param))) + return -EFAULT; + return lttng_abi_add_context(file, + &ucontext_param, + &channel->ctx, channel->session); + } + case LTTNG_KERNEL_OLD_ENABLE: + case LTTNG_KERNEL_ENABLE: + return lttng_channel_enable(channel); + case LTTNG_KERNEL_OLD_DISABLE: + case LTTNG_KERNEL_DISABLE: + return lttng_channel_disable(channel); + case LTTNG_KERNEL_SYSCALL_MASK: + return lttng_channel_syscall_mask(channel, + (struct lttng_kernel_syscall_mask __user *) arg); + default: + return -ENOIOCTLCMD; + } +} + +/** + * lttng_metadata_ioctl - lttng syscall through ioctl + * + * @file: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements lttng commands: + * LTTNG_KERNEL_STREAM + * Returns an event stream file descriptor or failure. + * + * Channel and event file descriptors also hold a reference on the session. + */ +static +long lttng_metadata_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case LTTNG_KERNEL_OLD_STREAM: + case LTTNG_KERNEL_STREAM: + return lttng_abi_open_metadata_stream(file); + default: + return -ENOIOCTLCMD; + } +} + +/** + * lttng_channel_poll - lttng stream addition/removal monitoring + * + * @file: the file + * @wait: poll table + */ +unsigned int lttng_channel_poll(struct file *file, poll_table *wait) +{ + struct lttng_channel *channel = file->private_data; + unsigned int mask = 0; + + if (file->f_mode & FMODE_READ) { + poll_wait_set_exclusive(wait); + poll_wait(file, channel->ops->get_hp_wait_queue(channel->chan), + wait); + + if (channel->ops->is_disabled(channel->chan)) + return POLLERR; + if (channel->ops->is_finalized(channel->chan)) + return POLLHUP; + if (channel->ops->buffer_has_read_closed_stream(channel->chan)) + return POLLIN | POLLRDNORM; + return 0; + } + return mask; + +} + +static +int lttng_channel_release(struct inode *inode, struct file *file) +{ + struct lttng_channel *channel = file->private_data; + + if (channel) + fput(channel->session->file); + return 0; +} + +static +int lttng_metadata_channel_release(struct inode *inode, struct file *file) +{ + struct lttng_channel *channel = file->private_data; + + if (channel) { + fput(channel->session->file); + lttng_metadata_channel_destroy(channel); + } + + return 0; +} + +static const struct file_operations lttng_channel_fops = { + .owner = THIS_MODULE, + .release = lttng_channel_release, + .poll = lttng_channel_poll, + .unlocked_ioctl = lttng_channel_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_channel_ioctl, +#endif +}; + +static const struct file_operations lttng_metadata_fops = { + .owner = THIS_MODULE, + .release = lttng_metadata_channel_release, + .unlocked_ioctl = lttng_metadata_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_metadata_ioctl, +#endif +}; + +/** + * lttng_event_ioctl - lttng syscall through ioctl + * + * @file: the file + * @cmd: the command + * @arg: command arg + * + * This ioctl implements lttng commands: + * LTTNG_KERNEL_CONTEXT + * Prepend a context field to each record of this event + * LTTNG_KERNEL_ENABLE + * Enable recording for this event (weak enable) + * LTTNG_KERNEL_DISABLE + * Disable recording for this event (strong disable) + */ +static +long lttng_event_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct lttng_event *event; + struct lttng_enabler *enabler; + enum lttng_event_type *evtype = file->private_data; + + switch (cmd) { + case LTTNG_KERNEL_OLD_CONTEXT: + { + /* Not implemented */ + return -ENOSYS; + } + case LTTNG_KERNEL_CONTEXT: + { + /* Not implemented */ + return -ENOSYS; + } + case LTTNG_KERNEL_OLD_ENABLE: + case LTTNG_KERNEL_ENABLE: + switch (*evtype) { + case LTTNG_TYPE_EVENT: + event = file->private_data; + return lttng_event_enable(event); + case LTTNG_TYPE_ENABLER: + enabler = file->private_data; + return lttng_enabler_enable(enabler); + default: + WARN_ON_ONCE(1); + return -ENOSYS; + } + case LTTNG_KERNEL_OLD_DISABLE: + case LTTNG_KERNEL_DISABLE: + switch (*evtype) { + case LTTNG_TYPE_EVENT: + event = file->private_data; + return lttng_event_disable(event); + case LTTNG_TYPE_ENABLER: + enabler = file->private_data; + return lttng_enabler_disable(enabler); + default: + WARN_ON_ONCE(1); + return -ENOSYS; + } + case LTTNG_KERNEL_FILTER: + switch (*evtype) { + case LTTNG_TYPE_EVENT: + return -EINVAL; + case LTTNG_TYPE_ENABLER: + { + enabler = file->private_data; + return lttng_enabler_attach_bytecode(enabler, + (struct lttng_kernel_filter_bytecode __user *) arg); + } + default: + WARN_ON_ONCE(1); + return -ENOSYS; + } + case LTTNG_KERNEL_ADD_CALLSITE: + switch (*evtype) { + case LTTNG_TYPE_EVENT: + event = file->private_data; + return lttng_event_add_callsite(event, + (struct lttng_kernel_event_callsite __user *) arg); + case LTTNG_TYPE_ENABLER: + return -EINVAL; + default: + WARN_ON_ONCE(1); + return -ENOSYS; + } + default: + return -ENOIOCTLCMD; + } +} + +static +int lttng_event_release(struct inode *inode, struct file *file) +{ + struct lttng_event *event; + struct lttng_enabler *enabler; + enum lttng_event_type *evtype = file->private_data; + + if (!evtype) + return 0; + + switch (*evtype) { + case LTTNG_TYPE_EVENT: + event = file->private_data; + if (event) + fput(event->chan->file); + break; + case LTTNG_TYPE_ENABLER: + enabler = file->private_data; + if (enabler) + fput(enabler->chan->file); + break; + default: + WARN_ON_ONCE(1); + break; + } + + return 0; +} + +/* TODO: filter control ioctl */ +static const struct file_operations lttng_event_fops = { + .owner = THIS_MODULE, + .release = lttng_event_release, + .unlocked_ioctl = lttng_event_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = lttng_event_ioctl, +#endif +}; + +static int put_u64(uint64_t val, unsigned long arg) +{ + return put_user(val, (uint64_t __user *) arg); +} + +static int put_u32(uint32_t val, unsigned long arg) +{ + return put_user(val, (uint32_t __user *) arg); +} + +static long lttng_stream_ring_buffer_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg) +{ + struct lib_ring_buffer *buf = filp->private_data; + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + const struct lttng_channel_ops *ops = chan->backend.priv_ops; + int ret; + + if (atomic_read(&chan->record_disabled)) + return -EIO; + + switch (cmd) { + case LTTNG_RING_BUFFER_GET_TIMESTAMP_BEGIN: + { + uint64_t ts; + + ret = ops->timestamp_begin(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_GET_TIMESTAMP_END: + { + uint64_t ts; + + ret = ops->timestamp_end(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_GET_EVENTS_DISCARDED: + { + uint64_t ed; + + ret = ops->events_discarded(config, buf, &ed); + if (ret < 0) + goto error; + return put_u64(ed, arg); + } + case LTTNG_RING_BUFFER_GET_CONTENT_SIZE: + { + uint64_t cs; + + ret = ops->content_size(config, buf, &cs); + if (ret < 0) + goto error; + return put_u64(cs, arg); + } + case LTTNG_RING_BUFFER_GET_PACKET_SIZE: + { + uint64_t ps; + + ret = ops->packet_size(config, buf, &ps); + if (ret < 0) + goto error; + return put_u64(ps, arg); + } + case LTTNG_RING_BUFFER_GET_STREAM_ID: + { + uint64_t si; + + ret = ops->stream_id(config, buf, &si); + if (ret < 0) + goto error; + return put_u64(si, arg); + } + case LTTNG_RING_BUFFER_GET_CURRENT_TIMESTAMP: + { + uint64_t ts; + + ret = ops->current_timestamp(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_GET_SEQ_NUM: + { + uint64_t seq; + + ret = ops->sequence_number(config, buf, &seq); + if (ret < 0) + goto error; + return put_u64(seq, arg); + } + case LTTNG_RING_BUFFER_INSTANCE_ID: + { + uint64_t id; + + ret = ops->instance_id(config, buf, &id); + if (ret < 0) + goto error; + return put_u64(id, arg); + } + default: + return lib_ring_buffer_file_operations.unlocked_ioctl(filp, + cmd, arg); + } + +error: + return -ENOSYS; +} + +#ifdef CONFIG_COMPAT +static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg) +{ + struct lib_ring_buffer *buf = filp->private_data; + struct channel *chan = buf->backend.chan; + const struct lib_ring_buffer_config *config = &chan->backend.config; + const struct lttng_channel_ops *ops = chan->backend.priv_ops; + int ret; + + if (atomic_read(&chan->record_disabled)) + return -EIO; + + switch (cmd) { + case LTTNG_RING_BUFFER_COMPAT_GET_TIMESTAMP_BEGIN: + { + uint64_t ts; + + ret = ops->timestamp_begin(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_TIMESTAMP_END: + { + uint64_t ts; + + ret = ops->timestamp_end(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_EVENTS_DISCARDED: + { + uint64_t ed; + + ret = ops->events_discarded(config, buf, &ed); + if (ret < 0) + goto error; + return put_u64(ed, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_CONTENT_SIZE: + { + uint64_t cs; + + ret = ops->content_size(config, buf, &cs); + if (ret < 0) + goto error; + return put_u64(cs, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_PACKET_SIZE: + { + uint64_t ps; + + ret = ops->packet_size(config, buf, &ps); + if (ret < 0) + goto error; + return put_u64(ps, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_STREAM_ID: + { + uint64_t si; + + ret = ops->stream_id(config, buf, &si); + if (ret < 0) + goto error; + return put_u64(si, arg); + } + case LTTNG_RING_BUFFER_GET_CURRENT_TIMESTAMP: + { + uint64_t ts; + + ret = ops->current_timestamp(config, buf, &ts); + if (ret < 0) + goto error; + return put_u64(ts, arg); + } + case LTTNG_RING_BUFFER_COMPAT_GET_SEQ_NUM: + { + uint64_t seq; + + ret = ops->sequence_number(config, buf, &seq); + if (ret < 0) + goto error; + return put_u64(seq, arg); + } + case LTTNG_RING_BUFFER_COMPAT_INSTANCE_ID: + { + uint64_t id; + + ret = ops->instance_id(config, buf, &id); + if (ret < 0) + goto error; + return put_u64(id, arg); + } + default: + return lib_ring_buffer_file_operations.compat_ioctl(filp, + cmd, arg); + } + +error: + return -ENOSYS; +} +#endif /* CONFIG_COMPAT */ + +static void lttng_stream_override_ring_buffer_fops(void) +{ + lttng_stream_ring_buffer_file_operations.owner = THIS_MODULE; + lttng_stream_ring_buffer_file_operations.open = + lib_ring_buffer_file_operations.open; + lttng_stream_ring_buffer_file_operations.release = + lib_ring_buffer_file_operations.release; + lttng_stream_ring_buffer_file_operations.poll = + lib_ring_buffer_file_operations.poll; + lttng_stream_ring_buffer_file_operations.splice_read = + lib_ring_buffer_file_operations.splice_read; + lttng_stream_ring_buffer_file_operations.mmap = + lib_ring_buffer_file_operations.mmap; + lttng_stream_ring_buffer_file_operations.unlocked_ioctl = + lttng_stream_ring_buffer_ioctl; + lttng_stream_ring_buffer_file_operations.llseek = + lib_ring_buffer_file_operations.llseek; +#ifdef CONFIG_COMPAT + lttng_stream_ring_buffer_file_operations.compat_ioctl = + lttng_stream_ring_buffer_compat_ioctl; +#endif +} + +int __init lttng_abi_init(void) +{ + int ret = 0; + + wrapper_vmalloc_sync_mappings(); + lttng_clock_ref(); + + ret = lttng_tp_mempool_init(); + if (ret) { + goto error; + } + + lttng_proc_dentry = proc_create_data("lttng", S_IRUSR | S_IWUSR, NULL, + <tng_proc_ops, NULL); + + if (!lttng_proc_dentry) { + printk(KERN_ERR "Error creating LTTng control file\n"); + ret = -ENOMEM; + goto error; + } + lttng_stream_override_ring_buffer_fops(); + return 0; + +error: + lttng_tp_mempool_destroy(); + lttng_clock_unref(); + return ret; +} + +/* No __exit annotation because used by init error path too. */ +void lttng_abi_exit(void) +{ + lttng_tp_mempool_destroy(); + lttng_clock_unref(); + if (lttng_proc_dentry) + remove_proc_entry("lttng", NULL); +} diff --git a/ltt/lttng-2.11.0/lttng-abi.h b/ltt/lttng-2.11.0/lttng-abi.h new file mode 100644 index 000000000000..c408ac9a244c --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-abi.h @@ -0,0 +1,331 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-abi.h + * + * LTTng ABI header + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_ABI_H +#define _LTTNG_ABI_H + +#include + +/* + * Major/minor version of ABI exposed to lttng tools. Major number + * should be increased when an incompatible ABI change is done. + */ +#define LTTNG_MODULES_ABI_MAJOR_VERSION 2 +#define LTTNG_MODULES_ABI_MINOR_VERSION 4 + +#define LTTNG_KERNEL_SYM_NAME_LEN 256 +#define LTTNG_KERNEL_SESSION_NAME_LEN 256 +#define LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN 26 + +enum lttng_kernel_instrumentation { + LTTNG_KERNEL_TRACEPOINT = 0, + LTTNG_KERNEL_KPROBE = 1, + LTTNG_KERNEL_FUNCTION = 2, + LTTNG_KERNEL_KRETPROBE = 3, + LTTNG_KERNEL_NOOP = 4, /* not hooked */ + LTTNG_KERNEL_SYSCALL = 5, + LTTNG_KERNEL_UPROBE = 6, +}; + +/* + * LTTng consumer mode + */ +enum lttng_kernel_output { + LTTNG_KERNEL_SPLICE = 0, + LTTNG_KERNEL_MMAP = 1, +}; + +/* + * LTTng DebugFS ABI structures. + */ +#define LTTNG_KERNEL_CHANNEL_PADDING LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_channel { + uint64_t subbuf_size; /* in bytes */ + uint64_t num_subbuf; + unsigned int switch_timer_interval; /* usecs */ + unsigned int read_timer_interval; /* usecs */ + enum lttng_kernel_output output; /* splice, mmap */ + int overwrite; /* 1: overwrite, 0: discard */ + char padding[LTTNG_KERNEL_CHANNEL_PADDING]; +} __attribute__((packed)); + +struct lttng_kernel_kretprobe { + uint64_t addr; + + uint64_t offset; + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +} __attribute__((packed)); + +/* + * Either addr is used, or symbol_name and offset. + */ +struct lttng_kernel_kprobe { + uint64_t addr; + + uint64_t offset; + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +} __attribute__((packed)); + +struct lttng_kernel_function_tracer { + char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN]; +} __attribute__((packed)); + +struct lttng_kernel_uprobe { + int fd; +} __attribute__((packed)); + +struct lttng_kernel_event_callsite_uprobe { + uint64_t offset; +} __attribute__((packed)); + +struct lttng_kernel_event_callsite { + union { + struct lttng_kernel_event_callsite_uprobe uprobe; + } u; +} __attribute__((packed)); + +enum lttng_kernel_syscall_entryexit { + LTTNG_KERNEL_SYSCALL_ENTRYEXIT = 0, + LTTNG_KERNEL_SYSCALL_ENTRY = 1, /* Not implemented. */ + LTTNG_KERNEL_SYSCALL_EXIT = 2, /* Not implemented. */ +}; + +enum lttng_kernel_syscall_abi { + LTTNG_KERNEL_SYSCALL_ABI_ALL = 0, + LTTNG_KERNEL_SYSCALL_ABI_NATIVE = 1, /* Not implemented. */ + LTTNG_KERNEL_SYSCALL_ABI_COMPAT = 2, /* Not implemented. */ +}; + +enum lttng_kernel_syscall_match { + LTTNG_SYSCALL_MATCH_NAME = 0, + LTTNG_SYSCALL_MATCH_NR = 1, /* Not implemented. */ +}; + +struct lttng_kernel_syscall { + uint8_t entryexit; /* enum lttng_kernel_syscall_entryexit */ + uint8_t abi; /* enum lttng_kernel_syscall_abi */ + uint8_t match; /* enum lttng_kernel_syscall_match */ + uint8_t padding; + uint32_t nr; /* For LTTNG_SYSCALL_MATCH_NR */ +} __attribute__((packed)); + +/* + * For syscall tracing, name = "*" means "enable all". + */ +#define LTTNG_KERNEL_EVENT_PADDING1 16 +#define LTTNG_KERNEL_EVENT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_event { + char name[LTTNG_KERNEL_SYM_NAME_LEN]; /* event name */ + enum lttng_kernel_instrumentation instrumentation; + char padding[LTTNG_KERNEL_EVENT_PADDING1]; + + /* Per instrumentation type configuration */ + union { + struct lttng_kernel_kretprobe kretprobe; + struct lttng_kernel_kprobe kprobe; + struct lttng_kernel_function_tracer ftrace; + struct lttng_kernel_uprobe uprobe; + struct lttng_kernel_syscall syscall; + char padding[LTTNG_KERNEL_EVENT_PADDING2]; + } u; +} __attribute__((packed)); + +struct lttng_kernel_tracer_version { + uint32_t major; + uint32_t minor; + uint32_t patchlevel; +} __attribute__((packed)); + +struct lttng_kernel_tracer_abi_version { + uint32_t major; + uint32_t minor; +} __attribute__((packed)); + +struct lttng_kernel_session_name { + char name[LTTNG_KERNEL_SESSION_NAME_LEN]; +} __attribute__((packed)); + +struct lttng_kernel_session_creation_time { + char iso8601[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN]; +} __attribute__((packed)); + +enum lttng_kernel_calibrate_type { + LTTNG_KERNEL_CALIBRATE_KRETPROBE, +}; + +struct lttng_kernel_calibrate { + enum lttng_kernel_calibrate_type type; /* type (input) */ +} __attribute__((packed)); + +struct lttng_kernel_syscall_mask { + uint32_t len; /* in bits */ + char mask[]; +} __attribute__((packed)); + +enum lttng_kernel_context_type { + LTTNG_KERNEL_CONTEXT_PID = 0, + LTTNG_KERNEL_CONTEXT_PERF_COUNTER = 1, + LTTNG_KERNEL_CONTEXT_PROCNAME = 2, + LTTNG_KERNEL_CONTEXT_PRIO = 3, + LTTNG_KERNEL_CONTEXT_NICE = 4, + LTTNG_KERNEL_CONTEXT_VPID = 5, + LTTNG_KERNEL_CONTEXT_TID = 6, + LTTNG_KERNEL_CONTEXT_VTID = 7, + LTTNG_KERNEL_CONTEXT_PPID = 8, + LTTNG_KERNEL_CONTEXT_VPPID = 9, + LTTNG_KERNEL_CONTEXT_HOSTNAME = 10, + LTTNG_KERNEL_CONTEXT_CPU_ID = 11, + LTTNG_KERNEL_CONTEXT_INTERRUPTIBLE = 12, + LTTNG_KERNEL_CONTEXT_PREEMPTIBLE = 13, + LTTNG_KERNEL_CONTEXT_NEED_RESCHEDULE = 14, + LTTNG_KERNEL_CONTEXT_MIGRATABLE = 15, + LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL = 16, + LTTNG_KERNEL_CONTEXT_CALLSTACK_USER = 17, +}; + +struct lttng_kernel_perf_counter_ctx { + uint32_t type; + uint64_t config; + char name[LTTNG_KERNEL_SYM_NAME_LEN]; +} __attribute__((packed)); + +#define LTTNG_KERNEL_CONTEXT_PADDING1 16 +#define LTTNG_KERNEL_CONTEXT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32 +struct lttng_kernel_context { + enum lttng_kernel_context_type ctx; + char padding[LTTNG_KERNEL_CONTEXT_PADDING1]; + + union { + struct lttng_kernel_perf_counter_ctx perf_counter; + char padding[LTTNG_KERNEL_CONTEXT_PADDING2]; + } u; +} __attribute__((packed)); + +#define LTTNG_KERNEL_FILTER_BYTECODE_MAX_LEN 65536 +struct lttng_kernel_filter_bytecode { + uint32_t len; + uint32_t reloc_offset; + uint64_t seqnum; + char data[0]; +} __attribute__((packed)); + +/* LTTng file descriptor ioctl */ +#define LTTNG_KERNEL_SESSION _IO(0xF6, 0x45) +#define LTTNG_KERNEL_TRACER_VERSION \ + _IOR(0xF6, 0x46, struct lttng_kernel_tracer_version) +#define LTTNG_KERNEL_TRACEPOINT_LIST _IO(0xF6, 0x47) +#define LTTNG_KERNEL_WAIT_QUIESCENT _IO(0xF6, 0x48) +#define LTTNG_KERNEL_CALIBRATE \ + _IOWR(0xF6, 0x49, struct lttng_kernel_calibrate) +#define LTTNG_KERNEL_SYSCALL_LIST _IO(0xF6, 0x4A) +#define LTTNG_KERNEL_TRACER_ABI_VERSION \ + _IOR(0xF6, 0x4B, struct lttng_kernel_tracer_abi_version) + +/* Session FD ioctl */ +#define LTTNG_KERNEL_METADATA \ + _IOW(0xF6, 0x54, struct lttng_kernel_channel) +#define LTTNG_KERNEL_CHANNEL \ + _IOW(0xF6, 0x55, struct lttng_kernel_channel) +#define LTTNG_KERNEL_SESSION_START _IO(0xF6, 0x56) +#define LTTNG_KERNEL_SESSION_STOP _IO(0xF6, 0x57) +#define LTTNG_KERNEL_SESSION_TRACK_PID \ + _IOR(0xF6, 0x58, int32_t) +#define LTTNG_KERNEL_SESSION_UNTRACK_PID \ + _IOR(0xF6, 0x59, int32_t) +/* + * ioctl 0x58 and 0x59 are duplicated here. It works, since _IOR vs _IO + * are generating two different ioctl numbers, but this was not done on + * purpose. We should generally try to avoid those duplications. + */ +#define LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS _IO(0xF6, 0x58) +#define LTTNG_KERNEL_SESSION_METADATA_REGEN _IO(0xF6, 0x59) + +/* 0x5A and 0x5B are reserved for a future ABI-breaking cleanup. */ +#define LTTNG_KERNEL_SESSION_STATEDUMP _IO(0xF6, 0x5C) +#define LTTNG_KERNEL_SESSION_SET_NAME \ + _IOR(0xF6, 0x5D, struct lttng_kernel_session_name) +#define LTTNG_KERNEL_SESSION_SET_CREATION_TIME \ + _IOR(0xF6, 0x5E, struct lttng_kernel_session_creation_time) + +/* Channel FD ioctl */ +#define LTTNG_KERNEL_STREAM _IO(0xF6, 0x62) +#define LTTNG_KERNEL_EVENT \ + _IOW(0xF6, 0x63, struct lttng_kernel_event) +#define LTTNG_KERNEL_SYSCALL_MASK \ + _IOWR(0xF6, 0x64, struct lttng_kernel_syscall_mask) + +/* Event and Channel FD ioctl */ +#define LTTNG_KERNEL_CONTEXT \ + _IOW(0xF6, 0x71, struct lttng_kernel_context) + +/* Event, Channel and Session ioctl */ +#define LTTNG_KERNEL_ENABLE _IO(0xF6, 0x82) +#define LTTNG_KERNEL_DISABLE _IO(0xF6, 0x83) + +/* Event FD ioctl */ +#define LTTNG_KERNEL_FILTER _IO(0xF6, 0x90) +#define LTTNG_KERNEL_ADD_CALLSITE _IO(0xF6, 0x91) + +/* + * LTTng-specific ioctls for the lib ringbuffer. + * + * Operations applying to the current sub-buffer need to occur between + * a get/put or get_next/put_next ioctl pair. + */ + +/* returns the timestamp begin of the current sub-buffer */ +#define LTTNG_RING_BUFFER_GET_TIMESTAMP_BEGIN _IOR(0xF6, 0x20, uint64_t) +/* returns the timestamp end of the current sub-buffer */ +#define LTTNG_RING_BUFFER_GET_TIMESTAMP_END _IOR(0xF6, 0x21, uint64_t) +/* returns the number of events discarded of the current sub-buffer */ +#define LTTNG_RING_BUFFER_GET_EVENTS_DISCARDED _IOR(0xF6, 0x22, uint64_t) +/* returns the packet payload size of the current sub-buffer */ +#define LTTNG_RING_BUFFER_GET_CONTENT_SIZE _IOR(0xF6, 0x23, uint64_t) +/* returns the packet size of the current sub-buffer*/ +#define LTTNG_RING_BUFFER_GET_PACKET_SIZE _IOR(0xF6, 0x24, uint64_t) +/* returns the stream id (invariant for the stream) */ +#define LTTNG_RING_BUFFER_GET_STREAM_ID _IOR(0xF6, 0x25, uint64_t) +/* returns the current timestamp as perceived from the tracer */ +#define LTTNG_RING_BUFFER_GET_CURRENT_TIMESTAMP _IOR(0xF6, 0x26, uint64_t) +/* returns the packet sequence number of the current sub-buffer */ +#define LTTNG_RING_BUFFER_GET_SEQ_NUM _IOR(0xF6, 0x27, uint64_t) +/* returns the stream instance id (invariant for the stream) */ +#define LTTNG_RING_BUFFER_INSTANCE_ID _IOR(0xF6, 0x28, uint64_t) + +#ifdef CONFIG_COMPAT +/* returns the timestamp begin of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_TIMESTAMP_BEGIN \ + LTTNG_RING_BUFFER_GET_TIMESTAMP_BEGIN +/* returns the timestamp end of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_TIMESTAMP_END \ + LTTNG_RING_BUFFER_GET_TIMESTAMP_END +/* returns the number of events discarded of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_EVENTS_DISCARDED \ + LTTNG_RING_BUFFER_GET_EVENTS_DISCARDED +/* returns the packet payload size of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_CONTENT_SIZE \ + LTTNG_RING_BUFFER_GET_CONTENT_SIZE +/* returns the packet size of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_PACKET_SIZE \ + LTTNG_RING_BUFFER_GET_PACKET_SIZE +/* returns the stream id (invariant for the stream) */ +#define LTTNG_RING_BUFFER_COMPAT_GET_STREAM_ID \ + LTTNG_RING_BUFFER_GET_STREAM_ID +/* returns the current timestamp as perceived from the tracer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_CURRENT_TIMESTAMP \ + LTTNG_RING_BUFFER_GET_CURRENT_TIMESTAMP +/* returns the packet sequence number of the current sub-buffer */ +#define LTTNG_RING_BUFFER_COMPAT_GET_SEQ_NUM \ + LTTNG_RING_BUFFER_GET_SEQ_NUM +/* returns the stream instance id (invariant for the stream) */ +#define LTTNG_RING_BUFFER_COMPAT_INSTANCE_ID \ + LTTNG_RING_BUFFER_INSTANCE_ID +#endif /* CONFIG_COMPAT */ + +#endif /* _LTTNG_ABI_H */ diff --git a/ltt/lttng-2.11.0/lttng-calibrate.c b/ltt/lttng-2.11.0/lttng-calibrate.c new file mode 100644 index 000000000000..5394c24e77f8 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-calibrate.c @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-calibrate.c + * + * LTTng probe calibration. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +noinline +void lttng_calibrate_kretprobe(void) +{ + asm volatile (""); +} + +int lttng_calibrate(struct lttng_kernel_calibrate *calibrate) +{ + switch (calibrate->type) { + case LTTNG_KERNEL_CALIBRATE_KRETPROBE: + lttng_calibrate_kretprobe(); + break; + default: + return -EINVAL; + } + return 0; +} diff --git a/ltt/lttng-2.11.0/lttng-clock.c b/ltt/lttng-2.11.0/lttng-clock.c new file mode 100644 index 000000000000..6872294bd98a --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-clock.c @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-clock.c + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#include +#include +#include + +#include +#include +#include + +struct lttng_trace_clock *lttng_trace_clock; +EXPORT_SYMBOL_GPL(lttng_trace_clock); + +static DEFINE_MUTEX(clock_mutex); +static struct module *lttng_trace_clock_mod; /* plugin */ +static int clock_used; /* refcount */ + +int lttng_clock_register_plugin(struct lttng_trace_clock *ltc, + struct module *mod) +{ + int ret = 0; + + mutex_lock(&clock_mutex); + if (clock_used) { + ret = -EBUSY; + goto end; + } + if (lttng_trace_clock_mod) { + ret = -EEXIST; + goto end; + } + /* set clock */ + WRITE_ONCE(lttng_trace_clock, ltc); + lttng_trace_clock_mod = mod; +end: + mutex_unlock(&clock_mutex); + return ret; +} +EXPORT_SYMBOL_GPL(lttng_clock_register_plugin); + +void lttng_clock_unregister_plugin(struct lttng_trace_clock *ltc, + struct module *mod) +{ + mutex_lock(&clock_mutex); + WARN_ON_ONCE(clock_used); + if (!lttng_trace_clock_mod) { + goto end; + } + WARN_ON_ONCE(lttng_trace_clock_mod != mod); + + WRITE_ONCE(lttng_trace_clock, NULL); + lttng_trace_clock_mod = NULL; +end: + mutex_unlock(&clock_mutex); +} +EXPORT_SYMBOL_GPL(lttng_clock_unregister_plugin); + +void lttng_clock_ref(void) +{ + mutex_lock(&clock_mutex); + clock_used++; + if (lttng_trace_clock_mod) { + int ret; + + ret = try_module_get(lttng_trace_clock_mod); + if (!ret) { + printk(KERN_ERR "LTTng-clock cannot get clock plugin module\n"); + WRITE_ONCE(lttng_trace_clock, NULL); + lttng_trace_clock_mod = NULL; + } + } + mutex_unlock(&clock_mutex); +} +EXPORT_SYMBOL_GPL(lttng_clock_ref); + +void lttng_clock_unref(void) +{ + mutex_lock(&clock_mutex); + clock_used--; + if (lttng_trace_clock_mod) + module_put(lttng_trace_clock_mod); + mutex_unlock(&clock_mutex); +} +EXPORT_SYMBOL_GPL(lttng_clock_unref); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng Clock"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lttng-clock.h b/ltt/lttng-2.11.0/lttng-clock.h new file mode 100644 index 000000000000..2949456462cb --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-clock.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-clock.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_CLOCK_H +#define _LTTNG_CLOCK_H + +#include + +#define LTTNG_MODULES_UUID_STR_LEN 37 + +struct lttng_trace_clock { + u64 (*read64)(void); + u64 (*freq)(void); + int (*uuid)(char *uuid); + const char *(*name)(void); + const char *(*description)(void); +}; + +int lttng_clock_register_plugin(struct lttng_trace_clock *ltc, + struct module *mod); +void lttng_clock_unregister_plugin(struct lttng_trace_clock *ltc, + struct module *mod); + +#endif /* _LTTNG_TRACE_CLOCK_H */ diff --git a/ltt/lttng-2.11.0/lttng-context-callstack-legacy-impl.h b/ltt/lttng-2.11.0/lttng-context-callstack-legacy-impl.h new file mode 100644 index 000000000000..6b4f06278be4 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-callstack-legacy-impl.h @@ -0,0 +1,215 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-callstack-legacy-impl.h + * + * LTTng callstack event context, legacy implementation. Targets + * kernels and architectures not yet using the stacktrace common + * infrastructure introduced in the upstream Linux kernel by commit + * 214d8ca6ee "stacktrace: Provide common infrastructure" (merged in + * Linux 5.2, then gradually introduced within architectures). + * + * Copyright (C) 2014 Mathieu Desnoyers + * Copyright (C) 2014 Francis Giraldeau + */ + +#define MAX_ENTRIES 128 + +enum lttng_cs_ctx_modes { + CALLSTACK_KERNEL = 0, + CALLSTACK_USER = 1, + NR_CALLSTACK_MODES, +}; + +struct lttng_cs_dispatch { + struct stack_trace stack_trace; + unsigned long entries[MAX_ENTRIES]; +}; + +struct lttng_cs { + struct lttng_cs_dispatch dispatch[RING_BUFFER_MAX_NESTING]; +}; + +struct field_data { + struct lttng_cs __percpu *cs_percpu; + enum lttng_cs_ctx_modes mode; +}; + +struct lttng_cs_type { + const char *name; + const char *save_func_name; + void (*save_func)(struct stack_trace *trace); +}; + +static struct lttng_cs_type cs_types[] = { + { + .name = "callstack_kernel", + .save_func_name = "save_stack_trace", + .save_func = NULL, + }, + { + .name = "callstack_user", + .save_func_name = "save_stack_trace_user", + .save_func = NULL, + }, +}; + +static +const char *lttng_cs_ctx_mode_name(enum lttng_cs_ctx_modes mode) +{ + return cs_types[mode].name; +} + +static +int init_type(enum lttng_cs_ctx_modes mode) +{ + unsigned long func; + + if (cs_types[mode].save_func) + return 0; + func = kallsyms_lookup_funcptr(cs_types[mode].save_func_name); + if (!func) { + printk(KERN_WARNING "LTTng: symbol lookup failed: %s\n", + cs_types[mode].save_func_name); + return -EINVAL; + } + cs_types[mode].save_func = (void *) func; + return 0; +} + +static +void lttng_cs_set_init(struct lttng_cs __percpu *cs_set) +{ + int cpu, i; + + for_each_possible_cpu(cpu) { + struct lttng_cs *cs; + + cs = per_cpu_ptr(cs_set, cpu); + for (i = 0; i < RING_BUFFER_MAX_NESTING; i++) { + struct lttng_cs_dispatch *dispatch; + + dispatch = &cs->dispatch[i]; + dispatch->stack_trace.entries = dispatch->entries; + dispatch->stack_trace.max_entries = MAX_ENTRIES; + } + } +} + +/* Keep track of nesting inside userspace callstack context code */ +DEFINE_PER_CPU(int, callstack_user_nesting); + +static +struct stack_trace *stack_trace_context(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx) +{ + int buffer_nesting, cs_user_nesting; + struct lttng_cs *cs; + struct field_data *fdata = field->priv; + + /* + * Do not gather the userspace callstack context when the event was + * triggered by the userspace callstack context saving mechanism. + */ + cs_user_nesting = per_cpu(callstack_user_nesting, ctx->cpu); + + if (fdata->mode == CALLSTACK_USER && cs_user_nesting >= 1) + return NULL; + + /* + * get_cpu() is not required, preemption is already + * disabled while event is written. + * + * max nesting is checked in lib_ring_buffer_get_cpu(). + * Check it again as a safety net. + */ + cs = per_cpu_ptr(fdata->cs_percpu, ctx->cpu); + buffer_nesting = per_cpu(lib_ring_buffer_nesting, ctx->cpu) - 1; + if (buffer_nesting >= RING_BUFFER_MAX_NESTING) + return NULL; + + return &cs->dispatch[buffer_nesting].stack_trace; +} + +/* + * In order to reserve the correct size, the callstack is computed. The + * resulting callstack is saved to be accessed in the record step. + */ +static +size_t lttng_callstack_get_size(size_t offset, struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct stack_trace *trace; + struct field_data *fdata = field->priv; + size_t orig_offset = offset; + + /* do not write data if no space is available */ + trace = stack_trace_context(field, ctx); + if (unlikely(!trace)) { + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned int)); + offset += sizeof(unsigned int); + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned long)); + return offset - orig_offset; + } + + /* reset stack trace, no need to clear memory */ + trace->nr_entries = 0; + + if (fdata->mode == CALLSTACK_USER) + ++per_cpu(callstack_user_nesting, ctx->cpu); + + /* do the real work and reserve space */ + cs_types[fdata->mode].save_func(trace); + + if (fdata->mode == CALLSTACK_USER) + per_cpu(callstack_user_nesting, ctx->cpu)--; + + /* + * Remove final ULONG_MAX delimiter. If we cannot find it, add + * our own marker to show that the stack is incomplete. This is + * more compact for a trace. + */ + if (trace->nr_entries > 0 + && trace->entries[trace->nr_entries - 1] == ULONG_MAX) { + trace->nr_entries--; + } + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned int)); + offset += sizeof(unsigned int); + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned long)); + offset += sizeof(unsigned long) * trace->nr_entries; + /* Add our own ULONG_MAX delimiter to show incomplete stack. */ + if (trace->nr_entries == trace->max_entries) + offset += sizeof(unsigned long); + return offset - orig_offset; +} + +static +void lttng_callstack_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct stack_trace *trace = stack_trace_context(field, ctx); + unsigned int nr_seq_entries; + + if (unlikely(!trace)) { + nr_seq_entries = 0; + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned int)); + chan->ops->event_write(ctx, &nr_seq_entries, sizeof(unsigned int)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned long)); + return; + } + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned int)); + nr_seq_entries = trace->nr_entries; + if (trace->nr_entries == trace->max_entries) + nr_seq_entries++; + chan->ops->event_write(ctx, &nr_seq_entries, sizeof(unsigned int)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned long)); + chan->ops->event_write(ctx, trace->entries, + sizeof(unsigned long) * trace->nr_entries); + /* Add our own ULONG_MAX delimiter to show incomplete stack. */ + if (trace->nr_entries == trace->max_entries) { + unsigned long delim = ULONG_MAX; + + chan->ops->event_write(ctx, &delim, sizeof(unsigned long)); + } +} diff --git a/ltt/lttng-2.11.0/lttng-context-callstack-stackwalk-impl.h b/ltt/lttng-2.11.0/lttng-context-callstack-stackwalk-impl.h new file mode 100644 index 000000000000..dfb60c554b42 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-callstack-stackwalk-impl.h @@ -0,0 +1,230 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-callstack-stackwalk-impl.h + * + * LTTng callstack event context, stackwalk implementation. Targets + * kernels and architectures using the stacktrace common infrastructure + * introduced in the upstream Linux kernel by commit 214d8ca6ee + * "stacktrace: Provide common infrastructure" (merged in Linux 5.2, + * then gradually introduced within architectures). + * + * Copyright (C) 2014-2019 Mathieu Desnoyers + * Copyright (C) 2014 Francis Giraldeau + */ + +#define MAX_ENTRIES 128 + +enum lttng_cs_ctx_modes { + CALLSTACK_KERNEL = 0, + CALLSTACK_USER = 1, + NR_CALLSTACK_MODES, +}; + +struct lttng_stack_trace { + unsigned long entries[MAX_ENTRIES]; + unsigned int nr_entries; +}; + +struct lttng_cs { + struct lttng_stack_trace stack_trace[RING_BUFFER_MAX_NESTING]; +}; + +struct field_data { + struct lttng_cs __percpu *cs_percpu; + enum lttng_cs_ctx_modes mode; +}; + +static +unsigned int (*save_func_kernel)(unsigned long *store, unsigned int size, + unsigned int skipnr); +static +unsigned int (*save_func_user)(unsigned long *store, unsigned int size); + +static +const char *lttng_cs_ctx_mode_name(enum lttng_cs_ctx_modes mode) +{ + switch (mode) { + case CALLSTACK_KERNEL: + return "callstack_kernel"; + case CALLSTACK_USER: + return "callstack_user"; + default: + return NULL; + } +} + +static +int init_type_callstack_kernel(void) +{ + unsigned long func; + const char *func_name = "stack_trace_save"; + + if (save_func_kernel) + return 0; + func = kallsyms_lookup_funcptr(func_name); + if (!func) { + printk(KERN_WARNING "LTTng: symbol lookup failed: %s\n", + func_name); + return -EINVAL; + } + save_func_kernel = (void *) func; + return 0; +} + +static +int init_type_callstack_user(void) +{ + unsigned long func; + const char *func_name = "stack_trace_save_user"; + + if (save_func_user) + return 0; + func = kallsyms_lookup_funcptr(func_name); + if (!func) { + printk(KERN_WARNING "LTTng: symbol lookup failed: %s\n", + func_name); + return -EINVAL; + } + save_func_user = (void *) func; + return 0; +} + +static +int init_type(enum lttng_cs_ctx_modes mode) +{ + switch (mode) { + case CALLSTACK_KERNEL: + return init_type_callstack_kernel(); + case CALLSTACK_USER: + return init_type_callstack_user(); + default: + return -EINVAL; + } +} + +static +void lttng_cs_set_init(struct lttng_cs __percpu *cs_set) +{ +} + +/* Keep track of nesting inside userspace callstack context code */ +DEFINE_PER_CPU(int, callstack_user_nesting); + +static +struct lttng_stack_trace *stack_trace_context(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx) +{ + int buffer_nesting, cs_user_nesting; + struct lttng_cs *cs; + struct field_data *fdata = field->priv; + + /* + * Do not gather the userspace callstack context when the event was + * triggered by the userspace callstack context saving mechanism. + */ + cs_user_nesting = per_cpu(callstack_user_nesting, ctx->cpu); + + if (fdata->mode == CALLSTACK_USER && cs_user_nesting >= 1) + return NULL; + + /* + * get_cpu() is not required, preemption is already + * disabled while event is written. + * + * max nesting is checked in lib_ring_buffer_get_cpu(). + * Check it again as a safety net. + */ + cs = per_cpu_ptr(fdata->cs_percpu, ctx->cpu); + buffer_nesting = per_cpu(lib_ring_buffer_nesting, ctx->cpu) - 1; + if (buffer_nesting >= RING_BUFFER_MAX_NESTING) + return NULL; + + return &cs->stack_trace[buffer_nesting]; +} + +/* + * In order to reserve the correct size, the callstack is computed. The + * resulting callstack is saved to be accessed in the record step. + */ +static +size_t lttng_callstack_get_size(size_t offset, struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct lttng_stack_trace *trace; + struct field_data *fdata = field->priv; + size_t orig_offset = offset; + + /* do not write data if no space is available */ + trace = stack_trace_context(field, ctx); + if (unlikely(!trace)) { + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned int)); + offset += sizeof(unsigned int); + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned long)); + return offset - orig_offset; + } + + /* reset stack trace, no need to clear memory */ + trace->nr_entries = 0; + + switch (fdata->mode) { + case CALLSTACK_KERNEL: + /* do the real work and reserve space */ + trace->nr_entries = save_func_kernel(trace->entries, + MAX_ENTRIES, 0); + break; + case CALLSTACK_USER: + ++per_cpu(callstack_user_nesting, ctx->cpu); + /* do the real work and reserve space */ + trace->nr_entries = save_func_user(trace->entries, + MAX_ENTRIES); + per_cpu(callstack_user_nesting, ctx->cpu)--; + break; + default: + WARN_ON_ONCE(1); + } + + /* + * If the array is filled, add our own marker to show that the + * stack is incomplete. + */ + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned int)); + offset += sizeof(unsigned int); + offset += lib_ring_buffer_align(offset, lttng_alignof(unsigned long)); + offset += sizeof(unsigned long) * trace->nr_entries; + /* Add our own ULONG_MAX delimiter to show incomplete stack. */ + if (trace->nr_entries == MAX_ENTRIES) + offset += sizeof(unsigned long); + return offset - orig_offset; +} + +static +void lttng_callstack_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct lttng_stack_trace *trace = stack_trace_context(field, ctx); + unsigned int nr_seq_entries; + + if (unlikely(!trace)) { + nr_seq_entries = 0; + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned int)); + chan->ops->event_write(ctx, &nr_seq_entries, sizeof(unsigned int)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned long)); + return; + } + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned int)); + nr_seq_entries = trace->nr_entries; + if (trace->nr_entries == MAX_ENTRIES) + nr_seq_entries++; + chan->ops->event_write(ctx, &nr_seq_entries, sizeof(unsigned int)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(unsigned long)); + chan->ops->event_write(ctx, trace->entries, + sizeof(unsigned long) * trace->nr_entries); + /* Add our own ULONG_MAX delimiter to show incomplete stack. */ + if (trace->nr_entries == MAX_ENTRIES) { + unsigned long delim = ULONG_MAX; + + chan->ops->event_write(ctx, &delim, sizeof(unsigned long)); + } +} diff --git a/ltt/lttng-2.11.0/lttng-context-callstack.c b/ltt/lttng-2.11.0/lttng-context-callstack.c new file mode 100644 index 000000000000..ba35a3940845 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-callstack.c @@ -0,0 +1,181 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-callstack.c + * + * LTTng callstack event context. + * + * Copyright (C) 2014 Mathieu Desnoyers + * Copyright (C) 2014 Francis Giraldeau + * + * The callstack context can be added to any kernel event. It records + * either the kernel or the userspace callstack, up to a max depth. The + * context is a CTF sequence, such that it uses only the space required + * for the number of callstack entries. + * + * It allocates callstack buffers per-CPU up to 4 interrupt nesting. + * This nesting limit is the same as defined in the ring buffer. It + * therefore uses a fixed amount of memory, proportional to the number + * of CPUs: + * + * size = cpus * nest * depth * sizeof(unsigned long) + * + * Which is 4096 bytes per CPU on 64-bit host and a depth of 128. + * The allocation is done at the initialization to avoid memory + * allocation overhead while tracing, using a shallow stack. + * + * The kernel callstack is recovered using save_stack_trace(), and the + * userspace callstack uses save_stack_trace_user(). They rely on frame + * pointers. These are usually available for the kernel, but the + * compiler option -fomit-frame-pointer frequently used in popular Linux + * distributions may cause the userspace callstack to be unreliable, and + * is a known limitation of this approach. If frame pointers are not + * available, it produces no error, but the callstack will be empty. We + * still provide the feature, because it works well for runtime + * environments having frame pointers. In the future, unwind support + * and/or last branch record may provide a solution to this problem. + * + * The symbol name resolution is left to the trace reader. + */ + +#include +#include +#include +#include +#include +#include +#include "lttng-events.h" +#include "wrapper/ringbuffer/backend.h" +#include "wrapper/ringbuffer/frontend.h" +#include "wrapper/vmalloc.h" +#include "lttng-tracer.h" + +#ifdef CONFIG_ARCH_STACKWALK +#include "lttng-context-callstack-stackwalk-impl.h" +#else +#include "lttng-context-callstack-legacy-impl.h" +#endif + +static +void field_data_free(struct field_data *fdata) +{ + if (!fdata) + return; + free_percpu(fdata->cs_percpu); + kfree(fdata); +} + +static +struct field_data __percpu *field_data_create(enum lttng_cs_ctx_modes mode) +{ + struct lttng_cs __percpu *cs_set; + struct field_data *fdata; + + fdata = kzalloc(sizeof(*fdata), GFP_KERNEL); + if (!fdata) + return NULL; + cs_set = alloc_percpu(struct lttng_cs); + if (!cs_set) + goto error_alloc; + lttng_cs_set_init(cs_set); + fdata->cs_percpu = cs_set; + fdata->mode = mode; + return fdata; + +error_alloc: + field_data_free(fdata); + return NULL; +} + +static +void lttng_callstack_destroy(struct lttng_ctx_field *field) +{ + struct field_data *fdata = field->priv; + + field_data_free(fdata); +} + +static +int __lttng_add_callstack_generic(struct lttng_ctx **ctx, + enum lttng_cs_ctx_modes mode) +{ + const char *ctx_name = lttng_cs_ctx_mode_name(mode); + struct lttng_ctx_field *field; + struct field_data *fdata; + int ret; + + ret = init_type(mode); + if (ret) + return ret; + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, ctx_name)) { + ret = -EEXIST; + goto error_find; + } + fdata = field_data_create(mode); + if (!fdata) { + ret = -ENOMEM; + goto error_create; + } + + field->event_field.name = ctx_name; + field->event_field.type.atype = atype_sequence; + field->event_field.type.u.sequence.elem_type.atype = atype_integer; + field->event_field.type.u.sequence.elem_type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT; + field->event_field.type.u.sequence.elem_type.u.basic.integer.alignment = lttng_alignof(long) * CHAR_BIT; + field->event_field.type.u.sequence.elem_type.u.basic.integer.signedness = lttng_is_signed_type(unsigned long); + field->event_field.type.u.sequence.elem_type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.sequence.elem_type.u.basic.integer.base = 16; + field->event_field.type.u.sequence.elem_type.u.basic.integer.encoding = lttng_encode_none; + + field->event_field.type.u.sequence.length_type.atype = atype_integer; + field->event_field.type.u.sequence.length_type.u.basic.integer.size = sizeof(unsigned int) * CHAR_BIT; + field->event_field.type.u.sequence.length_type.u.basic.integer.alignment = lttng_alignof(unsigned int) * CHAR_BIT; + field->event_field.type.u.sequence.length_type.u.basic.integer.signedness = lttng_is_signed_type(unsigned int); + field->event_field.type.u.sequence.length_type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.sequence.length_type.u.basic.integer.base = 10; + field->event_field.type.u.sequence.length_type.u.basic.integer.encoding = lttng_encode_none; + + field->get_size_arg = lttng_callstack_get_size; + field->record = lttng_callstack_record; + field->priv = fdata; + field->destroy = lttng_callstack_destroy; + wrapper_vmalloc_sync_mappings(); + return 0; + +error_create: + field_data_free(fdata); +error_find: + lttng_remove_context_field(ctx, field); + return ret; +} + +/** + * lttng_add_callstack_to_ctx - add callstack event context + * + * @ctx: the lttng_ctx pointer to initialize + * @type: the context type + * + * Supported callstack type supported: + * LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL + * Records the callstack of the kernel + * LTTNG_KERNEL_CONTEXT_CALLSTACK_USER + * Records the callstack of the userspace program (from the kernel) + * + * Return 0 for success, or error code. + */ +int lttng_add_callstack_to_ctx(struct lttng_ctx **ctx, int type) +{ + switch (type) { + case LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL: + return __lttng_add_callstack_generic(ctx, CALLSTACK_KERNEL); +#ifdef CONFIG_X86 + case LTTNG_KERNEL_CONTEXT_CALLSTACK_USER: + return __lttng_add_callstack_generic(ctx, CALLSTACK_USER); +#endif + default: + return -EINVAL; + } +} +EXPORT_SYMBOL_GPL(lttng_add_callstack_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-cpu-id.c b/ltt/lttng-2.11.0/lttng-context-cpu-id.c new file mode 100644 index 000000000000..6e2f3f45d60b --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-cpu-id.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-cpu-id.c + * + * LTTng CPU id context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t cpu_id_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(int)); + size += sizeof(int); + return size; +} + +static +void cpu_id_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + int cpu; + + cpu = ctx->cpu; + lib_ring_buffer_align_ctx(ctx, lttng_alignof(cpu)); + chan->ops->event_write(ctx, &cpu, sizeof(cpu)); +} + +static +void cpu_id_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = smp_processor_id(); +} + +int lttng_add_cpu_id_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "cpu_id")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "cpu_id"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(int); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = cpu_id_get_size; + field->record = cpu_id_record; + field->get_value = cpu_id_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_cpu_id_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-hostname.c b/ltt/lttng-2.11.0/lttng-context-hostname.c new file mode 100644 index 000000000000..17dbd5776100 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-hostname.c @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-hostname.c + * + * LTTng hostname context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define LTTNG_HOSTNAME_CTX_LEN (__NEW_UTS_LEN + 1) + +static +size_t hostname_get_size(size_t offset) +{ + size_t size = 0; + + size += LTTNG_HOSTNAME_CTX_LEN; + return size; +} + +static +void hostname_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct nsproxy *nsproxy; + struct uts_namespace *ns; + char *hostname; + + /* + * No need to take the RCU read-side lock to read current + * nsproxy. (documented in nsproxy.h) + */ + nsproxy = current->nsproxy; + if (nsproxy) { + ns = nsproxy->uts_ns; + hostname = ns->name.nodename; + chan->ops->event_write(ctx, hostname, + LTTNG_HOSTNAME_CTX_LEN); + } else { + chan->ops->event_memset(ctx, 0, + LTTNG_HOSTNAME_CTX_LEN); + } +} + +static +void hostname_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + struct nsproxy *nsproxy; + struct uts_namespace *ns; + char *hostname; + + /* + * No need to take the RCU read-side lock to read current + * nsproxy. (documented in nsproxy.h) + */ + nsproxy = current->nsproxy; + if (nsproxy) { + ns = nsproxy->uts_ns; + hostname = ns->name.nodename; + } else { + hostname = ""; + } + value->str = hostname; +} + +int lttng_add_hostname_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "hostname")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "hostname"; + field->event_field.type.atype = atype_array; + field->event_field.type.u.array.elem_type.atype = atype_integer; + field->event_field.type.u.array.elem_type.u.basic.integer.size = sizeof(char) * CHAR_BIT; + field->event_field.type.u.array.elem_type.u.basic.integer.alignment = lttng_alignof(char) * CHAR_BIT; + field->event_field.type.u.array.elem_type.u.basic.integer.signedness = lttng_is_signed_type(char); + field->event_field.type.u.array.elem_type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.array.elem_type.u.basic.integer.base = 10; + field->event_field.type.u.array.elem_type.u.basic.integer.encoding = lttng_encode_UTF8; + field->event_field.type.u.array.length = LTTNG_HOSTNAME_CTX_LEN; + + field->get_size = hostname_get_size; + field->record = hostname_record; + field->get_value = hostname_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_hostname_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-interruptible.c b/ltt/lttng-2.11.0/lttng-context-interruptible.c new file mode 100644 index 000000000000..8bd279a39f83 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-interruptible.c @@ -0,0 +1,81 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-interruptible.c + * + * LTTng interruptible context. + * + * Copyright (C) 2009-2015 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Interruptible at value -1 means "unknown". + */ + +static +size_t interruptible_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(int8_t)); + size += sizeof(int8_t); + return size; +} + +static +void interruptible_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + int8_t interruptible = lttng_probe_ctx->interruptible; + + lib_ring_buffer_align_ctx(ctx, lttng_alignof(interruptible)); + chan->ops->event_write(ctx, &interruptible, sizeof(interruptible)); +} + +static +void interruptible_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + int8_t interruptible = lttng_probe_ctx->interruptible; + + value->s64 = interruptible; +} + +int lttng_add_interruptible_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "interruptible")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "interruptible"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(int8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(int8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(int8_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = interruptible_get_size; + field->record = interruptible_record; + field->get_value = interruptible_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_interruptible_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-migratable.c b/ltt/lttng-2.11.0/lttng-context-migratable.c new file mode 100644 index 000000000000..65154b8b0d0b --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-migratable.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-migratable.c + * + * LTTng migratable context. + * + * Copyright (C) 2009-2015 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static +size_t migratable_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(uint8_t)); + size += sizeof(uint8_t); + return size; +} + +static +void migratable_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + uint8_t migratable = !current->migrate_disable; + + lib_ring_buffer_align_ctx(ctx, lttng_alignof(migratable)); + chan->ops->event_write(ctx, &migratable, sizeof(migratable)); +} + +static +void migratable_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = !current->migrate_disable; +} + +int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "migratable")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "migratable"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(uint8_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = migratable_get_size; + field->record = migratable_record; + field->get_value = migratable_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_migratable_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-need-reschedule.c b/ltt/lttng-2.11.0/lttng-context-need-reschedule.c new file mode 100644 index 000000000000..94efaa5c8b1c --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-need-reschedule.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-need-reschedule.c + * + * LTTng need_reschedule context. + * + * Copyright (C) 2009-2015 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static +size_t need_reschedule_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(uint8_t)); + size += sizeof(uint8_t); + return size; +} + +static +void need_reschedule_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + uint8_t need_reschedule = test_tsk_need_resched(current); + + lib_ring_buffer_align_ctx(ctx, lttng_alignof(need_reschedule)); + chan->ops->event_write(ctx, &need_reschedule, sizeof(need_reschedule)); +} + +static +void need_reschedule_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = test_tsk_need_resched(current);; +} + +int lttng_add_need_reschedule_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "need_reschedule")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "need_reschedule"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(uint8_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = need_reschedule_get_size; + field->record = need_reschedule_record; + field->get_value = need_reschedule_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_need_reschedule_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-nice.c b/ltt/lttng-2.11.0/lttng-context-nice.c new file mode 100644 index 000000000000..acaba855fcc0 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-nice.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-nice.c + * + * LTTng nice context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t nice_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(int)); + size += sizeof(int); + return size; +} + +static +void nice_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + int nice; + + nice = task_nice(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(nice)); + chan->ops->event_write(ctx, &nice, sizeof(nice)); +} + +static +void nice_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = task_nice(current); +} + +int lttng_add_nice_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "nice")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "nice"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(int); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = nice_get_size; + field->record = nice_record; + field->get_value = nice_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_nice_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-perf-counters.c b/ltt/lttng-2.11.0/lttng-context-perf-counters.c new file mode 100644 index 000000000000..9887c6d208a2 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-perf-counters.c @@ -0,0 +1,364 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-perf-counters.c + * + * LTTng performance monitoring counters (perf-counters) integration module. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static +size_t perf_counter_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(uint64_t)); + size += sizeof(uint64_t); + return size; +} + +static +void perf_counter_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct perf_event *event; + uint64_t value; + + event = field->u.perf_counter->e[ctx->cpu]; + if (likely(event)) { + if (unlikely(event->state == PERF_EVENT_STATE_ERROR)) { + value = 0; + } else { + event->pmu->read(event); + value = local64_read(&event->count); + } + } else { + /* + * Perf chooses not to be clever and not to support enabling a + * perf counter before the cpu is brought up. Therefore, we need + * to support having events coming (e.g. scheduler events) + * before the counter is setup. Write an arbitrary 0 in this + * case. + */ + value = 0; + } + lib_ring_buffer_align_ctx(ctx, lttng_alignof(value)); + chan->ops->event_write(ctx, &value, sizeof(value)); +} + +#if defined(CONFIG_PERF_EVENTS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +static +void overflow_callback(struct perf_event *event, + struct perf_sample_data *data, + struct pt_regs *regs) +{ +} +#else +static +void overflow_callback(struct perf_event *event, int nmi, + struct perf_sample_data *data, + struct pt_regs *regs) +{ +} +#endif + +static +void lttng_destroy_perf_counter_field(struct lttng_ctx_field *field) +{ + struct perf_event **events = field->u.perf_counter->e; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + { + int ret; + + ret = cpuhp_state_remove_instance(lttng_hp_online, + &field->u.perf_counter->cpuhp_online.node); + WARN_ON(ret); + ret = cpuhp_state_remove_instance(lttng_hp_prepare, + &field->u.perf_counter->cpuhp_prepare.node); + WARN_ON(ret); + } +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + { + int cpu; + + get_online_cpus(); + for_each_online_cpu(cpu) + perf_event_release_kernel(events[cpu]); + put_online_cpus(); +#ifdef CONFIG_HOTPLUG_CPU + unregister_cpu_notifier(&field->u.perf_counter->nb); +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + kfree(field->event_field.name); + kfree(field->u.perf_counter->attr); + lttng_kvfree(events); + kfree(field->u.perf_counter); +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +int lttng_cpuhp_perf_counter_online(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct lttng_perf_counter_field *perf_field = + container_of(node, struct lttng_perf_counter_field, + cpuhp_online); + struct perf_event **events = perf_field->e; + struct perf_event_attr *attr = perf_field->attr; + struct perf_event *pevent; + + pevent = wrapper_perf_event_create_kernel_counter(attr, + cpu, NULL, overflow_callback); + if (!pevent || IS_ERR(pevent)) + return -EINVAL; + if (pevent->state == PERF_EVENT_STATE_ERROR) { + perf_event_release_kernel(pevent); + return -EINVAL; + } + barrier(); /* Create perf counter before setting event */ + events[cpu] = pevent; + return 0; +} + +int lttng_cpuhp_perf_counter_dead(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + struct lttng_perf_counter_field *perf_field = + container_of(node, struct lttng_perf_counter_field, + cpuhp_prepare); + struct perf_event **events = perf_field->e; + struct perf_event *pevent; + + pevent = events[cpu]; + events[cpu] = NULL; + barrier(); /* NULLify event before perf counter teardown */ + perf_event_release_kernel(pevent); + return 0; +} + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +#ifdef CONFIG_HOTPLUG_CPU + +/** + * lttng_perf_counter_hp_callback - CPU hotplug callback + * @nb: notifier block + * @action: hotplug action to take + * @hcpu: CPU number + * + * Returns the success/failure of the operation. (%NOTIFY_OK, %NOTIFY_BAD) + * + * We can setup perf counters when the cpu is online (up prepare seems to be too + * soon). + */ +static +int lttng_perf_counter_cpu_hp_callback(struct notifier_block *nb, + unsigned long action, + void *hcpu) +{ + unsigned int cpu = (unsigned long) hcpu; + struct lttng_perf_counter_field *perf_field = + container_of(nb, struct lttng_perf_counter_field, nb); + struct perf_event **events = perf_field->e; + struct perf_event_attr *attr = perf_field->attr; + struct perf_event *pevent; + + if (!perf_field->hp_enable) + return NOTIFY_OK; + + switch (action) { + case CPU_ONLINE: + case CPU_ONLINE_FROZEN: + pevent = wrapper_perf_event_create_kernel_counter(attr, + cpu, NULL, overflow_callback); + if (!pevent || IS_ERR(pevent)) + return NOTIFY_BAD; + if (pevent->state == PERF_EVENT_STATE_ERROR) { + perf_event_release_kernel(pevent); + return NOTIFY_BAD; + } + barrier(); /* Create perf counter before setting event */ + events[cpu] = pevent; + break; + case CPU_UP_CANCELED: + case CPU_UP_CANCELED_FROZEN: + case CPU_DEAD: + case CPU_DEAD_FROZEN: + pevent = events[cpu]; + events[cpu] = NULL; + barrier(); /* NULLify event before perf counter teardown */ + perf_event_release_kernel(pevent); + break; + } + return NOTIFY_OK; +} + +#endif + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + +int lttng_add_perf_counter_to_ctx(uint32_t type, + uint64_t config, + const char *name, + struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + struct lttng_perf_counter_field *perf_field; + struct perf_event **events; + struct perf_event_attr *attr; + int ret; + char *name_alloc; + + events = lttng_kvzalloc(num_possible_cpus() * sizeof(*events), GFP_KERNEL); + if (!events) + return -ENOMEM; + + attr = kzalloc(sizeof(struct perf_event_attr), GFP_KERNEL); + if (!attr) { + ret = -ENOMEM; + goto error_attr; + } + + attr->type = type; + attr->config = config; + attr->size = sizeof(struct perf_event_attr); + attr->pinned = 1; + attr->disabled = 0; + + perf_field = kzalloc(sizeof(struct lttng_perf_counter_field), GFP_KERNEL); + if (!perf_field) { + ret = -ENOMEM; + goto error_alloc_perf_field; + } + perf_field->e = events; + perf_field->attr = attr; + + name_alloc = kstrdup(name, GFP_KERNEL); + if (!name_alloc) { + ret = -ENOMEM; + goto name_alloc_error; + } + + field = lttng_append_context(ctx); + if (!field) { + ret = -ENOMEM; + goto append_context_error; + } + if (lttng_find_context(*ctx, name_alloc)) { + ret = -EEXIST; + goto find_error; + } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + + perf_field->cpuhp_prepare.component = LTTNG_CONTEXT_PERF_COUNTERS; + ret = cpuhp_state_add_instance(lttng_hp_prepare, + &perf_field->cpuhp_prepare.node); + if (ret) + goto cpuhp_prepare_error; + + perf_field->cpuhp_online.component = LTTNG_CONTEXT_PERF_COUNTERS; + ret = cpuhp_state_add_instance(lttng_hp_online, + &perf_field->cpuhp_online.node); + if (ret) + goto cpuhp_online_error; + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + { + int cpu; + +#ifdef CONFIG_HOTPLUG_CPU + perf_field->nb.notifier_call = + lttng_perf_counter_cpu_hp_callback; + perf_field->nb.priority = 0; + register_cpu_notifier(&perf_field->nb); +#endif + get_online_cpus(); + for_each_online_cpu(cpu) { + events[cpu] = wrapper_perf_event_create_kernel_counter(attr, + cpu, NULL, overflow_callback); + if (!events[cpu] || IS_ERR(events[cpu])) { + ret = -EINVAL; + goto counter_error; + } + if (events[cpu]->state == PERF_EVENT_STATE_ERROR) { + ret = -EBUSY; + goto counter_busy; + } + } + put_online_cpus(); + perf_field->hp_enable = 1; + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + + field->destroy = lttng_destroy_perf_counter_field; + + field->event_field.name = name_alloc; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(uint64_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(uint64_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(uint64_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = perf_counter_get_size; + field->record = perf_counter_record; + field->u.perf_counter = perf_field; + lttng_context_update(*ctx); + + wrapper_vmalloc_sync_mappings(); + return 0; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) +cpuhp_online_error: + { + int remove_ret; + + remove_ret = cpuhp_state_remove_instance(lttng_hp_prepare, + &perf_field->cpuhp_prepare.node); + WARN_ON(remove_ret); + } +cpuhp_prepare_error: +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +counter_busy: +counter_error: + { + int cpu; + + for_each_online_cpu(cpu) { + if (events[cpu] && !IS_ERR(events[cpu])) + perf_event_release_kernel(events[cpu]); + } + put_online_cpus(); +#ifdef CONFIG_HOTPLUG_CPU + unregister_cpu_notifier(&perf_field->nb); +#endif + } +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +find_error: + lttng_remove_context_field(ctx, field); +append_context_error: + kfree(name_alloc); +name_alloc_error: + kfree(perf_field); +error_alloc_perf_field: + kfree(attr); +error_attr: + lttng_kvfree(events); + return ret; +} diff --git a/ltt/lttng-2.11.0/lttng-context-pid.c b/ltt/lttng-2.11.0/lttng-context-pid.c new file mode 100644 index 000000000000..326eabe8408b --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-pid.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-pid.c + * + * LTTng PID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t pid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void pid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + pid_t pid; + + pid = task_tgid_nr(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(pid)); + chan->ops->event_write(ctx, &pid, sizeof(pid)); +} + +static +void pid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = task_tgid_nr(current); +} + +int lttng_add_pid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "pid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "pid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = pid_get_size; + field->record = pid_record; + field->get_value = pid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_pid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-ppid.c b/ltt/lttng-2.11.0/lttng-context-ppid.c new file mode 100644 index 000000000000..ff25288fa0b5 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-ppid.c @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-ppid.c + * + * LTTng PPID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static +size_t ppid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void ppid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + pid_t ppid; + + /* + * TODO: when we eventually add RCU subsystem instrumentation, + * taking the rcu read lock here will trigger RCU tracing + * recursively. We should modify the kernel synchronization so + * it synchronizes both for RCU and RCU sched, and rely on + * rcu_read_lock_sched_notrace. + */ + rcu_read_lock(); + ppid = task_tgid_nr(current->real_parent); + rcu_read_unlock(); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(ppid)); + chan->ops->event_write(ctx, &ppid, sizeof(ppid)); +} + +static +void ppid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + pid_t ppid; + + /* + * TODO: when we eventually add RCU subsystem instrumentation, + * taking the rcu read lock here will trigger RCU tracing + * recursively. We should modify the kernel synchronization so + * it synchronizes both for RCU and RCU sched, and rely on + * rcu_read_lock_sched_notrace. + */ + rcu_read_lock(); + ppid = task_tgid_nr(current->real_parent); + rcu_read_unlock(); + value->s64 = ppid; +} + +int lttng_add_ppid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "ppid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "ppid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = ppid_get_size; + field->record = ppid_record; + field->get_value = ppid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_ppid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-preemptible.c b/ltt/lttng-2.11.0/lttng-context-preemptible.c new file mode 100644 index 000000000000..867805b7c739 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-preemptible.c @@ -0,0 +1,92 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-preemptible.c + * + * LTTng preemptible context. + * + * Copyright (C) 2009-2015 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * We nest twice in preempt disabling within LTTng: one nesting is done + * by the instrumentation (tracepoint, kprobes, kretprobes, syscall + * tracepoint), and the second is within the lib ring buffer + * lib_ring_buffer_get_cpu(). + */ +#define LTTNG_PREEMPT_DISABLE_NESTING 2 + +static +size_t preemptible_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(uint8_t)); + size += sizeof(uint8_t); + return size; +} + +static +void preemptible_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + int pc = preempt_count(); + uint8_t preemptible = 0; + + WARN_ON_ONCE(pc < LTTNG_PREEMPT_DISABLE_NESTING); + if (pc == LTTNG_PREEMPT_DISABLE_NESTING) + preemptible = 1; + lib_ring_buffer_align_ctx(ctx, lttng_alignof(preemptible)); + chan->ops->event_write(ctx, &preemptible, sizeof(preemptible)); +} + +static +void preemptible_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + int pc = preempt_count(); + + WARN_ON_ONCE(pc < LTTNG_PREEMPT_DISABLE_NESTING); + if (pc == LTTNG_PREEMPT_DISABLE_NESTING) + value->s64 = 1; + else + value->s64 = 0; +} + +int lttng_add_preemptible_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "preemptible")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "preemptible"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(uint8_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(uint8_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = preemptible_get_size; + field->record = preemptible_record; + field->get_value = preemptible_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_preemptible_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-prio.c b/ltt/lttng-2.11.0/lttng-context-prio.c new file mode 100644 index 000000000000..c786f5d312d6 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-prio.c @@ -0,0 +1,108 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-prio.c + * + * LTTng priority context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static +int (*wrapper_task_prio_sym)(struct task_struct *t); + +int wrapper_task_prio_init(void) +{ + wrapper_task_prio_sym = (void *) kallsyms_lookup_funcptr("task_prio"); + if (!wrapper_task_prio_sym) { + printk(KERN_WARNING "LTTng: task_prio symbol lookup failed.\n"); + return -EINVAL; + } + return 0; +} + +/* + * Canary function to check for 'task_prio()' at compile time. + * + * From 'include/linux/sched.h': + * + * extern int task_prio(const struct task_struct *p); + */ +__attribute__((unused)) static +int __canary__task_prio(const struct task_struct *p) +{ + return task_prio(p); +} + +static +size_t prio_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(int)); + size += sizeof(int); + return size; +} + +static +void prio_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + int prio; + + prio = wrapper_task_prio_sym(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(prio)); + chan->ops->event_write(ctx, &prio, sizeof(prio)); +} + +static +void prio_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->s64 = wrapper_task_prio_sym(current); +} + +int lttng_add_prio_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + int ret; + + if (!wrapper_task_prio_sym) { + ret = wrapper_task_prio_init(); + if (ret) + return ret; + } + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "prio")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "prio"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(int); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = prio_get_size; + field->record = prio_record; + field->get_value = prio_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_prio_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-procname.c b/ltt/lttng-2.11.0/lttng-context-procname.c new file mode 100644 index 000000000000..8f18ca2c5532 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-procname.c @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-procname.c + * + * LTTng procname context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t procname_get_size(size_t offset) +{ + size_t size = 0; + + size += sizeof(current->comm); + return size; +} + +/* + * Racy read of procname. We simply copy its whole array size. + * Races with /proc//procname write only. + * Otherwise having to take a mutex for each event is cumbersome and + * could lead to crash in IRQ context and deadlock of the lockdep tracer. + */ +static +void procname_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + chan->ops->event_write(ctx, current->comm, sizeof(current->comm)); +} + +static +void procname_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + value->str = current->comm; +} + +int lttng_add_procname_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "procname")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "procname"; + field->event_field.type.atype = atype_array; + field->event_field.type.u.array.elem_type.atype = atype_integer; + field->event_field.type.u.array.elem_type.u.basic.integer.size = sizeof(char) * CHAR_BIT; + field->event_field.type.u.array.elem_type.u.basic.integer.alignment = lttng_alignof(char) * CHAR_BIT; + field->event_field.type.u.array.elem_type.u.basic.integer.signedness = lttng_is_signed_type(char); + field->event_field.type.u.array.elem_type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.array.elem_type.u.basic.integer.base = 10; + field->event_field.type.u.array.elem_type.u.basic.integer.encoding = lttng_encode_UTF8; + field->event_field.type.u.array.length = sizeof(current->comm); + + field->get_size = procname_get_size; + field->record = procname_record; + field->get_value = procname_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_procname_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-tid.c b/ltt/lttng-2.11.0/lttng-context-tid.c new file mode 100644 index 000000000000..f6defc462036 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-tid.c @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-tid.c + * + * LTTng TID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t tid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void tid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + pid_t tid; + + tid = task_pid_nr(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(tid)); + chan->ops->event_write(ctx, &tid, sizeof(tid)); +} + +static +void tid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + pid_t tid; + + tid = task_pid_nr(current); + value->s64 = tid; +} + +int lttng_add_tid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "tid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "tid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = tid_get_size; + field->record = tid_record; + field->get_value = tid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_tid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-vpid.c b/ltt/lttng-2.11.0/lttng-context-vpid.c new file mode 100644 index 000000000000..b5b6ce0a59a1 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-vpid.c @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-vpid.c + * + * LTTng vPID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t vpid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void vpid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + pid_t vpid; + + /* + * nsproxy can be NULL when scheduled out of exit. + */ + if (!current->nsproxy) + vpid = 0; + else + vpid = task_tgid_vnr(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(vpid)); + chan->ops->event_write(ctx, &vpid, sizeof(vpid)); +} + +static +void vpid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + pid_t vpid; + + /* + * nsproxy can be NULL when scheduled out of exit. + */ + if (!current->nsproxy) + vpid = 0; + else + vpid = task_tgid_vnr(current); + value->s64 = vpid; +} + +int lttng_add_vpid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "vpid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "vpid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = vpid_get_size; + field->record = vpid_record; + field->get_value = vpid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_vpid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-vppid.c b/ltt/lttng-2.11.0/lttng-context-vppid.c new file mode 100644 index 000000000000..347ac634c81e --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-vppid.c @@ -0,0 +1,118 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-vppid.c + * + * LTTng vPPID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static +size_t vppid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void vppid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + struct task_struct *parent; + pid_t vppid; + + /* + * current nsproxy can be NULL when scheduled out of exit. pid_vnr uses + * the current thread nsproxy to perform the lookup. + */ + + /* + * TODO: when we eventually add RCU subsystem instrumentation, + * taking the rcu read lock here will trigger RCU tracing + * recursively. We should modify the kernel synchronization so + * it synchronizes both for RCU and RCU sched, and rely on + * rcu_read_lock_sched_notrace. + */ + + rcu_read_lock(); + parent = rcu_dereference(current->real_parent); + if (!current->nsproxy) + vppid = 0; + else + vppid = task_tgid_vnr(parent); + rcu_read_unlock(); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(vppid)); + chan->ops->event_write(ctx, &vppid, sizeof(vppid)); +} + +static +void vppid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + struct task_struct *parent; + pid_t vppid; + + /* + * current nsproxy can be NULL when scheduled out of exit. pid_vnr uses + * the current thread nsproxy to perform the lookup. + */ + + /* + * TODO: when we eventually add RCU subsystem instrumentation, + * taking the rcu read lock here will trigger RCU tracing + * recursively. We should modify the kernel synchronization so + * it synchronizes both for RCU and RCU sched, and rely on + * rcu_read_lock_sched_notrace. + */ + + rcu_read_lock(); + parent = rcu_dereference(current->real_parent); + if (!current->nsproxy) + vppid = 0; + else + vppid = task_tgid_vnr(parent); + rcu_read_unlock(); + value->s64 = vppid; +} + +int lttng_add_vppid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "vppid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "vppid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = vppid_get_size; + field->record = vppid_record; + field->get_value = vppid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_vppid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context-vtid.c b/ltt/lttng-2.11.0/lttng-context-vtid.c new file mode 100644 index 000000000000..e81ba0e27532 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context-vtid.c @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context-vtid.c + * + * LTTng vTID context. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +static +size_t vtid_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, lttng_alignof(pid_t)); + size += sizeof(pid_t); + return size; +} + +static +void vtid_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan) +{ + pid_t vtid; + + /* + * nsproxy can be NULL when scheduled out of exit. + */ + if (!current->nsproxy) + vtid = 0; + else + vtid = task_pid_vnr(current); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(vtid)); + chan->ops->event_write(ctx, &vtid, sizeof(vtid)); +} + +static +void vtid_get_value(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value) +{ + pid_t vtid; + + /* + * nsproxy can be NULL when scheduled out of exit. + */ + if (!current->nsproxy) + vtid = 0; + else + vtid = task_pid_vnr(current); + value->s64 = vtid; +} + +int lttng_add_vtid_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + + field = lttng_append_context(ctx); + if (!field) + return -ENOMEM; + if (lttng_find_context(*ctx, "vtid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } + field->event_field.name = "vtid"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = lttng_alignof(pid_t) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = lttng_is_signed_type(pid_t); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = vtid_get_size; + field->record = vtid_record; + field->get_value = vtid_get_value; + lttng_context_update(*ctx); + wrapper_vmalloc_sync_mappings(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_vtid_to_ctx); diff --git a/ltt/lttng-2.11.0/lttng-context.c b/ltt/lttng-2.11.0/lttng-context.c new file mode 100644 index 000000000000..ce11f5659484 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-context.c @@ -0,0 +1,314 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-context.c + * + * LTTng trace/channel/event context management. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include + +/* + * The filter implementation requires that two consecutive "get" for the + * same context performed by the same thread return the same result. + */ + +/* + * Static array of contexts, for $ctx filters. + */ +struct lttng_ctx *lttng_static_ctx; + +int lttng_find_context(struct lttng_ctx *ctx, const char *name) +{ + unsigned int i; + + for (i = 0; i < ctx->nr_fields; i++) { + /* Skip allocated (but non-initialized) contexts */ + if (!ctx->fields[i].event_field.name) + continue; + if (!strcmp(ctx->fields[i].event_field.name, name)) + return 1; + } + return 0; +} +EXPORT_SYMBOL_GPL(lttng_find_context); + +int lttng_get_context_index(struct lttng_ctx *ctx, const char *name) +{ + unsigned int i; + const char *subname; + + if (!ctx) + return -1; + if (strncmp(name, "$ctx.", strlen("$ctx.")) == 0) { + subname = name + strlen("$ctx."); + } else { + subname = name; + } + for (i = 0; i < ctx->nr_fields; i++) { + /* Skip allocated (but non-initialized) contexts */ + if (!ctx->fields[i].event_field.name) + continue; + if (!strcmp(ctx->fields[i].event_field.name, subname)) + return i; + } + return -1; +} +EXPORT_SYMBOL_GPL(lttng_get_context_index); + +/* + * Note: as we append context information, the pointer location may change. + */ +struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx_p) +{ + struct lttng_ctx_field *field; + struct lttng_ctx *ctx; + + if (!*ctx_p) { + *ctx_p = kzalloc(sizeof(struct lttng_ctx), GFP_KERNEL); + if (!*ctx_p) + return NULL; + (*ctx_p)->largest_align = 1; + } + ctx = *ctx_p; + if (ctx->nr_fields + 1 > ctx->allocated_fields) { + struct lttng_ctx_field *new_fields; + + ctx->allocated_fields = max_t(size_t, 1, 2 * ctx->allocated_fields); + new_fields = lttng_kvzalloc(ctx->allocated_fields * sizeof(struct lttng_ctx_field), GFP_KERNEL); + if (!new_fields) + return NULL; + if (ctx->fields) + memcpy(new_fields, ctx->fields, sizeof(*ctx->fields) * ctx->nr_fields); + lttng_kvfree(ctx->fields); + ctx->fields = new_fields; + } + field = &ctx->fields[ctx->nr_fields]; + ctx->nr_fields++; + return field; +} +EXPORT_SYMBOL_GPL(lttng_append_context); + +/* + * lttng_context_update() should be called at least once between context + * modification and trace start. + */ +void lttng_context_update(struct lttng_ctx *ctx) +{ + int i; + size_t largest_align = 8; /* in bits */ + + for (i = 0; i < ctx->nr_fields; i++) { + struct lttng_type *type; + size_t field_align = 8; + + type = &ctx->fields[i].event_field.type; + switch (type->atype) { + case atype_integer: + field_align = type->u.basic.integer.alignment; + break; + case atype_array: + case atype_array_bitfield: + { + struct lttng_basic_type *btype; + + btype = &type->u.array.elem_type; + switch (btype->atype) { + case atype_integer: + field_align = btype->u.basic.integer.alignment; + break; + case atype_string: + break; + + case atype_array: + case atype_sequence: + case atype_array_bitfield: + case atype_sequence_bitfield: + case atype_struct: + case atype_array_compound: + case atype_sequence_compound: + case atype_variant: + default: + WARN_ON_ONCE(1); + break; + } + break; + } + case atype_sequence: + case atype_sequence_bitfield: + { + struct lttng_basic_type *btype; + + btype = &type->u.sequence.length_type; + switch (btype->atype) { + case atype_integer: + field_align = btype->u.basic.integer.alignment; + break; + + case atype_string: + case atype_array: + case atype_sequence: + case atype_array_bitfield: + case atype_sequence_bitfield: + case atype_struct: + case atype_array_compound: + case atype_sequence_compound: + case atype_variant: + default: + WARN_ON_ONCE(1); + break; + } + + btype = &type->u.sequence.elem_type; + switch (btype->atype) { + case atype_integer: + field_align = max_t(size_t, + field_align, + btype->u.basic.integer.alignment); + break; + + case atype_string: + break; + + case atype_array: + case atype_sequence: + case atype_array_bitfield: + case atype_sequence_bitfield: + case atype_struct: + case atype_array_compound: + case atype_sequence_compound: + case atype_variant: + default: + WARN_ON_ONCE(1); + break; + } + break; + } + case atype_string: + break; + + case atype_struct: + case atype_array_compound: + case atype_sequence_compound: + case atype_variant: + break; + + case atype_enum: + default: + WARN_ON_ONCE(1); + break; + } + largest_align = max_t(size_t, largest_align, field_align); + } + ctx->largest_align = largest_align >> 3; /* bits to bytes */ +} + +/* + * Remove last context field. + */ +void lttng_remove_context_field(struct lttng_ctx **ctx_p, + struct lttng_ctx_field *field) +{ + struct lttng_ctx *ctx; + + ctx = *ctx_p; + ctx->nr_fields--; + WARN_ON_ONCE(&ctx->fields[ctx->nr_fields] != field); + memset(&ctx->fields[ctx->nr_fields], 0, sizeof(struct lttng_ctx_field)); +} +EXPORT_SYMBOL_GPL(lttng_remove_context_field); + +void lttng_destroy_context(struct lttng_ctx *ctx) +{ + int i; + + if (!ctx) + return; + for (i = 0; i < ctx->nr_fields; i++) { + if (ctx->fields[i].destroy) + ctx->fields[i].destroy(&ctx->fields[i]); + } + lttng_kvfree(ctx->fields); + kfree(ctx); +} + +int lttng_context_init(void) +{ + int ret; + + ret = lttng_add_hostname_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_hostname_to_ctx"); + } + ret = lttng_add_nice_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_nice_to_ctx"); + } + ret = lttng_add_pid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_pid_to_ctx"); + } + ret = lttng_add_ppid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_ppid_to_ctx"); + } + ret = lttng_add_prio_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_prio_to_ctx"); + } + ret = lttng_add_procname_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_procname_to_ctx"); + } + ret = lttng_add_tid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_tid_to_ctx"); + } + ret = lttng_add_vppid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_vppid_to_ctx"); + } + ret = lttng_add_vtid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_vtid_to_ctx"); + } + ret = lttng_add_vpid_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_vpid_to_ctx"); + } + ret = lttng_add_cpu_id_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_cpu_id_to_ctx"); + } + ret = lttng_add_interruptible_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_interruptible_to_ctx"); + } + ret = lttng_add_need_reschedule_to_ctx(<tng_static_ctx); + if (ret) { + printk(KERN_WARNING "Cannot add context lttng_add_need_reschedule_to_ctx"); + } + ret = lttng_add_preemptible_to_ctx(<tng_static_ctx); + if (ret && ret != -ENOSYS) { + printk(KERN_WARNING "Cannot add context lttng_add_preemptible_to_ctx"); + } + ret = lttng_add_migratable_to_ctx(<tng_static_ctx); + if (ret && ret != -ENOSYS) { + printk(KERN_WARNING "Cannot add context lttng_add_migratable_to_ctx"); + } + /* TODO: perf counters for filtering */ + return 0; +} + +void lttng_context_exit(void) +{ + lttng_destroy_context(lttng_static_ctx); + lttng_static_ctx = NULL; +} diff --git a/ltt/lttng-2.11.0/lttng-cpuhotplug.h b/ltt/lttng-2.11.0/lttng-cpuhotplug.h new file mode 100644 index 000000000000..f261d0452a41 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-cpuhotplug.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-cpuhotplug.h + * + * Copyright (C) 2016 Mathieu Desnoyers + */ + +#ifndef LTTNG_CPUHOTPLUG_H +#define LTTNG_CPUHOTPLUG_H + +struct lttng_cpuhp_node; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +#include + +enum lttng_cpuhp_component { + LTTNG_RING_BUFFER_FRONTEND, + LTTNG_RING_BUFFER_BACKEND, + LTTNG_RING_BUFFER_ITER, + LTTNG_CONTEXT_PERF_COUNTERS, +}; + +struct lttng_cpuhp_node { + enum lttng_cpuhp_component component; + struct hlist_node node; +}; + +extern enum cpuhp_state lttng_hp_prepare; +extern enum cpuhp_state lttng_hp_online; + +int lttng_cpuhp_rb_backend_prepare(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_rb_frontend_dead(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_rb_frontend_online(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_rb_frontend_offline(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_rb_iter_online(unsigned int cpu, + struct lttng_cpuhp_node *node); + +/* Ring buffer is a separate library. */ +void lttng_rb_set_hp_prepare(enum cpuhp_state val); +void lttng_rb_set_hp_online(enum cpuhp_state val); + +extern enum cpuhp_state lttng_rb_hp_prepare; +extern enum cpuhp_state lttng_rb_hp_online; + +#endif + +#endif /* LTTNG_CPUHOTPLUG_H */ diff --git a/ltt/lttng-2.11.0/lttng-endian.h b/ltt/lttng-2.11.0/lttng-endian.h new file mode 100644 index 000000000000..5d525c3a24aa --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-endian.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#ifndef _LTTNG_ENDIAN_H +#define _LTTNG_ENDIAN_H + +/* + * lttng-endian.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifdef __KERNEL__ +# include +# ifdef __BIG_ENDIAN +# define __BYTE_ORDER __BIG_ENDIAN +# elif defined(__LITTLE_ENDIAN) +# define __BYTE_ORDER __LITTLE_ENDIAN +# else +# error "unknown endianness" +# endif +#ifndef __BIG_ENDIAN +# define __BIG_ENDIAN 4321 +#endif +#ifndef __LITTLE_ENDIAN +# define __LITTLE_ENDIAN 1234 +#endif +#else +# include +#endif + +#endif /* _LTTNG_ENDIAN_H */ diff --git a/ltt/lttng-2.11.0/lttng-events.c b/ltt/lttng-2.11.0/lttng-events.c new file mode 100644 index 000000000000..64abcfad559a --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-events.c @@ -0,0 +1,3122 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-events.c + * + * Holds LTTng per-session event registry. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* + * This page_alloc.h wrapper needs to be included before gfpflags.h because it + * overrides a function with a define. + */ +#include "wrapper/page_alloc.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define METADATA_CACHE_DEFAULT_SIZE 4096 + +static LIST_HEAD(sessions); +static LIST_HEAD(lttng_transport_list); +/* + * Protect the sessions and metadata caches. + */ +static DEFINE_MUTEX(sessions_mutex); +static struct kmem_cache *event_cache; + +static void lttng_session_lazy_sync_enablers(struct lttng_session *session); +static void lttng_session_sync_enablers(struct lttng_session *session); +static void lttng_enabler_destroy(struct lttng_enabler *enabler); + +static void _lttng_event_destroy(struct lttng_event *event); +static void _lttng_channel_destroy(struct lttng_channel *chan); +static int _lttng_event_unregister(struct lttng_event *event); +static +int _lttng_event_metadata_statedump(struct lttng_session *session, + struct lttng_channel *chan, + struct lttng_event *event); +static +int _lttng_session_metadata_statedump(struct lttng_session *session); +static +void _lttng_metadata_channel_hangup(struct lttng_metadata_stream *stream); +static +int _lttng_field_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting); + +void synchronize_trace(void) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) + synchronize_rcu(); +#else + synchronize_sched(); +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +#ifdef CONFIG_PREEMPT_RT_FULL + synchronize_rcu(); +#endif +#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */ +#ifdef CONFIG_PREEMPT_RT + synchronize_rcu(); +#endif +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */ +} + +void lttng_lock_sessions(void) +{ + mutex_lock(&sessions_mutex); +} + +void lttng_unlock_sessions(void) +{ + mutex_unlock(&sessions_mutex); +} + +/* + * Called with sessions lock held. + */ +int lttng_session_active(void) +{ + struct lttng_session *iter; + + list_for_each_entry(iter, &sessions, list) { + if (iter->active) + return 1; + } + return 0; +} + +struct lttng_session *lttng_session_create(void) +{ + struct lttng_session *session; + struct lttng_metadata_cache *metadata_cache; + int i; + + mutex_lock(&sessions_mutex); + session = lttng_kvzalloc(sizeof(struct lttng_session), GFP_KERNEL); + if (!session) + goto err; + INIT_LIST_HEAD(&session->chan); + INIT_LIST_HEAD(&session->events); + lttng_guid_gen(&session->uuid); + + metadata_cache = kzalloc(sizeof(struct lttng_metadata_cache), + GFP_KERNEL); + if (!metadata_cache) + goto err_free_session; + metadata_cache->data = lttng_vzalloc(METADATA_CACHE_DEFAULT_SIZE); + if (!metadata_cache->data) + goto err_free_cache; + metadata_cache->cache_alloc = METADATA_CACHE_DEFAULT_SIZE; + kref_init(&metadata_cache->refcount); + mutex_init(&metadata_cache->lock); + session->metadata_cache = metadata_cache; + INIT_LIST_HEAD(&metadata_cache->metadata_stream); + memcpy(&metadata_cache->uuid, &session->uuid, + sizeof(metadata_cache->uuid)); + INIT_LIST_HEAD(&session->enablers_head); + for (i = 0; i < LTTNG_EVENT_HT_SIZE; i++) + INIT_HLIST_HEAD(&session->events_ht.table[i]); + list_add(&session->list, &sessions); + mutex_unlock(&sessions_mutex); + return session; + +err_free_cache: + kfree(metadata_cache); +err_free_session: + lttng_kvfree(session); +err: + mutex_unlock(&sessions_mutex); + return NULL; +} + +void metadata_cache_destroy(struct kref *kref) +{ + struct lttng_metadata_cache *cache = + container_of(kref, struct lttng_metadata_cache, refcount); + vfree(cache->data); + kfree(cache); +} + +void lttng_session_destroy(struct lttng_session *session) +{ + struct lttng_channel *chan, *tmpchan; + struct lttng_event *event, *tmpevent; + struct lttng_metadata_stream *metadata_stream; + struct lttng_enabler *enabler, *tmpenabler; + int ret; + + mutex_lock(&sessions_mutex); + WRITE_ONCE(session->active, 0); + list_for_each_entry(chan, &session->chan, list) { + ret = lttng_syscalls_unregister(chan); + WARN_ON(ret); + } + list_for_each_entry(event, &session->events, list) { + ret = _lttng_event_unregister(event); + WARN_ON(ret); + } + synchronize_trace(); /* Wait for in-flight events to complete */ + list_for_each_entry(chan, &session->chan, list) { + ret = lttng_syscalls_destroy(chan); + WARN_ON(ret); + } + list_for_each_entry_safe(enabler, tmpenabler, + &session->enablers_head, node) + lttng_enabler_destroy(enabler); + list_for_each_entry_safe(event, tmpevent, &session->events, list) + _lttng_event_destroy(event); + list_for_each_entry_safe(chan, tmpchan, &session->chan, list) { + BUG_ON(chan->channel_type == METADATA_CHANNEL); + _lttng_channel_destroy(chan); + } + mutex_lock(&session->metadata_cache->lock); + list_for_each_entry(metadata_stream, &session->metadata_cache->metadata_stream, list) + _lttng_metadata_channel_hangup(metadata_stream); + mutex_unlock(&session->metadata_cache->lock); + if (session->pid_tracker) + lttng_pid_tracker_destroy(session->pid_tracker); + kref_put(&session->metadata_cache->refcount, metadata_cache_destroy); + list_del(&session->list); + mutex_unlock(&sessions_mutex); + lttng_kvfree(session); +} + +int lttng_session_statedump(struct lttng_session *session) +{ + int ret; + + mutex_lock(&sessions_mutex); + ret = lttng_statedump_start(session); + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_session_enable(struct lttng_session *session) +{ + int ret = 0; + struct lttng_channel *chan; + + mutex_lock(&sessions_mutex); + if (session->active) { + ret = -EBUSY; + goto end; + } + + /* Set transient enabler state to "enabled" */ + session->tstate = 1; + + /* + * Snapshot the number of events per channel to know the type of header + * we need to use. + */ + list_for_each_entry(chan, &session->chan, list) { + if (chan->header_type) + continue; /* don't change it if session stop/restart */ + if (chan->free_event_id < 31) + chan->header_type = 1; /* compact */ + else + chan->header_type = 2; /* large */ + } + + /* We need to sync enablers with session before activation. */ + lttng_session_sync_enablers(session); + + /* Clear each stream's quiescent state. */ + list_for_each_entry(chan, &session->chan, list) { + if (chan->channel_type != METADATA_CHANNEL) + lib_ring_buffer_clear_quiescent_channel(chan->chan); + } + + WRITE_ONCE(session->active, 1); + WRITE_ONCE(session->been_active, 1); + ret = _lttng_session_metadata_statedump(session); + if (ret) { + WRITE_ONCE(session->active, 0); + goto end; + } + ret = lttng_statedump_start(session); + if (ret) + WRITE_ONCE(session->active, 0); +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_session_disable(struct lttng_session *session) +{ + int ret = 0; + struct lttng_channel *chan; + + mutex_lock(&sessions_mutex); + if (!session->active) { + ret = -EBUSY; + goto end; + } + WRITE_ONCE(session->active, 0); + + /* Set transient enabler state to "disabled" */ + session->tstate = 0; + lttng_session_sync_enablers(session); + + /* Set each stream's quiescent state. */ + list_for_each_entry(chan, &session->chan, list) { + if (chan->channel_type != METADATA_CHANNEL) + lib_ring_buffer_set_quiescent_channel(chan->chan); + } +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_session_metadata_regenerate(struct lttng_session *session) +{ + int ret = 0; + struct lttng_channel *chan; + struct lttng_event *event; + struct lttng_metadata_cache *cache = session->metadata_cache; + struct lttng_metadata_stream *stream; + + mutex_lock(&sessions_mutex); + if (!session->active) { + ret = -EBUSY; + goto end; + } + + mutex_lock(&cache->lock); + memset(cache->data, 0, cache->cache_alloc); + cache->metadata_written = 0; + cache->version++; + list_for_each_entry(stream, &session->metadata_cache->metadata_stream, list) { + stream->metadata_out = 0; + stream->metadata_in = 0; + } + mutex_unlock(&cache->lock); + + session->metadata_dumped = 0; + list_for_each_entry(chan, &session->chan, list) { + chan->metadata_dumped = 0; + } + + list_for_each_entry(event, &session->events, list) { + event->metadata_dumped = 0; + } + + ret = _lttng_session_metadata_statedump(session); + +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_channel_enable(struct lttng_channel *channel) +{ + int ret = 0; + + mutex_lock(&sessions_mutex); + if (channel->channel_type == METADATA_CHANNEL) { + ret = -EPERM; + goto end; + } + if (channel->enabled) { + ret = -EEXIST; + goto end; + } + /* Set transient enabler state to "enabled" */ + channel->tstate = 1; + lttng_session_sync_enablers(channel->session); + /* Set atomically the state to "enabled" */ + WRITE_ONCE(channel->enabled, 1); +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_channel_disable(struct lttng_channel *channel) +{ + int ret = 0; + + mutex_lock(&sessions_mutex); + if (channel->channel_type == METADATA_CHANNEL) { + ret = -EPERM; + goto end; + } + if (!channel->enabled) { + ret = -EEXIST; + goto end; + } + /* Set atomically the state to "disabled" */ + WRITE_ONCE(channel->enabled, 0); + /* Set transient enabler state to "enabled" */ + channel->tstate = 0; + lttng_session_sync_enablers(channel->session); +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_event_enable(struct lttng_event *event) +{ + int ret = 0; + + mutex_lock(&sessions_mutex); + if (event->chan->channel_type == METADATA_CHANNEL) { + ret = -EPERM; + goto end; + } + if (event->enabled) { + ret = -EEXIST; + goto end; + } + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + case LTTNG_KERNEL_SYSCALL: + ret = -EINVAL; + break; + case LTTNG_KERNEL_KPROBE: + case LTTNG_KERNEL_UPROBE: + case LTTNG_KERNEL_NOOP: + WRITE_ONCE(event->enabled, 1); + break; + case LTTNG_KERNEL_KRETPROBE: + ret = lttng_kretprobes_event_enable_state(event, 1); + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through. */ + default: + WARN_ON_ONCE(1); + ret = -EINVAL; + } +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_event_disable(struct lttng_event *event) +{ + int ret = 0; + + mutex_lock(&sessions_mutex); + if (event->chan->channel_type == METADATA_CHANNEL) { + ret = -EPERM; + goto end; + } + if (!event->enabled) { + ret = -EEXIST; + goto end; + } + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + case LTTNG_KERNEL_SYSCALL: + ret = -EINVAL; + break; + case LTTNG_KERNEL_KPROBE: + case LTTNG_KERNEL_UPROBE: + case LTTNG_KERNEL_NOOP: + WRITE_ONCE(event->enabled, 0); + break; + case LTTNG_KERNEL_KRETPROBE: + ret = lttng_kretprobes_event_enable_state(event, 0); + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through. */ + default: + WARN_ON_ONCE(1); + ret = -EINVAL; + } +end: + mutex_unlock(&sessions_mutex); + return ret; +} + +static struct lttng_transport *lttng_transport_find(const char *name) +{ + struct lttng_transport *transport; + + list_for_each_entry(transport, <tng_transport_list, node) { + if (!strcmp(transport->name, name)) + return transport; + } + return NULL; +} + +struct lttng_channel *lttng_channel_create(struct lttng_session *session, + const char *transport_name, + void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval, + enum channel_type channel_type) +{ + struct lttng_channel *chan; + struct lttng_transport *transport = NULL; + + mutex_lock(&sessions_mutex); + if (session->been_active && channel_type != METADATA_CHANNEL) + goto active; /* Refuse to add channel to active session */ + transport = lttng_transport_find(transport_name); + if (!transport) { + printk(KERN_WARNING "LTTng transport %s not found\n", + transport_name); + goto notransport; + } + if (!try_module_get(transport->owner)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + goto notransport; + } + chan = kzalloc(sizeof(struct lttng_channel), GFP_KERNEL); + if (!chan) + goto nomem; + chan->session = session; + chan->id = session->free_chan_id++; + chan->ops = &transport->ops; + /* + * Note: the channel creation op already writes into the packet + * headers. Therefore the "chan" information used as input + * should be already accessible. + */ + chan->chan = transport->ops.channel_create(transport_name, + chan, buf_addr, subbuf_size, num_subbuf, + switch_timer_interval, read_timer_interval); + if (!chan->chan) + goto create_error; + chan->tstate = 1; + chan->enabled = 1; + chan->transport = transport; + chan->channel_type = channel_type; + list_add(&chan->list, &session->chan); + mutex_unlock(&sessions_mutex); + return chan; + +create_error: + kfree(chan); +nomem: + if (transport) + module_put(transport->owner); +notransport: +active: + mutex_unlock(&sessions_mutex); + return NULL; +} + +/* + * Only used internally at session destruction for per-cpu channels, and + * when metadata channel is released. + * Needs to be called with sessions mutex held. + */ +static +void _lttng_channel_destroy(struct lttng_channel *chan) +{ + chan->ops->channel_destroy(chan->chan); + module_put(chan->transport->owner); + list_del(&chan->list); + lttng_destroy_context(chan->ctx); + kfree(chan); +} + +void lttng_metadata_channel_destroy(struct lttng_channel *chan) +{ + BUG_ON(chan->channel_type != METADATA_CHANNEL); + + /* Protect the metadata cache with the sessions_mutex. */ + mutex_lock(&sessions_mutex); + _lttng_channel_destroy(chan); + mutex_unlock(&sessions_mutex); +} +EXPORT_SYMBOL_GPL(lttng_metadata_channel_destroy); + +static +void _lttng_metadata_channel_hangup(struct lttng_metadata_stream *stream) +{ + stream->finalized = 1; + wake_up_interruptible(&stream->read_wait); +} + +/* + * Supports event creation while tracing session is active. + * Needs to be called with sessions mutex held. + */ +struct lttng_event *_lttng_event_create(struct lttng_channel *chan, + struct lttng_kernel_event *event_param, + void *filter, + const struct lttng_event_desc *event_desc, + enum lttng_kernel_instrumentation itype) +{ + struct lttng_session *session = chan->session; + struct lttng_event *event; + const char *event_name; + struct hlist_head *head; + size_t name_len; + uint32_t hash; + int ret; + + if (chan->free_event_id == -1U) { + ret = -EMFILE; + goto full; + } + + switch (itype) { + case LTTNG_KERNEL_TRACEPOINT: + event_name = event_desc->name; + break; + case LTTNG_KERNEL_KPROBE: + case LTTNG_KERNEL_UPROBE: + case LTTNG_KERNEL_KRETPROBE: + case LTTNG_KERNEL_NOOP: + case LTTNG_KERNEL_SYSCALL: + event_name = event_param->name; + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through. */ + default: + WARN_ON_ONCE(1); + ret = -EINVAL; + goto type_error; + } + name_len = strlen(event_name); + hash = jhash(event_name, name_len, 0); + head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)]; + lttng_hlist_for_each_entry(event, head, hlist) { + WARN_ON_ONCE(!event->desc); + if (!strncmp(event->desc->name, event_name, + LTTNG_KERNEL_SYM_NAME_LEN - 1) + && chan == event->chan) { + ret = -EEXIST; + goto exist; + } + } + + event = kmem_cache_zalloc(event_cache, GFP_KERNEL); + if (!event) { + ret = -ENOMEM; + goto cache_error; + } + event->chan = chan; + event->filter = filter; + event->id = chan->free_event_id++; + event->instrumentation = itype; + event->evtype = LTTNG_TYPE_EVENT; + INIT_LIST_HEAD(&event->bytecode_runtime_head); + INIT_LIST_HEAD(&event->enablers_ref_head); + + switch (itype) { + case LTTNG_KERNEL_TRACEPOINT: + /* Event will be enabled by enabler sync. */ + event->enabled = 0; + event->registered = 0; + event->desc = lttng_event_get(event_name); + if (!event->desc) { + ret = -ENOENT; + goto register_error; + } + /* Populate lttng_event structure before event registration. */ + smp_wmb(); + break; + case LTTNG_KERNEL_KPROBE: + /* + * Needs to be explicitly enabled after creation, since + * we may want to apply filters. + */ + event->enabled = 0; + event->registered = 1; + /* + * Populate lttng_event structure before event + * registration. + */ + smp_wmb(); + ret = lttng_kprobes_register(event_name, + event_param->u.kprobe.symbol_name, + event_param->u.kprobe.offset, + event_param->u.kprobe.addr, + event); + if (ret) { + ret = -EINVAL; + goto register_error; + } + ret = try_module_get(event->desc->owner); + WARN_ON_ONCE(!ret); + break; + case LTTNG_KERNEL_KRETPROBE: + { + struct lttng_event *event_return; + + /* kretprobe defines 2 events */ + /* + * Needs to be explicitly enabled after creation, since + * we may want to apply filters. + */ + event->enabled = 0; + event->registered = 1; + event_return = + kmem_cache_zalloc(event_cache, GFP_KERNEL); + if (!event_return) { + ret = -ENOMEM; + goto register_error; + } + event_return->chan = chan; + event_return->filter = filter; + event_return->id = chan->free_event_id++; + event_return->enabled = 0; + event_return->registered = 1; + event_return->instrumentation = itype; + /* + * Populate lttng_event structure before kretprobe registration. + */ + smp_wmb(); + ret = lttng_kretprobes_register(event_name, + event_param->u.kretprobe.symbol_name, + event_param->u.kretprobe.offset, + event_param->u.kretprobe.addr, + event, event_return); + if (ret) { + kmem_cache_free(event_cache, event_return); + ret = -EINVAL; + goto register_error; + } + /* Take 2 refs on the module: one per event. */ + ret = try_module_get(event->desc->owner); + WARN_ON_ONCE(!ret); + ret = try_module_get(event->desc->owner); + WARN_ON_ONCE(!ret); + ret = _lttng_event_metadata_statedump(chan->session, chan, + event_return); + WARN_ON_ONCE(ret > 0); + if (ret) { + kmem_cache_free(event_cache, event_return); + module_put(event->desc->owner); + module_put(event->desc->owner); + goto statedump_error; + } + list_add(&event_return->list, &chan->session->events); + break; + } + case LTTNG_KERNEL_NOOP: + case LTTNG_KERNEL_SYSCALL: + /* + * Needs to be explicitly enabled after creation, since + * we may want to apply filters. + */ + event->enabled = 0; + event->registered = 0; + event->desc = event_desc; + switch (event_param->u.syscall.entryexit) { + case LTTNG_KERNEL_SYSCALL_ENTRYEXIT: + ret = -EINVAL; + goto register_error; + case LTTNG_KERNEL_SYSCALL_ENTRY: + event->u.syscall.entryexit = LTTNG_SYSCALL_ENTRY; + break; + case LTTNG_KERNEL_SYSCALL_EXIT: + event->u.syscall.entryexit = LTTNG_SYSCALL_EXIT; + break; + } + switch (event_param->u.syscall.abi) { + case LTTNG_KERNEL_SYSCALL_ABI_ALL: + ret = -EINVAL; + goto register_error; + case LTTNG_KERNEL_SYSCALL_ABI_NATIVE: + event->u.syscall.abi = LTTNG_SYSCALL_ABI_NATIVE; + break; + case LTTNG_KERNEL_SYSCALL_ABI_COMPAT: + event->u.syscall.abi = LTTNG_SYSCALL_ABI_COMPAT; + break; + } + if (!event->desc) { + ret = -EINVAL; + goto register_error; + } + break; + case LTTNG_KERNEL_UPROBE: + /* + * Needs to be explicitly enabled after creation, since + * we may want to apply filters. + */ + event->enabled = 0; + event->registered = 1; + + /* + * Populate lttng_event structure before event + * registration. + */ + smp_wmb(); + + ret = lttng_uprobes_register(event_param->name, + event_param->u.uprobe.fd, + event); + if (ret) + goto register_error; + ret = try_module_get(event->desc->owner); + WARN_ON_ONCE(!ret); + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through */ + default: + WARN_ON_ONCE(1); + ret = -EINVAL; + goto register_error; + } + ret = _lttng_event_metadata_statedump(chan->session, chan, event); + WARN_ON_ONCE(ret > 0); + if (ret) { + goto statedump_error; + } + hlist_add_head(&event->hlist, head); + list_add(&event->list, &chan->session->events); + return event; + +statedump_error: + /* If a statedump error occurs, events will not be readable. */ +register_error: + kmem_cache_free(event_cache, event); +cache_error: +exist: +type_error: +full: + return ERR_PTR(ret); +} + +struct lttng_event *lttng_event_create(struct lttng_channel *chan, + struct lttng_kernel_event *event_param, + void *filter, + const struct lttng_event_desc *event_desc, + enum lttng_kernel_instrumentation itype) +{ + struct lttng_event *event; + + mutex_lock(&sessions_mutex); + event = _lttng_event_create(chan, event_param, filter, event_desc, + itype); + mutex_unlock(&sessions_mutex); + return event; +} + +/* Only used for tracepoints for now. */ +static +void register_event(struct lttng_event *event) +{ + const struct lttng_event_desc *desc; + int ret = -EINVAL; + + if (event->registered) + return; + + desc = event->desc; + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + ret = lttng_wrapper_tracepoint_probe_register(desc->kname, + desc->probe_callback, + event); + break; + case LTTNG_KERNEL_SYSCALL: + ret = lttng_syscall_filter_enable(event->chan, event); + break; + case LTTNG_KERNEL_KPROBE: + case LTTNG_KERNEL_UPROBE: + case LTTNG_KERNEL_KRETPROBE: + case LTTNG_KERNEL_NOOP: + ret = 0; + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through */ + default: + WARN_ON_ONCE(1); + } + if (!ret) + event->registered = 1; +} + +/* + * Only used internally at session destruction. + */ +int _lttng_event_unregister(struct lttng_event *event) +{ + const struct lttng_event_desc *desc; + int ret = -EINVAL; + + if (!event->registered) + return 0; + + desc = event->desc; + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + ret = lttng_wrapper_tracepoint_probe_unregister(event->desc->kname, + event->desc->probe_callback, + event); + break; + case LTTNG_KERNEL_KPROBE: + lttng_kprobes_unregister(event); + ret = 0; + break; + case LTTNG_KERNEL_KRETPROBE: + lttng_kretprobes_unregister(event); + ret = 0; + break; + case LTTNG_KERNEL_SYSCALL: + ret = lttng_syscall_filter_disable(event->chan, event); + break; + case LTTNG_KERNEL_NOOP: + ret = 0; + break; + case LTTNG_KERNEL_UPROBE: + lttng_uprobes_unregister(event); + ret = 0; + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through */ + default: + WARN_ON_ONCE(1); + } + if (!ret) + event->registered = 0; + return ret; +} + +/* + * Only used internally at session destruction. + */ +static +void _lttng_event_destroy(struct lttng_event *event) +{ + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + lttng_event_put(event->desc); + break; + case LTTNG_KERNEL_KPROBE: + module_put(event->desc->owner); + lttng_kprobes_destroy_private(event); + break; + case LTTNG_KERNEL_KRETPROBE: + module_put(event->desc->owner); + lttng_kretprobes_destroy_private(event); + break; + case LTTNG_KERNEL_NOOP: + case LTTNG_KERNEL_SYSCALL: + break; + case LTTNG_KERNEL_UPROBE: + module_put(event->desc->owner); + lttng_uprobes_destroy_private(event); + break; + case LTTNG_KERNEL_FUNCTION: /* Fall-through */ + default: + WARN_ON_ONCE(1); + } + list_del(&event->list); + lttng_destroy_context(event->ctx); + kmem_cache_free(event_cache, event); +} + +int lttng_session_track_pid(struct lttng_session *session, int pid) +{ + int ret; + + if (pid < -1) + return -EINVAL; + mutex_lock(&sessions_mutex); + if (pid == -1) { + /* track all pids: destroy tracker. */ + if (session->pid_tracker) { + struct lttng_pid_tracker *lpf; + + lpf = session->pid_tracker; + rcu_assign_pointer(session->pid_tracker, NULL); + synchronize_trace(); + lttng_pid_tracker_destroy(lpf); + } + ret = 0; + } else { + if (!session->pid_tracker) { + struct lttng_pid_tracker *lpf; + + lpf = lttng_pid_tracker_create(); + if (!lpf) { + ret = -ENOMEM; + goto unlock; + } + ret = lttng_pid_tracker_add(lpf, pid); + rcu_assign_pointer(session->pid_tracker, lpf); + } else { + ret = lttng_pid_tracker_add(session->pid_tracker, pid); + } + } +unlock: + mutex_unlock(&sessions_mutex); + return ret; +} + +int lttng_session_untrack_pid(struct lttng_session *session, int pid) +{ + int ret; + + if (pid < -1) + return -EINVAL; + mutex_lock(&sessions_mutex); + if (pid == -1) { + /* untrack all pids: replace by empty tracker. */ + struct lttng_pid_tracker *old_lpf = session->pid_tracker; + struct lttng_pid_tracker *lpf; + + lpf = lttng_pid_tracker_create(); + if (!lpf) { + ret = -ENOMEM; + goto unlock; + } + rcu_assign_pointer(session->pid_tracker, lpf); + synchronize_trace(); + if (old_lpf) + lttng_pid_tracker_destroy(old_lpf); + ret = 0; + } else { + if (!session->pid_tracker) { + ret = -ENOENT; + goto unlock; + } + ret = lttng_pid_tracker_del(session->pid_tracker, pid); + } +unlock: + mutex_unlock(&sessions_mutex); + return ret; +} + +static +void *pid_list_start(struct seq_file *m, loff_t *pos) +{ + struct lttng_session *session = m->private; + struct lttng_pid_tracker *lpf; + struct lttng_pid_hash_node *e; + int iter = 0, i; + + mutex_lock(&sessions_mutex); + lpf = session->pid_tracker; + if (lpf) { + for (i = 0; i < LTTNG_PID_TABLE_SIZE; i++) { + struct hlist_head *head = &lpf->pid_hash[i]; + + lttng_hlist_for_each_entry(e, head, hlist) { + if (iter++ >= *pos) + return e; + } + } + } else { + /* PID tracker disabled. */ + if (iter >= *pos && iter == 0) { + return session; /* empty tracker */ + } + iter++; + } + /* End of list */ + return NULL; +} + +/* Called with sessions_mutex held. */ +static +void *pid_list_next(struct seq_file *m, void *p, loff_t *ppos) +{ + struct lttng_session *session = m->private; + struct lttng_pid_tracker *lpf; + struct lttng_pid_hash_node *e; + int iter = 0, i; + + (*ppos)++; + lpf = session->pid_tracker; + if (lpf) { + for (i = 0; i < LTTNG_PID_TABLE_SIZE; i++) { + struct hlist_head *head = &lpf->pid_hash[i]; + + lttng_hlist_for_each_entry(e, head, hlist) { + if (iter++ >= *ppos) + return e; + } + } + } else { + /* PID tracker disabled. */ + if (iter >= *ppos && iter == 0) + return session; /* empty tracker */ + iter++; + } + + /* End of list */ + return NULL; +} + +static +void pid_list_stop(struct seq_file *m, void *p) +{ + mutex_unlock(&sessions_mutex); +} + +static +int pid_list_show(struct seq_file *m, void *p) +{ + int pid; + + if (p == m->private) { + /* Tracker disabled. */ + pid = -1; + } else { + const struct lttng_pid_hash_node *e = p; + + pid = lttng_pid_tracker_get_node_pid(e); + } + seq_printf(m, "process { pid = %d; };\n", pid); + return 0; +} + +static +const struct seq_operations lttng_tracker_pids_list_seq_ops = { + .start = pid_list_start, + .next = pid_list_next, + .stop = pid_list_stop, + .show = pid_list_show, +}; + +static +int lttng_tracker_pids_list_open(struct inode *inode, struct file *file) +{ + return seq_open(file, <tng_tracker_pids_list_seq_ops); +} + +static +int lttng_tracker_pids_list_release(struct inode *inode, struct file *file) +{ + struct seq_file *m = file->private_data; + struct lttng_session *session = m->private; + int ret; + + WARN_ON_ONCE(!session); + ret = seq_release(inode, file); + if (!ret && session) + fput(session->file); + return ret; +} + +const struct file_operations lttng_tracker_pids_list_fops = { + .owner = THIS_MODULE, + .open = lttng_tracker_pids_list_open, + .read = seq_read, + .llseek = seq_lseek, + .release = lttng_tracker_pids_list_release, +}; + +int lttng_session_list_tracker_pids(struct lttng_session *session) +{ + struct file *tracker_pids_list_file; + struct seq_file *m; + int file_fd, ret; + + file_fd = lttng_get_unused_fd(); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + + tracker_pids_list_file = anon_inode_getfile("[lttng_tracker_pids_list]", + <tng_tracker_pids_list_fops, + NULL, O_RDWR); + if (IS_ERR(tracker_pids_list_file)) { + ret = PTR_ERR(tracker_pids_list_file); + goto file_error; + } + if (!atomic_long_add_unless(&session->file->f_count, 1, LONG_MAX)) { + ret = -EOVERFLOW; + goto refcount_error; + } + ret = lttng_tracker_pids_list_fops.open(NULL, tracker_pids_list_file); + if (ret < 0) + goto open_error; + m = tracker_pids_list_file->private_data; + m->private = session; + fd_install(file_fd, tracker_pids_list_file); + + return file_fd; + +open_error: + atomic_long_dec(&session->file->f_count); +refcount_error: + fput(tracker_pids_list_file); +file_error: + put_unused_fd(file_fd); +fd_error: + return ret; +} + +/* + * Enabler management. + */ +static +int lttng_match_enabler_star_glob(const char *desc_name, + const char *pattern) +{ + if (!strutils_star_glob_match(pattern, LTTNG_SIZE_MAX, + desc_name, LTTNG_SIZE_MAX)) + return 0; + return 1; +} + +static +int lttng_match_enabler_name(const char *desc_name, + const char *name) +{ + if (strcmp(desc_name, name)) + return 0; + return 1; +} + +static +int lttng_desc_match_enabler(const struct lttng_event_desc *desc, + struct lttng_enabler *enabler) +{ + const char *desc_name, *enabler_name; + bool compat = false, entry = false; + + enabler_name = enabler->event_param.name; + switch (enabler->event_param.instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + desc_name = desc->name; + switch (enabler->type) { + case LTTNG_ENABLER_STAR_GLOB: + return lttng_match_enabler_star_glob(desc_name, enabler_name); + case LTTNG_ENABLER_NAME: + return lttng_match_enabler_name(desc_name, enabler_name); + default: + return -EINVAL; + } + break; + case LTTNG_KERNEL_SYSCALL: + desc_name = desc->name; + if (!strncmp(desc_name, "compat_", strlen("compat_"))) { + desc_name += strlen("compat_"); + compat = true; + } + if (!strncmp(desc_name, "syscall_exit_", + strlen("syscall_exit_"))) { + desc_name += strlen("syscall_exit_"); + } else if (!strncmp(desc_name, "syscall_entry_", + strlen("syscall_entry_"))) { + desc_name += strlen("syscall_entry_"); + entry = true; + } else { + WARN_ON_ONCE(1); + return -EINVAL; + } + switch (enabler->event_param.u.syscall.entryexit) { + case LTTNG_KERNEL_SYSCALL_ENTRYEXIT: + break; + case LTTNG_KERNEL_SYSCALL_ENTRY: + if (!entry) + return 0; + break; + case LTTNG_KERNEL_SYSCALL_EXIT: + if (entry) + return 0; + break; + default: + return -EINVAL; + } + switch (enabler->event_param.u.syscall.abi) { + case LTTNG_KERNEL_SYSCALL_ABI_ALL: + break; + case LTTNG_KERNEL_SYSCALL_ABI_NATIVE: + if (compat) + return 0; + break; + case LTTNG_KERNEL_SYSCALL_ABI_COMPAT: + if (!compat) + return 0; + break; + default: + return -EINVAL; + } + switch (enabler->event_param.u.syscall.match) { + case LTTNG_SYSCALL_MATCH_NAME: + switch (enabler->type) { + case LTTNG_ENABLER_STAR_GLOB: + return lttng_match_enabler_star_glob(desc_name, enabler_name); + case LTTNG_ENABLER_NAME: + return lttng_match_enabler_name(desc_name, enabler_name); + default: + return -EINVAL; + } + break; + case LTTNG_SYSCALL_MATCH_NR: + return -EINVAL; /* Not implemented. */ + default: + return -EINVAL; + } + break; + default: + WARN_ON_ONCE(1); + return -EINVAL; + } +} + +static +int lttng_event_match_enabler(struct lttng_event *event, + struct lttng_enabler *enabler) +{ + if (enabler->event_param.instrumentation != event->instrumentation) + return 0; + if (lttng_desc_match_enabler(event->desc, enabler) + && event->chan == enabler->chan) + return 1; + else + return 0; +} + +static +struct lttng_enabler_ref *lttng_event_enabler_ref(struct lttng_event *event, + struct lttng_enabler *enabler) +{ + struct lttng_enabler_ref *enabler_ref; + + list_for_each_entry(enabler_ref, + &event->enablers_ref_head, node) { + if (enabler_ref->ref == enabler) + return enabler_ref; + } + return NULL; +} + +static +void lttng_create_tracepoint_if_missing(struct lttng_enabler *enabler) +{ + struct lttng_session *session = enabler->chan->session; + struct lttng_probe_desc *probe_desc; + const struct lttng_event_desc *desc; + int i; + struct list_head *probe_list; + + probe_list = lttng_get_probe_list_head(); + /* + * For each probe event, if we find that a probe event matches + * our enabler, create an associated lttng_event if not + * already present. + */ + list_for_each_entry(probe_desc, probe_list, head) { + for (i = 0; i < probe_desc->nr_events; i++) { + int found = 0; + struct hlist_head *head; + const char *event_name; + size_t name_len; + uint32_t hash; + struct lttng_event *event; + + desc = probe_desc->event_desc[i]; + if (!lttng_desc_match_enabler(desc, enabler)) + continue; + event_name = desc->name; + name_len = strlen(event_name); + + /* + * Check if already created. + */ + hash = jhash(event_name, name_len, 0); + head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)]; + lttng_hlist_for_each_entry(event, head, hlist) { + if (event->desc == desc + && event->chan == enabler->chan) + found = 1; + } + if (found) + continue; + + /* + * We need to create an event for this + * event probe. + */ + event = _lttng_event_create(enabler->chan, + NULL, NULL, desc, + LTTNG_KERNEL_TRACEPOINT); + if (!event) { + printk(KERN_INFO "Unable to create event %s\n", + probe_desc->event_desc[i]->name); + } + } + } +} + +static +void lttng_create_syscall_if_missing(struct lttng_enabler *enabler) +{ + int ret; + + ret = lttng_syscalls_register(enabler->chan, NULL); + WARN_ON_ONCE(ret); +} + +/* + * Create struct lttng_event if it is missing and present in the list of + * tracepoint probes. + * Should be called with sessions mutex held. + */ +static +void lttng_create_event_if_missing(struct lttng_enabler *enabler) +{ + switch (enabler->event_param.instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + lttng_create_tracepoint_if_missing(enabler); + break; + case LTTNG_KERNEL_SYSCALL: + lttng_create_syscall_if_missing(enabler); + break; + default: + WARN_ON_ONCE(1); + break; + } +} + +/* + * Create events associated with an enabler (if not already present), + * and add backward reference from the event to the enabler. + * Should be called with sessions mutex held. + */ +static +int lttng_enabler_ref_events(struct lttng_enabler *enabler) +{ + struct lttng_channel *chan = enabler->chan; + struct lttng_session *session = chan->session; + struct lttng_event *event; + + if (enabler->event_param.instrumentation == LTTNG_KERNEL_SYSCALL && + enabler->event_param.u.syscall.entryexit == LTTNG_KERNEL_SYSCALL_ENTRYEXIT && + enabler->event_param.u.syscall.abi == LTTNG_KERNEL_SYSCALL_ABI_ALL && + enabler->event_param.u.syscall.match == LTTNG_SYSCALL_MATCH_NAME && + !strcmp(enabler->event_param.name, "*")) { + if (enabler->enabled) + WRITE_ONCE(chan->syscall_all, 1); + else + WRITE_ONCE(chan->syscall_all, 0); + } + + /* First ensure that probe events are created for this enabler. */ + lttng_create_event_if_missing(enabler); + + /* For each event matching enabler in session event list. */ + list_for_each_entry(event, &session->events, list) { + struct lttng_enabler_ref *enabler_ref; + + if (!lttng_event_match_enabler(event, enabler)) + continue; + enabler_ref = lttng_event_enabler_ref(event, enabler); + if (!enabler_ref) { + /* + * If no backward ref, create it. + * Add backward ref from event to enabler. + */ + enabler_ref = kzalloc(sizeof(*enabler_ref), GFP_KERNEL); + if (!enabler_ref) + return -ENOMEM; + enabler_ref->ref = enabler; + list_add(&enabler_ref->node, + &event->enablers_ref_head); + } + + /* + * Link filter bytecodes if not linked yet. + */ + lttng_enabler_event_link_bytecode(event, enabler); + + /* TODO: merge event context. */ + } + return 0; +} + +/* + * Called at module load: connect the probe on all enablers matching + * this event. + * Called with sessions lock held. + */ +int lttng_fix_pending_events(void) +{ + struct lttng_session *session; + + list_for_each_entry(session, &sessions, list) + lttng_session_lazy_sync_enablers(session); + return 0; +} + +struct lttng_enabler *lttng_enabler_create(enum lttng_enabler_type type, + struct lttng_kernel_event *event_param, + struct lttng_channel *chan) +{ + struct lttng_enabler *enabler; + + enabler = kzalloc(sizeof(*enabler), GFP_KERNEL); + if (!enabler) + return NULL; + enabler->type = type; + INIT_LIST_HEAD(&enabler->filter_bytecode_head); + memcpy(&enabler->event_param, event_param, + sizeof(enabler->event_param)); + enabler->chan = chan; + /* ctx left NULL */ + enabler->enabled = 0; + enabler->evtype = LTTNG_TYPE_ENABLER; + mutex_lock(&sessions_mutex); + list_add(&enabler->node, &enabler->chan->session->enablers_head); + lttng_session_lazy_sync_enablers(enabler->chan->session); + mutex_unlock(&sessions_mutex); + return enabler; +} + +int lttng_enabler_enable(struct lttng_enabler *enabler) +{ + mutex_lock(&sessions_mutex); + enabler->enabled = 1; + lttng_session_lazy_sync_enablers(enabler->chan->session); + mutex_unlock(&sessions_mutex); + return 0; +} + +int lttng_enabler_disable(struct lttng_enabler *enabler) +{ + mutex_lock(&sessions_mutex); + enabler->enabled = 0; + lttng_session_lazy_sync_enablers(enabler->chan->session); + mutex_unlock(&sessions_mutex); + return 0; +} + +int lttng_enabler_attach_bytecode(struct lttng_enabler *enabler, + struct lttng_kernel_filter_bytecode __user *bytecode) +{ + struct lttng_filter_bytecode_node *bytecode_node; + uint32_t bytecode_len; + int ret; + + ret = get_user(bytecode_len, &bytecode->len); + if (ret) + return ret; + bytecode_node = kzalloc(sizeof(*bytecode_node) + bytecode_len, + GFP_KERNEL); + if (!bytecode_node) + return -ENOMEM; + ret = copy_from_user(&bytecode_node->bc, bytecode, + sizeof(*bytecode) + bytecode_len); + if (ret) + goto error_free; + bytecode_node->enabler = enabler; + /* Enforce length based on allocated size */ + bytecode_node->bc.len = bytecode_len; + list_add_tail(&bytecode_node->node, &enabler->filter_bytecode_head); + lttng_session_lazy_sync_enablers(enabler->chan->session); + return 0; + +error_free: + kfree(bytecode_node); + return ret; +} + +int lttng_event_add_callsite(struct lttng_event *event, + struct lttng_kernel_event_callsite __user *callsite) +{ + + switch (event->instrumentation) { + case LTTNG_KERNEL_UPROBE: + return lttng_uprobes_add_callsite(event, callsite); + default: + return -EINVAL; + } +} + +int lttng_enabler_attach_context(struct lttng_enabler *enabler, + struct lttng_kernel_context *context_param) +{ + return -ENOSYS; +} + +static +void lttng_enabler_destroy(struct lttng_enabler *enabler) +{ + struct lttng_filter_bytecode_node *filter_node, *tmp_filter_node; + + /* Destroy filter bytecode */ + list_for_each_entry_safe(filter_node, tmp_filter_node, + &enabler->filter_bytecode_head, node) { + kfree(filter_node); + } + + /* Destroy contexts */ + lttng_destroy_context(enabler->ctx); + + list_del(&enabler->node); + kfree(enabler); +} + +/* + * lttng_session_sync_enablers should be called just before starting a + * session. + * Should be called with sessions mutex held. + */ +static +void lttng_session_sync_enablers(struct lttng_session *session) +{ + struct lttng_enabler *enabler; + struct lttng_event *event; + + list_for_each_entry(enabler, &session->enablers_head, node) + lttng_enabler_ref_events(enabler); + /* + * For each event, if at least one of its enablers is enabled, + * and its channel and session transient states are enabled, we + * enable the event, else we disable it. + */ + list_for_each_entry(event, &session->events, list) { + struct lttng_enabler_ref *enabler_ref; + struct lttng_bytecode_runtime *runtime; + int enabled = 0, has_enablers_without_bytecode = 0; + + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + case LTTNG_KERNEL_SYSCALL: + /* Enable events */ + list_for_each_entry(enabler_ref, + &event->enablers_ref_head, node) { + if (enabler_ref->ref->enabled) { + enabled = 1; + break; + } + } + break; + default: + /* Not handled with lazy sync. */ + continue; + } + /* + * Enabled state is based on union of enablers, with + * intesection of session and channel transient enable + * states. + */ + enabled = enabled && session->tstate && event->chan->tstate; + + WRITE_ONCE(event->enabled, enabled); + /* + * Sync tracepoint registration with event enabled + * state. + */ + if (enabled) { + register_event(event); + } else { + _lttng_event_unregister(event); + } + + /* Check if has enablers without bytecode enabled */ + list_for_each_entry(enabler_ref, + &event->enablers_ref_head, node) { + if (enabler_ref->ref->enabled + && list_empty(&enabler_ref->ref->filter_bytecode_head)) { + has_enablers_without_bytecode = 1; + break; + } + } + event->has_enablers_without_bytecode = + has_enablers_without_bytecode; + + /* Enable filters */ + list_for_each_entry(runtime, + &event->bytecode_runtime_head, node) + lttng_filter_sync_state(runtime); + } +} + +/* + * Apply enablers to session events, adding events to session if need + * be. It is required after each modification applied to an active + * session, and right before session "start". + * "lazy" sync means we only sync if required. + * Should be called with sessions mutex held. + */ +static +void lttng_session_lazy_sync_enablers(struct lttng_session *session) +{ + /* We can skip if session is not active */ + if (!session->active) + return; + lttng_session_sync_enablers(session); +} + +/* + * Serialize at most one packet worth of metadata into a metadata + * channel. + * We grab the metadata cache mutex to get exclusive access to our metadata + * buffer and to the metadata cache. Exclusive access to the metadata buffer + * allows us to do racy operations such as looking for remaining space left in + * packet and write, since mutual exclusion protects us from concurrent writes. + * Mutual exclusion on the metadata cache allow us to read the cache content + * without racing against reallocation of the cache by updates. + * Returns the number of bytes written in the channel, 0 if no data + * was written and a negative value on error. + */ +int lttng_metadata_output_channel(struct lttng_metadata_stream *stream, + struct channel *chan, bool *coherent) +{ + struct lib_ring_buffer_ctx ctx; + int ret = 0; + size_t len, reserve_len; + + /* + * Ensure we support mutiple get_next / put sequences followed by + * put_next. The metadata cache lock protects reading the metadata + * cache. It can indeed be read concurrently by "get_next_subbuf" and + * "flush" operations on the buffer invoked by different processes. + * Moreover, since the metadata cache memory can be reallocated, we + * need to have exclusive access against updates even though we only + * read it. + */ + mutex_lock(&stream->metadata_cache->lock); + WARN_ON(stream->metadata_in < stream->metadata_out); + if (stream->metadata_in != stream->metadata_out) + goto end; + + /* Metadata regenerated, change the version. */ + if (stream->metadata_cache->version != stream->version) + stream->version = stream->metadata_cache->version; + + len = stream->metadata_cache->metadata_written - + stream->metadata_in; + if (!len) + goto end; + reserve_len = min_t(size_t, + stream->transport->ops.packet_avail_size(chan), + len); + lib_ring_buffer_ctx_init(&ctx, chan, NULL, reserve_len, + sizeof(char), -1); + /* + * If reservation failed, return an error to the caller. + */ + ret = stream->transport->ops.event_reserve(&ctx, 0); + if (ret != 0) { + printk(KERN_WARNING "LTTng: Metadata event reservation failed\n"); + stream->coherent = false; + goto end; + } + stream->transport->ops.event_write(&ctx, + stream->metadata_cache->data + stream->metadata_in, + reserve_len); + stream->transport->ops.event_commit(&ctx); + stream->metadata_in += reserve_len; + if (reserve_len < len) + stream->coherent = false; + else + stream->coherent = true; + ret = reserve_len; + +end: + if (coherent) + *coherent = stream->coherent; + mutex_unlock(&stream->metadata_cache->lock); + return ret; +} + +static +void lttng_metadata_begin(struct lttng_session *session) +{ + if (atomic_inc_return(&session->metadata_cache->producing) == 1) + mutex_lock(&session->metadata_cache->lock); +} + +static +void lttng_metadata_end(struct lttng_session *session) +{ + WARN_ON_ONCE(!atomic_read(&session->metadata_cache->producing)); + if (atomic_dec_return(&session->metadata_cache->producing) == 0) { + struct lttng_metadata_stream *stream; + + list_for_each_entry(stream, &session->metadata_cache->metadata_stream, list) + wake_up_interruptible(&stream->read_wait); + mutex_unlock(&session->metadata_cache->lock); + } +} + +/* + * Write the metadata to the metadata cache. + * Must be called with sessions_mutex held. + * The metadata cache lock protects us from concurrent read access from + * thread outputting metadata content to ring buffer. + * The content of the printf is printed as a single atomic metadata + * transaction. + */ +int lttng_metadata_printf(struct lttng_session *session, + const char *fmt, ...) +{ + char *str; + size_t len; + va_list ap; + + WARN_ON_ONCE(!LTTNG_READ_ONCE(session->active)); + + va_start(ap, fmt); + str = kvasprintf(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!str) + return -ENOMEM; + + len = strlen(str); + WARN_ON_ONCE(!atomic_read(&session->metadata_cache->producing)); + if (session->metadata_cache->metadata_written + len > + session->metadata_cache->cache_alloc) { + char *tmp_cache_realloc; + unsigned int tmp_cache_alloc_size; + + tmp_cache_alloc_size = max_t(unsigned int, + session->metadata_cache->cache_alloc + len, + session->metadata_cache->cache_alloc << 1); + tmp_cache_realloc = lttng_vzalloc(tmp_cache_alloc_size); + if (!tmp_cache_realloc) + goto err; + if (session->metadata_cache->data) { + memcpy(tmp_cache_realloc, + session->metadata_cache->data, + session->metadata_cache->cache_alloc); + vfree(session->metadata_cache->data); + } + + session->metadata_cache->cache_alloc = tmp_cache_alloc_size; + session->metadata_cache->data = tmp_cache_realloc; + } + memcpy(session->metadata_cache->data + + session->metadata_cache->metadata_written, + str, len); + session->metadata_cache->metadata_written += len; + kfree(str); + + return 0; + +err: + kfree(str); + return -ENOMEM; +} + +static +int print_tabs(struct lttng_session *session, size_t nesting) +{ + size_t i; + + for (i = 0; i < nesting; i++) { + int ret; + + ret = lttng_metadata_printf(session, " "); + if (ret) { + return ret; + } + } + return 0; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_struct_type_statedump(struct lttng_session *session, + const struct lttng_type *type, + size_t nesting) +{ + int ret; + uint32_t i, nr_fields; + + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "struct {\n"); + if (ret) + return ret; + nr_fields = type->u._struct.nr_fields; + for (i = 0; i < nr_fields; i++) { + const struct lttng_event_field *iter_field; + + iter_field = &type->u._struct.fields[i]; + ret = _lttng_field_statedump(session, iter_field, nesting + 1); + if (ret) + return ret; + } + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "}"); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_struct_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + int ret; + + ret = _lttng_struct_type_statedump(session, + &field->type, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "_%s;\n", + field->name); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_variant_type_statedump(struct lttng_session *session, + const struct lttng_type *type, + size_t nesting) +{ + int ret; + uint32_t i, nr_choices; + + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "variant <_%s> {\n", + type->u.variant.tag_name); + if (ret) + return ret; + nr_choices = type->u.variant.nr_choices; + for (i = 0; i < nr_choices; i++) { + const struct lttng_event_field *iter_field; + + iter_field = &type->u.variant.choices[i]; + ret = _lttng_field_statedump(session, iter_field, nesting + 1); + if (ret) + return ret; + } + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "}"); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_variant_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + int ret; + + ret = _lttng_variant_type_statedump(session, + &field->type, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "_%s;\n", + field->name); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_array_compound_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + int ret; + const struct lttng_type *elem_type; + + /* Only array of structures and variants are currently supported. */ + elem_type = field->type.u.array_compound.elem_type; + switch (elem_type->atype) { + case atype_struct: + ret = _lttng_struct_type_statedump(session, elem_type, nesting); + if (ret) + return ret; + break; + case atype_variant: + ret = _lttng_variant_type_statedump(session, elem_type, nesting); + if (ret) + return ret; + break; + default: + return -EINVAL; + } + ret = lttng_metadata_printf(session, + " _%s[%u];\n", + field->name, + field->type.u.array_compound.length); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_sequence_compound_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + int ret; + const char *length_name; + const struct lttng_type *elem_type; + + length_name = field->type.u.sequence_compound.length_name; + + /* Only array of structures and variants are currently supported. */ + elem_type = field->type.u.sequence_compound.elem_type; + switch (elem_type->atype) { + case atype_struct: + ret = _lttng_struct_type_statedump(session, elem_type, nesting); + if (ret) + return ret; + break; + case atype_variant: + ret = _lttng_variant_type_statedump(session, elem_type, nesting); + if (ret) + return ret; + break; + default: + return -EINVAL; + } + ret = lttng_metadata_printf(session, + " _%s[ _%s ];\n", + field->name, + length_name); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_enum_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + const struct lttng_enum_desc *enum_desc; + const struct lttng_integer_type *container_type; + int ret; + unsigned int i, nr_entries; + + enum_desc = field->type.u.basic.enumeration.desc; + container_type = &field->type.u.basic.enumeration.container_type; + nr_entries = enum_desc->nr_entries; + + ret = print_tabs(session, nesting); + if (ret) + goto end; + ret = lttng_metadata_printf(session, + "enum : integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } {\n", + container_type->size, + container_type->alignment, + container_type->signedness, + (container_type->encoding == lttng_encode_none) + ? "none" + : (container_type->encoding == lttng_encode_UTF8) + ? "UTF8" + : "ASCII", + container_type->base, +#if __BYTE_ORDER == __BIG_ENDIAN + container_type->reverse_byte_order ? " byte_order = le;" : "" +#else + container_type->reverse_byte_order ? " byte_order = be;" : "" +#endif + ); + if (ret) + goto end; + /* Dump all entries */ + for (i = 0; i < nr_entries; i++) { + const struct lttng_enum_entry *entry = &enum_desc->entries[i]; + int j, len; + + ret = print_tabs(session, nesting + 1); + if (ret) + goto end; + ret = lttng_metadata_printf(session, + "\""); + if (ret) + goto end; + len = strlen(entry->string); + /* Escape the character '"' */ + for (j = 0; j < len; j++) { + char c = entry->string[j]; + + switch (c) { + case '"': + ret = lttng_metadata_printf(session, + "\\\""); + break; + case '\\': + ret = lttng_metadata_printf(session, + "\\\\"); + break; + default: + ret = lttng_metadata_printf(session, + "%c", c); + break; + } + if (ret) + goto end; + } + ret = lttng_metadata_printf(session, "\""); + if (ret) + goto end; + + if (entry->options.is_auto) { + ret = lttng_metadata_printf(session, ",\n"); + if (ret) + goto end; + } else { + ret = lttng_metadata_printf(session, + " = "); + if (ret) + goto end; + if (entry->start.signedness) + ret = lttng_metadata_printf(session, + "%lld", (long long) entry->start.value); + else + ret = lttng_metadata_printf(session, + "%llu", entry->start.value); + if (ret) + goto end; + if (entry->start.signedness == entry->end.signedness && + entry->start.value + == entry->end.value) { + ret = lttng_metadata_printf(session, + ",\n"); + } else { + if (entry->end.signedness) { + ret = lttng_metadata_printf(session, + " ... %lld,\n", + (long long) entry->end.value); + } else { + ret = lttng_metadata_printf(session, + " ... %llu,\n", + entry->end.value); + } + } + if (ret) + goto end; + } + } + ret = print_tabs(session, nesting); + if (ret) + goto end; + ret = lttng_metadata_printf(session, "} _%s;\n", + field->name); +end: + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_field_statedump(struct lttng_session *session, + const struct lttng_event_field *field, + size_t nesting) +{ + int ret = 0; + + switch (field->type.atype) { + case atype_integer: + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } _%s;\n", + field->type.u.basic.integer.size, + field->type.u.basic.integer.alignment, + field->type.u.basic.integer.signedness, + (field->type.u.basic.integer.encoding == lttng_encode_none) + ? "none" + : (field->type.u.basic.integer.encoding == lttng_encode_UTF8) + ? "UTF8" + : "ASCII", + field->type.u.basic.integer.base, +#if __BYTE_ORDER == __BIG_ENDIAN + field->type.u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", +#else + field->type.u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", +#endif + field->name); + break; + case atype_enum: + ret = _lttng_enum_statedump(session, field, nesting); + break; + case atype_array: + case atype_array_bitfield: + { + const struct lttng_basic_type *elem_type; + + elem_type = &field->type.u.array.elem_type; + if (field->type.u.array.elem_alignment) { + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "struct { } align(%u) _%s_padding;\n", + field->type.u.array.elem_alignment * CHAR_BIT, + field->name); + if (ret) + return ret; + } + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } _%s[%u];\n", + elem_type->u.basic.integer.size, + elem_type->u.basic.integer.alignment, + elem_type->u.basic.integer.signedness, + (elem_type->u.basic.integer.encoding == lttng_encode_none) + ? "none" + : (elem_type->u.basic.integer.encoding == lttng_encode_UTF8) + ? "UTF8" + : "ASCII", + elem_type->u.basic.integer.base, +#if __BYTE_ORDER == __BIG_ENDIAN + elem_type->u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", +#else + elem_type->u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", +#endif + field->name, field->type.u.array.length); + break; + } + case atype_sequence: + case atype_sequence_bitfield: + { + const struct lttng_basic_type *elem_type; + const struct lttng_basic_type *length_type; + + elem_type = &field->type.u.sequence.elem_type; + length_type = &field->type.u.sequence.length_type; + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } __%s_length;\n", + length_type->u.basic.integer.size, + (unsigned int) length_type->u.basic.integer.alignment, + length_type->u.basic.integer.signedness, + (length_type->u.basic.integer.encoding == lttng_encode_none) + ? "none" + : ((length_type->u.basic.integer.encoding == lttng_encode_UTF8) + ? "UTF8" + : "ASCII"), + length_type->u.basic.integer.base, +#if __BYTE_ORDER == __BIG_ENDIAN + length_type->u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", +#else + length_type->u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", +#endif + field->name); + if (ret) + return ret; + + if (field->type.u.sequence.elem_alignment) { + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "struct { } align(%u) _%s_padding;\n", + field->type.u.sequence.elem_alignment * CHAR_BIT, + field->name); + if (ret) + return ret; + } + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } _%s[ __%s_length ];\n", + elem_type->u.basic.integer.size, + (unsigned int) elem_type->u.basic.integer.alignment, + elem_type->u.basic.integer.signedness, + (elem_type->u.basic.integer.encoding == lttng_encode_none) + ? "none" + : ((elem_type->u.basic.integer.encoding == lttng_encode_UTF8) + ? "UTF8" + : "ASCII"), + elem_type->u.basic.integer.base, +#if __BYTE_ORDER == __BIG_ENDIAN + elem_type->u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", +#else + elem_type->u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", +#endif + field->name, + field->name); + break; + } + + case atype_string: + /* Default encoding is UTF8 */ + ret = print_tabs(session, nesting); + if (ret) + return ret; + ret = lttng_metadata_printf(session, + "string%s _%s;\n", + field->type.u.basic.string.encoding == lttng_encode_ASCII ? + " { encoding = ASCII; }" : "", + field->name); + break; + case atype_struct: + ret = _lttng_struct_statedump(session, field, nesting); + break; + case atype_array_compound: + ret = _lttng_array_compound_statedump(session, field, nesting); + break; + case atype_sequence_compound: + ret = _lttng_sequence_compound_statedump(session, field, nesting); + break; + case atype_variant: + ret = _lttng_variant_statedump(session, field, nesting); + break; + + default: + WARN_ON_ONCE(1); + return -EINVAL; + } + return ret; +} + +static +int _lttng_context_metadata_statedump(struct lttng_session *session, + struct lttng_ctx *ctx) +{ + int ret = 0; + int i; + + if (!ctx) + return 0; + for (i = 0; i < ctx->nr_fields; i++) { + const struct lttng_ctx_field *field = &ctx->fields[i]; + + ret = _lttng_field_statedump(session, &field->event_field, 2); + if (ret) + return ret; + } + return ret; +} + +static +int _lttng_fields_metadata_statedump(struct lttng_session *session, + struct lttng_event *event) +{ + const struct lttng_event_desc *desc = event->desc; + int ret = 0; + int i; + + for (i = 0; i < desc->nr_fields; i++) { + const struct lttng_event_field *field = &desc->fields[i]; + + ret = _lttng_field_statedump(session, field, 2); + if (ret) + return ret; + } + return ret; +} + +/* + * Must be called with sessions_mutex held. + * The entire event metadata is printed as a single atomic metadata + * transaction. + */ +static +int _lttng_event_metadata_statedump(struct lttng_session *session, + struct lttng_channel *chan, + struct lttng_event *event) +{ + int ret = 0; + + if (event->metadata_dumped || !LTTNG_READ_ONCE(session->active)) + return 0; + if (chan->channel_type == METADATA_CHANNEL) + return 0; + + lttng_metadata_begin(session); + + ret = lttng_metadata_printf(session, + "event {\n" + " name = \"%s\";\n" + " id = %u;\n" + " stream_id = %u;\n", + event->desc->name, + event->id, + event->chan->id); + if (ret) + goto end; + + if (event->ctx) { + ret = lttng_metadata_printf(session, + " context := struct {\n"); + if (ret) + goto end; + } + ret = _lttng_context_metadata_statedump(session, event->ctx); + if (ret) + goto end; + if (event->ctx) { + ret = lttng_metadata_printf(session, + " };\n"); + if (ret) + goto end; + } + + ret = lttng_metadata_printf(session, + " fields := struct {\n" + ); + if (ret) + goto end; + + ret = _lttng_fields_metadata_statedump(session, event); + if (ret) + goto end; + + /* + * LTTng space reservation can only reserve multiples of the + * byte size. + */ + ret = lttng_metadata_printf(session, + " };\n" + "};\n\n"); + if (ret) + goto end; + + event->metadata_dumped = 1; +end: + lttng_metadata_end(session); + return ret; + +} + +/* + * Must be called with sessions_mutex held. + * The entire channel metadata is printed as a single atomic metadata + * transaction. + */ +static +int _lttng_channel_metadata_statedump(struct lttng_session *session, + struct lttng_channel *chan) +{ + int ret = 0; + + if (chan->metadata_dumped || !LTTNG_READ_ONCE(session->active)) + return 0; + + if (chan->channel_type == METADATA_CHANNEL) + return 0; + + lttng_metadata_begin(session); + + WARN_ON_ONCE(!chan->header_type); + ret = lttng_metadata_printf(session, + "stream {\n" + " id = %u;\n" + " event.header := %s;\n" + " packet.context := struct packet_context;\n", + chan->id, + chan->header_type == 1 ? "struct event_header_compact" : + "struct event_header_large"); + if (ret) + goto end; + + if (chan->ctx) { + ret = lttng_metadata_printf(session, + " event.context := struct {\n"); + if (ret) + goto end; + } + ret = _lttng_context_metadata_statedump(session, chan->ctx); + if (ret) + goto end; + if (chan->ctx) { + ret = lttng_metadata_printf(session, + " };\n"); + if (ret) + goto end; + } + + ret = lttng_metadata_printf(session, + "};\n\n"); + + chan->metadata_dumped = 1; +end: + lttng_metadata_end(session); + return ret; +} + +/* + * Must be called with sessions_mutex held. + */ +static +int _lttng_stream_packet_context_declare(struct lttng_session *session) +{ + return lttng_metadata_printf(session, + "struct packet_context {\n" + " uint64_clock_monotonic_t timestamp_begin;\n" + " uint64_clock_monotonic_t timestamp_end;\n" + " uint64_t content_size;\n" + " uint64_t packet_size;\n" + " uint64_t packet_seq_num;\n" + " unsigned long events_discarded;\n" + " uint32_t cpu_id;\n" + "};\n\n" + ); +} + +/* + * Compact header: + * id: range: 0 - 30. + * id 31 is reserved to indicate an extended header. + * + * Large header: + * id: range: 0 - 65534. + * id 65535 is reserved to indicate an extended header. + * + * Must be called with sessions_mutex held. + */ +static +int _lttng_event_header_declare(struct lttng_session *session) +{ + return lttng_metadata_printf(session, + "struct event_header_compact {\n" + " enum : uint5_t { compact = 0 ... 30, extended = 31 } id;\n" + " variant {\n" + " struct {\n" + " uint27_clock_monotonic_t timestamp;\n" + " } compact;\n" + " struct {\n" + " uint32_t id;\n" + " uint64_clock_monotonic_t timestamp;\n" + " } extended;\n" + " } v;\n" + "} align(%u);\n" + "\n" + "struct event_header_large {\n" + " enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id;\n" + " variant {\n" + " struct {\n" + " uint32_clock_monotonic_t timestamp;\n" + " } compact;\n" + " struct {\n" + " uint32_t id;\n" + " uint64_clock_monotonic_t timestamp;\n" + " } extended;\n" + " } v;\n" + "} align(%u);\n\n", + lttng_alignof(uint32_t) * CHAR_BIT, + lttng_alignof(uint16_t) * CHAR_BIT + ); +} + + /* + * Approximation of NTP time of day to clock monotonic correlation, + * taken at start of trace. + * Yes, this is only an approximation. Yes, we can (and will) do better + * in future versions. + * This function may return a negative offset. It may happen if the + * system sets the REALTIME clock to 0 after boot. + * + * Use 64bit timespec on kernels that have it, this makes 32bit arch + * y2038 compliant. + */ +static +int64_t measure_clock_offset(void) +{ + uint64_t monotonic_avg, monotonic[2], realtime; + uint64_t tcf = trace_clock_freq(); + int64_t offset; + unsigned long flags; +#ifdef LTTNG_KERNEL_HAS_TIMESPEC64 + struct timespec64 rts = { 0, 0 }; +#else + struct timespec rts = { 0, 0 }; +#endif + + /* Disable interrupts to increase correlation precision. */ + local_irq_save(flags); + monotonic[0] = trace_clock_read64(); +#ifdef LTTNG_KERNEL_HAS_TIMESPEC64 + ktime_get_real_ts64(&rts); +#else + getnstimeofday(&rts); +#endif + monotonic[1] = trace_clock_read64(); + local_irq_restore(flags); + + monotonic_avg = (monotonic[0] + monotonic[1]) >> 1; + realtime = (uint64_t) rts.tv_sec * tcf; + if (tcf == NSEC_PER_SEC) { + realtime += rts.tv_nsec; + } else { + uint64_t n = rts.tv_nsec * tcf; + + do_div(n, NSEC_PER_SEC); + realtime += n; + } + offset = (int64_t) realtime - monotonic_avg; + return offset; +} + +static +int print_escaped_ctf_string(struct lttng_session *session, const char *string) +{ + int ret; + size_t i; + char cur; + + i = 0; + cur = string[i]; + while (cur != '\0') { + switch (cur) { + case '\n': + ret = lttng_metadata_printf(session, "%s", "\\n"); + break; + case '\\': + case '"': + ret = lttng_metadata_printf(session, "%c", '\\'); + if (ret) + goto error; + /* We still print the current char */ + /* Fallthrough */ + default: + ret = lttng_metadata_printf(session, "%c", cur); + break; + } + + if (ret) + goto error; + + cur = string[++i]; + } +error: + return ret; +} + +static +int print_metadata_escaped_field(struct lttng_session *session, const char *field, + const char *field_value) +{ + int ret; + + ret = lttng_metadata_printf(session, " %s = \"", field); + if (ret) + goto error; + + ret = print_escaped_ctf_string(session, field_value); + if (ret) + goto error; + + ret = lttng_metadata_printf(session, "\";\n"); + +error: + return ret; +} + +/* + * Output metadata into this session's metadata buffers. + * Must be called with sessions_mutex held. + */ +static +int _lttng_session_metadata_statedump(struct lttng_session *session) +{ + unsigned char *uuid_c = session->uuid.b; + unsigned char uuid_s[37], clock_uuid_s[BOOT_ID_LEN]; + struct lttng_channel *chan; + struct lttng_event *event; + int ret = 0; + + if (!LTTNG_READ_ONCE(session->active)) + return 0; + + lttng_metadata_begin(session); + + if (session->metadata_dumped) + goto skip_session; + + snprintf(uuid_s, sizeof(uuid_s), + "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", + uuid_c[0], uuid_c[1], uuid_c[2], uuid_c[3], + uuid_c[4], uuid_c[5], uuid_c[6], uuid_c[7], + uuid_c[8], uuid_c[9], uuid_c[10], uuid_c[11], + uuid_c[12], uuid_c[13], uuid_c[14], uuid_c[15]); + + ret = lttng_metadata_printf(session, + "typealias integer { size = 8; align = %u; signed = false; } := uint8_t;\n" + "typealias integer { size = 16; align = %u; signed = false; } := uint16_t;\n" + "typealias integer { size = 32; align = %u; signed = false; } := uint32_t;\n" + "typealias integer { size = 64; align = %u; signed = false; } := uint64_t;\n" + "typealias integer { size = %u; align = %u; signed = false; } := unsigned long;\n" + "typealias integer { size = 5; align = 1; signed = false; } := uint5_t;\n" + "typealias integer { size = 27; align = 1; signed = false; } := uint27_t;\n" + "\n" + "trace {\n" + " major = %u;\n" + " minor = %u;\n" + " uuid = \"%s\";\n" + " byte_order = %s;\n" + " packet.header := struct {\n" + " uint32_t magic;\n" + " uint8_t uuid[16];\n" + " uint32_t stream_id;\n" + " uint64_t stream_instance_id;\n" + " };\n" + "};\n\n", + lttng_alignof(uint8_t) * CHAR_BIT, + lttng_alignof(uint16_t) * CHAR_BIT, + lttng_alignof(uint32_t) * CHAR_BIT, + lttng_alignof(uint64_t) * CHAR_BIT, + sizeof(unsigned long) * CHAR_BIT, + lttng_alignof(unsigned long) * CHAR_BIT, + CTF_SPEC_MAJOR, + CTF_SPEC_MINOR, + uuid_s, +#if __BYTE_ORDER == __BIG_ENDIAN + "be" +#else + "le" +#endif + ); + if (ret) + goto end; + + ret = lttng_metadata_printf(session, + "env {\n" + " hostname = \"%s\";\n" + " domain = \"kernel\";\n" + " sysname = \"%s\";\n" + " kernel_release = \"%s\";\n" + " kernel_version = \"%s\";\n" + " tracer_name = \"lttng-modules\";\n" + " tracer_major = %d;\n" + " tracer_minor = %d;\n" + " tracer_patchlevel = %d;\n" + " trace_buffering_scheme = \"global\";\n", + current->nsproxy->uts_ns->name.nodename, + utsname()->sysname, + utsname()->release, + utsname()->version, + LTTNG_MODULES_MAJOR_VERSION, + LTTNG_MODULES_MINOR_VERSION, + LTTNG_MODULES_PATCHLEVEL_VERSION + ); + if (ret) + goto end; + + ret = print_metadata_escaped_field(session, "trace_name", session->name); + if (ret) + goto end; + ret = print_metadata_escaped_field(session, "trace_creation_datetime", + session->creation_time); + if (ret) + goto end; + + /* Close env */ + ret = lttng_metadata_printf(session, "};\n\n"); + if (ret) + goto end; + + ret = lttng_metadata_printf(session, + "clock {\n" + " name = \"%s\";\n", + trace_clock_name() + ); + if (ret) + goto end; + + if (!trace_clock_uuid(clock_uuid_s)) { + ret = lttng_metadata_printf(session, + " uuid = \"%s\";\n", + clock_uuid_s + ); + if (ret) + goto end; + } + + ret = lttng_metadata_printf(session, + " description = \"%s\";\n" + " freq = %llu; /* Frequency, in Hz */\n" + " /* clock value offset from Epoch is: offset * (1/freq) */\n" + " offset = %lld;\n" + "};\n\n", + trace_clock_description(), + (unsigned long long) trace_clock_freq(), + (long long) measure_clock_offset() + ); + if (ret) + goto end; + + ret = lttng_metadata_printf(session, + "typealias integer {\n" + " size = 27; align = 1; signed = false;\n" + " map = clock.%s.value;\n" + "} := uint27_clock_monotonic_t;\n" + "\n" + "typealias integer {\n" + " size = 32; align = %u; signed = false;\n" + " map = clock.%s.value;\n" + "} := uint32_clock_monotonic_t;\n" + "\n" + "typealias integer {\n" + " size = 64; align = %u; signed = false;\n" + " map = clock.%s.value;\n" + "} := uint64_clock_monotonic_t;\n\n", + trace_clock_name(), + lttng_alignof(uint32_t) * CHAR_BIT, + trace_clock_name(), + lttng_alignof(uint64_t) * CHAR_BIT, + trace_clock_name() + ); + if (ret) + goto end; + + ret = _lttng_stream_packet_context_declare(session); + if (ret) + goto end; + + ret = _lttng_event_header_declare(session); + if (ret) + goto end; + +skip_session: + list_for_each_entry(chan, &session->chan, list) { + ret = _lttng_channel_metadata_statedump(session, chan); + if (ret) + goto end; + } + + list_for_each_entry(event, &session->events, list) { + ret = _lttng_event_metadata_statedump(session, event->chan, event); + if (ret) + goto end; + } + session->metadata_dumped = 1; +end: + lttng_metadata_end(session); + return ret; +} + +/** + * lttng_transport_register - LTT transport registration + * @transport: transport structure + * + * Registers a transport which can be used as output to extract the data out of + * LTTng. The module calling this registration function must ensure that no + * trap-inducing code will be executed by the transport functions. E.g. + * vmalloc_sync_mappings() must be called between a vmalloc and the moment the memory + * is made visible to the transport function. This registration acts as a + * vmalloc_sync_mappings. Therefore, only if the module allocates virtual memory + * after its registration must it synchronize the TLBs. + */ +void lttng_transport_register(struct lttng_transport *transport) +{ + /* + * Make sure no page fault can be triggered by the module about to be + * registered. We deal with this here so we don't have to call + * vmalloc_sync_mappings() in each module's init. + */ + wrapper_vmalloc_sync_mappings(); + + mutex_lock(&sessions_mutex); + list_add_tail(&transport->node, <tng_transport_list); + mutex_unlock(&sessions_mutex); +} +EXPORT_SYMBOL_GPL(lttng_transport_register); + +/** + * lttng_transport_unregister - LTT transport unregistration + * @transport: transport structure + */ +void lttng_transport_unregister(struct lttng_transport *transport) +{ + mutex_lock(&sessions_mutex); + list_del(&transport->node); + mutex_unlock(&sessions_mutex); +} +EXPORT_SYMBOL_GPL(lttng_transport_unregister); + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + +enum cpuhp_state lttng_hp_prepare; +enum cpuhp_state lttng_hp_online; + +static int lttng_hotplug_prepare(unsigned int cpu, struct hlist_node *node) +{ + struct lttng_cpuhp_node *lttng_node; + + lttng_node = container_of(node, struct lttng_cpuhp_node, node); + switch (lttng_node->component) { + case LTTNG_RING_BUFFER_FRONTEND: + return 0; + case LTTNG_RING_BUFFER_BACKEND: + return lttng_cpuhp_rb_backend_prepare(cpu, lttng_node); + case LTTNG_RING_BUFFER_ITER: + return 0; + case LTTNG_CONTEXT_PERF_COUNTERS: + return 0; + default: + return -EINVAL; + } +} + +static int lttng_hotplug_dead(unsigned int cpu, struct hlist_node *node) +{ + struct lttng_cpuhp_node *lttng_node; + + lttng_node = container_of(node, struct lttng_cpuhp_node, node); + switch (lttng_node->component) { + case LTTNG_RING_BUFFER_FRONTEND: + return lttng_cpuhp_rb_frontend_dead(cpu, lttng_node); + case LTTNG_RING_BUFFER_BACKEND: + return 0; + case LTTNG_RING_BUFFER_ITER: + return 0; + case LTTNG_CONTEXT_PERF_COUNTERS: + return lttng_cpuhp_perf_counter_dead(cpu, lttng_node); + default: + return -EINVAL; + } +} + +static int lttng_hotplug_online(unsigned int cpu, struct hlist_node *node) +{ + struct lttng_cpuhp_node *lttng_node; + + lttng_node = container_of(node, struct lttng_cpuhp_node, node); + switch (lttng_node->component) { + case LTTNG_RING_BUFFER_FRONTEND: + return lttng_cpuhp_rb_frontend_online(cpu, lttng_node); + case LTTNG_RING_BUFFER_BACKEND: + return 0; + case LTTNG_RING_BUFFER_ITER: + return lttng_cpuhp_rb_iter_online(cpu, lttng_node); + case LTTNG_CONTEXT_PERF_COUNTERS: + return lttng_cpuhp_perf_counter_online(cpu, lttng_node); + default: + return -EINVAL; + } +} + +static int lttng_hotplug_offline(unsigned int cpu, struct hlist_node *node) +{ + struct lttng_cpuhp_node *lttng_node; + + lttng_node = container_of(node, struct lttng_cpuhp_node, node); + switch (lttng_node->component) { + case LTTNG_RING_BUFFER_FRONTEND: + return lttng_cpuhp_rb_frontend_offline(cpu, lttng_node); + case LTTNG_RING_BUFFER_BACKEND: + return 0; + case LTTNG_RING_BUFFER_ITER: + return 0; + case LTTNG_CONTEXT_PERF_COUNTERS: + return 0; + default: + return -EINVAL; + } +} + +static int __init lttng_init_cpu_hotplug(void) +{ + int ret; + + ret = cpuhp_setup_state_multi(CPUHP_BP_PREPARE_DYN, "lttng:prepare", + lttng_hotplug_prepare, + lttng_hotplug_dead); + if (ret < 0) { + return ret; + } + lttng_hp_prepare = ret; + lttng_rb_set_hp_prepare(ret); + + ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "lttng:online", + lttng_hotplug_online, + lttng_hotplug_offline); + if (ret < 0) { + cpuhp_remove_multi_state(lttng_hp_prepare); + lttng_hp_prepare = 0; + return ret; + } + lttng_hp_online = ret; + lttng_rb_set_hp_online(ret); + + return 0; +} + +static void __exit lttng_exit_cpu_hotplug(void) +{ + lttng_rb_set_hp_online(0); + cpuhp_remove_multi_state(lttng_hp_online); + lttng_rb_set_hp_prepare(0); + cpuhp_remove_multi_state(lttng_hp_prepare); +} + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ +static int lttng_init_cpu_hotplug(void) +{ + return 0; +} +static void lttng_exit_cpu_hotplug(void) +{ +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */ + + +static int __init lttng_events_init(void) +{ + int ret; + + ret = wrapper_lttng_fixup_sig(THIS_MODULE); + if (ret) + return ret; + ret = wrapper_get_pfnblock_flags_mask_init(); + if (ret) + return ret; + ret = wrapper_get_pageblock_flags_mask_init(); + if (ret) + return ret; + ret = lttng_probes_init(); + if (ret) + return ret; + ret = lttng_context_init(); + if (ret) + return ret; + ret = lttng_tracepoint_init(); + if (ret) + goto error_tp; + event_cache = KMEM_CACHE(lttng_event, 0); + if (!event_cache) { + ret = -ENOMEM; + goto error_kmem; + } + ret = lttng_abi_init(); + if (ret) + goto error_abi; + ret = lttng_logger_init(); + if (ret) + goto error_logger; + ret = lttng_init_cpu_hotplug(); + if (ret) + goto error_hotplug; + printk(KERN_NOTICE "LTTng: Loaded modules v%s.%s.%s%s (%s)%s%s\n", + __stringify(LTTNG_MODULES_MAJOR_VERSION), + __stringify(LTTNG_MODULES_MINOR_VERSION), + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION), + LTTNG_MODULES_EXTRAVERSION, + LTTNG_VERSION_NAME, +#ifdef LTTNG_EXTRA_VERSION_GIT + LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT, +#else + "", +#endif +#ifdef LTTNG_EXTRA_VERSION_NAME + LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME); +#else + ""); +#endif + return 0; + +error_hotplug: + lttng_logger_exit(); +error_logger: + lttng_abi_exit(); +error_abi: + kmem_cache_destroy(event_cache); +error_kmem: + lttng_tracepoint_exit(); +error_tp: + lttng_context_exit(); + printk(KERN_NOTICE "LTTng: Failed to load modules v%s.%s.%s%s (%s)%s%s\n", + __stringify(LTTNG_MODULES_MAJOR_VERSION), + __stringify(LTTNG_MODULES_MINOR_VERSION), + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION), + LTTNG_MODULES_EXTRAVERSION, + LTTNG_VERSION_NAME, +#ifdef LTTNG_EXTRA_VERSION_GIT + LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT, +#else + "", +#endif +#ifdef LTTNG_EXTRA_VERSION_NAME + LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME); +#else + ""); +#endif + return ret; +} + +module_init(lttng_events_init); + +static void __exit lttng_events_exit(void) +{ + struct lttng_session *session, *tmpsession; + + lttng_exit_cpu_hotplug(); + lttng_logger_exit(); + lttng_abi_exit(); + list_for_each_entry_safe(session, tmpsession, &sessions, list) + lttng_session_destroy(session); + kmem_cache_destroy(event_cache); + lttng_tracepoint_exit(); + lttng_context_exit(); + printk(KERN_NOTICE "LTTng: Unloaded modules v%s.%s.%s%s (%s)%s%s\n", + __stringify(LTTNG_MODULES_MAJOR_VERSION), + __stringify(LTTNG_MODULES_MINOR_VERSION), + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION), + LTTNG_MODULES_EXTRAVERSION, + LTTNG_VERSION_NAME, +#ifdef LTTNG_EXTRA_VERSION_GIT + LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT, +#else + "", +#endif +#ifdef LTTNG_EXTRA_VERSION_NAME + LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME); +#else + ""); +#endif +} + +module_exit(lttng_events_exit); + +#include "extra_version/patches.i" +#ifdef LTTNG_EXTRA_VERSION_GIT +MODULE_INFO(extra_version_git, LTTNG_EXTRA_VERSION_GIT); +#endif +#ifdef LTTNG_EXTRA_VERSION_NAME +MODULE_INFO(extra_version_name, LTTNG_EXTRA_VERSION_NAME); +#endif +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng tracer"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lttng-events.h b/ltt/lttng-2.11.0/lttng-events.h new file mode 100644 index 000000000000..099fd78b922c --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-events.h @@ -0,0 +1,894 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-events.h + * + * Holds LTTng per-session event registry. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_EVENTS_H +#define _LTTNG_EVENTS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define lttng_is_signed_type(type) (((type)(-1)) < 0) + +struct lttng_channel; +struct lttng_session; +struct lttng_metadata_cache; +struct lib_ring_buffer_ctx; +struct perf_event; +struct perf_event_attr; +struct lib_ring_buffer_config; + +/* Type description */ + +enum abstract_types { + atype_integer, + atype_enum, + atype_array, + atype_sequence, + atype_string, + atype_struct, + atype_array_compound, /* Array of compound types. */ + atype_sequence_compound, /* Sequence of compound types. */ + atype_variant, + atype_array_bitfield, + atype_sequence_bitfield, + NR_ABSTRACT_TYPES, +}; + +enum lttng_string_encodings { + lttng_encode_none = 0, + lttng_encode_UTF8 = 1, + lttng_encode_ASCII = 2, + NR_STRING_ENCODINGS, +}; + +enum channel_type { + PER_CPU_CHANNEL, + METADATA_CHANNEL, +}; + +struct lttng_enum_value { + unsigned long long value; + unsigned int signedness:1; +}; + +struct lttng_enum_entry { + struct lttng_enum_value start, end; /* start and end are inclusive */ + const char *string; + struct { + unsigned int is_auto:1; + } options; +}; + +#define __type_integer(_type, _size, _alignment, _signedness, \ + _byte_order, _base, _encoding) \ + { \ + .atype = atype_integer, \ + .u.basic.integer = \ + { \ + .size = (_size) ? : sizeof(_type) * CHAR_BIT, \ + .alignment = (_alignment) ? : lttng_alignof(_type) * CHAR_BIT, \ + .signedness = (_signedness) >= 0 ? (_signedness) : lttng_is_signed_type(_type), \ + .reverse_byte_order = _byte_order != __BYTE_ORDER, \ + .base = _base, \ + .encoding = lttng_encode_##_encoding, \ + }, \ + } \ + +struct lttng_integer_type { + unsigned int size; /* in bits */ + unsigned short alignment; /* in bits */ + unsigned int signedness:1, + reverse_byte_order:1; + unsigned int base; /* 2, 8, 10, 16, for pretty print */ + enum lttng_string_encodings encoding; +}; + +union _lttng_basic_type { + struct lttng_integer_type integer; + struct { + const struct lttng_enum_desc *desc; /* Enumeration mapping */ + struct lttng_integer_type container_type; + } enumeration; + struct { + enum lttng_string_encodings encoding; + } string; +}; + +struct lttng_basic_type { + enum abstract_types atype; + union { + union _lttng_basic_type basic; + } u; +}; + +struct lttng_type { + enum abstract_types atype; + union { + union _lttng_basic_type basic; + struct { + struct lttng_basic_type elem_type; + unsigned int length; /* num. elems. */ + unsigned int elem_alignment; /* alignment override */ + } array; + struct { + struct lttng_basic_type length_type; + struct lttng_basic_type elem_type; + unsigned int elem_alignment; /* alignment override */ + } sequence; + struct { + uint32_t nr_fields; + struct lttng_event_field *fields; /* Array of fields. */ + } _struct; + struct { + struct lttng_type *elem_type; + unsigned int length; /* num. elems. */ + } array_compound; + struct { + struct lttng_type *elem_type; + const char *length_name; + } sequence_compound; + struct { + const char *tag_name; + struct lttng_event_field *choices; /* Array of fields. */ + uint32_t nr_choices; + } variant; + } u; +}; + +struct lttng_enum_desc { + const char *name; + const struct lttng_enum_entry *entries; + unsigned int nr_entries; +}; + +/* Event field description */ + +struct lttng_event_field { + const char *name; + struct lttng_type type; + unsigned int nowrite:1, /* do not write into trace */ + user:1; /* fetch from user-space */ +}; + +union lttng_ctx_value { + int64_t s64; + const char *str; + double d; +}; + +/* + * We need to keep this perf counter field separately from struct + * lttng_ctx_field because cpu hotplug needs fixed-location addresses. + */ +struct lttng_perf_counter_field { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + struct lttng_cpuhp_node cpuhp_prepare; + struct lttng_cpuhp_node cpuhp_online; +#else + struct notifier_block nb; + int hp_enable; +#endif + struct perf_event_attr *attr; + struct perf_event **e; /* per-cpu array */ +}; + +struct lttng_probe_ctx { + struct lttng_event *event; + uint8_t interruptible; +}; + +struct lttng_ctx_field { + struct lttng_event_field event_field; + size_t (*get_size)(size_t offset); + size_t (*get_size_arg)(size_t offset, struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan); + void (*record)(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan); + void (*get_value)(struct lttng_ctx_field *field, + struct lttng_probe_ctx *lttng_probe_ctx, + union lttng_ctx_value *value); + union { + struct lttng_perf_counter_field *perf_counter; + } u; + void (*destroy)(struct lttng_ctx_field *field); + /* + * Private data to keep state between get_size and record. + * User must perform its own synchronization to protect against + * concurrent and reentrant contexts. + */ + void *priv; +}; + +struct lttng_ctx { + struct lttng_ctx_field *fields; + unsigned int nr_fields; + unsigned int allocated_fields; + size_t largest_align; /* in bytes */ +}; + +struct lttng_event_desc { + const char *name; /* lttng-modules name */ + const char *kname; /* Linux kernel name (tracepoints) */ + void *probe_callback; + const struct lttng_event_ctx *ctx; /* context */ + const struct lttng_event_field *fields; /* event payload */ + unsigned int nr_fields; + struct module *owner; +}; + +struct lttng_probe_desc { + const char *provider; + const struct lttng_event_desc **event_desc; + unsigned int nr_events; + struct list_head head; /* chain registered probes */ + struct list_head lazy_init_head; + int lazy; /* lazy registration */ +}; + +struct lttng_krp; /* Kretprobe handling */ + +enum lttng_event_type { + LTTNG_TYPE_EVENT = 0, + LTTNG_TYPE_ENABLER = 1, +}; + +struct lttng_filter_bytecode_node { + struct list_head node; + struct lttng_enabler *enabler; + /* + * struct lttng_kernel_filter_bytecode has var. sized array, must be + * last field. + */ + struct lttng_kernel_filter_bytecode bc; +}; + +/* + * Filter return value masks. + */ +enum lttng_filter_ret { + LTTNG_FILTER_DISCARD = 0, + LTTNG_FILTER_RECORD_FLAG = (1ULL << 0), + /* Other bits are kept for future use. */ +}; + +struct lttng_bytecode_runtime { + /* Associated bytecode */ + struct lttng_filter_bytecode_node *bc; + uint64_t (*filter)(void *filter_data, struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data); + int link_failed; + struct list_head node; /* list of bytecode runtime in event */ + struct lttng_event *event; +}; + +/* + * Objects in a linked-list of enablers, owned by an event. + */ +struct lttng_enabler_ref { + struct list_head node; /* enabler ref list */ + struct lttng_enabler *ref; /* backward ref */ +}; + +struct lttng_uprobe_handler { + struct lttng_event *event; + loff_t offset; + struct uprobe_consumer up_consumer; + struct list_head node; +}; + +enum lttng_syscall_entryexit { + LTTNG_SYSCALL_ENTRY, + LTTNG_SYSCALL_EXIT, +}; + +enum lttng_syscall_abi { + LTTNG_SYSCALL_ABI_NATIVE, + LTTNG_SYSCALL_ABI_COMPAT, +}; + +/* + * lttng_event structure is referred to by the tracing fast path. It must be + * kept small. + */ +struct lttng_event { + enum lttng_event_type evtype; /* First field. */ + unsigned int id; + struct lttng_channel *chan; + int enabled; + const struct lttng_event_desc *desc; + void *filter; + struct lttng_ctx *ctx; + enum lttng_kernel_instrumentation instrumentation; + union { + struct { + struct kprobe kp; + char *symbol_name; + } kprobe; + struct { + struct lttng_krp *lttng_krp; + char *symbol_name; + } kretprobe; + struct { + struct inode *inode; + struct list_head head; + } uprobe; + struct { + char *syscall_name; + enum lttng_syscall_entryexit entryexit; + enum lttng_syscall_abi abi; + } syscall; + } u; + struct list_head list; /* Event list in session */ + unsigned int metadata_dumped:1; + + /* Backward references: list of lttng_enabler_ref (ref to enablers) */ + struct list_head enablers_ref_head; + struct hlist_node hlist; /* session ht of events */ + int registered; /* has reg'd tracepoint probe */ + /* list of struct lttng_bytecode_runtime, sorted by seqnum */ + struct list_head bytecode_runtime_head; + int has_enablers_without_bytecode; +}; + +enum lttng_enabler_type { + LTTNG_ENABLER_STAR_GLOB, + LTTNG_ENABLER_NAME, +}; + +/* + * Enabler field, within whatever object is enabling an event. Target of + * backward reference. + */ +struct lttng_enabler { + enum lttng_event_type evtype; /* First field. */ + + enum lttng_enabler_type type; + + struct list_head node; /* per-session list of enablers */ + /* head list of struct lttng_ust_filter_bytecode_node */ + struct list_head filter_bytecode_head; + + struct lttng_kernel_event event_param; + struct lttng_channel *chan; + struct lttng_ctx *ctx; + unsigned int enabled:1; +}; + +struct lttng_channel_ops { + struct channel *(*channel_create)(const char *name, + struct lttng_channel *lttng_chan, + void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval); + void (*channel_destroy)(struct channel *chan); + struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan); + int (*buffer_has_read_closed_stream)(struct channel *chan); + void (*buffer_read_close)(struct lib_ring_buffer *buf); + int (*event_reserve)(struct lib_ring_buffer_ctx *ctx, + uint32_t event_id); + void (*event_commit)(struct lib_ring_buffer_ctx *ctx); + void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src, + size_t len); + void (*event_write_from_user)(struct lib_ring_buffer_ctx *ctx, + const void *src, size_t len); + void (*event_memset)(struct lib_ring_buffer_ctx *ctx, + int c, size_t len); + void (*event_strcpy)(struct lib_ring_buffer_ctx *ctx, const char *src, + size_t len); + void (*event_strcpy_from_user)(struct lib_ring_buffer_ctx *ctx, + const char __user *src, size_t len); + /* + * packet_avail_size returns the available size in the current + * packet. Note that the size returned is only a hint, since it + * may change due to concurrent writes. + */ + size_t (*packet_avail_size)(struct channel *chan); + wait_queue_head_t *(*get_writer_buf_wait_queue)(struct channel *chan, int cpu); + wait_queue_head_t *(*get_hp_wait_queue)(struct channel *chan); + int (*is_finalized)(struct channel *chan); + int (*is_disabled)(struct channel *chan); + int (*timestamp_begin) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *timestamp_begin); + int (*timestamp_end) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *timestamp_end); + int (*events_discarded) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *events_discarded); + int (*content_size) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *content_size); + int (*packet_size) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *packet_size); + int (*stream_id) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *stream_id); + int (*current_timestamp) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *ts); + int (*sequence_number) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *seq); + int (*instance_id) (const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *id); +}; + +struct lttng_transport { + char *name; + struct module *owner; + struct list_head node; + struct lttng_channel_ops ops; +}; + +struct lttng_syscall_filter; + +#define LTTNG_EVENT_HT_BITS 12 +#define LTTNG_EVENT_HT_SIZE (1U << LTTNG_EVENT_HT_BITS) + +struct lttng_event_ht { + struct hlist_head table[LTTNG_EVENT_HT_SIZE]; +}; + +struct lttng_channel { + unsigned int id; + struct channel *chan; /* Channel buffers */ + int enabled; + struct lttng_ctx *ctx; + /* Event ID management */ + struct lttng_session *session; + struct file *file; /* File associated to channel */ + unsigned int free_event_id; /* Next event ID to allocate */ + struct list_head list; /* Channel list */ + struct lttng_channel_ops *ops; + struct lttng_transport *transport; + struct lttng_event **sc_table; /* for syscall tracing */ + struct lttng_event **compat_sc_table; + struct lttng_event **sc_exit_table; /* for syscall exit tracing */ + struct lttng_event **compat_sc_exit_table; + struct lttng_event *sc_unknown; /* for unknown syscalls */ + struct lttng_event *sc_compat_unknown; + struct lttng_event *sc_exit_unknown; + struct lttng_event *compat_sc_exit_unknown; + struct lttng_syscall_filter *sc_filter; + int header_type; /* 0: unset, 1: compact, 2: large */ + enum channel_type channel_type; + int syscall_all; + unsigned int metadata_dumped:1, + sys_enter_registered:1, + sys_exit_registered:1, + tstate:1; /* Transient enable state */ +}; + +struct lttng_metadata_stream { + void *priv; /* Ring buffer private data */ + struct lttng_metadata_cache *metadata_cache; + unsigned int metadata_in; /* Bytes read from the cache */ + unsigned int metadata_out; /* Bytes consumed from stream */ + int finalized; /* Has channel been finalized */ + wait_queue_head_t read_wait; /* Reader buffer-level wait queue */ + struct list_head list; /* Stream list */ + struct lttng_transport *transport; + uint64_t version; /* Current version of the metadata cache */ + bool coherent; /* Stream in a coherent state */ +}; + +#define LTTNG_DYNAMIC_LEN_STACK_SIZE 128 + +struct lttng_dynamic_len_stack { + size_t stack[LTTNG_DYNAMIC_LEN_STACK_SIZE]; + size_t offset; +}; + +DECLARE_PER_CPU(struct lttng_dynamic_len_stack, lttng_dynamic_len_stack); + +/* + * struct lttng_pid_tracker declared in header due to deferencing of *v + * in RCU_INITIALIZER(v). + */ +#define LTTNG_PID_HASH_BITS 6 +#define LTTNG_PID_TABLE_SIZE (1 << LTTNG_PID_HASH_BITS) + +struct lttng_pid_tracker { + struct hlist_head pid_hash[LTTNG_PID_TABLE_SIZE]; +}; + +struct lttng_pid_hash_node { + struct hlist_node hlist; + int pid; +}; + +struct lttng_session { + int active; /* Is trace session active ? */ + int been_active; /* Has trace session been active ? */ + struct file *file; /* File associated to session */ + struct list_head chan; /* Channel list head */ + struct list_head events; /* Event list head */ + struct list_head list; /* Session list */ + unsigned int free_chan_id; /* Next chan ID to allocate */ + uuid_le uuid; /* Trace session unique ID */ + struct lttng_metadata_cache *metadata_cache; + struct lttng_pid_tracker *pid_tracker; + unsigned int metadata_dumped:1, + tstate:1; /* Transient enable state */ + /* List of enablers */ + struct list_head enablers_head; + /* Hash table of events */ + struct lttng_event_ht events_ht; + char name[LTTNG_KERNEL_SESSION_NAME_LEN]; + char creation_time[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN]; +}; + +struct lttng_metadata_cache { + char *data; /* Metadata cache */ + unsigned int cache_alloc; /* Metadata allocated size (bytes) */ + unsigned int metadata_written; /* Number of bytes written in metadata cache */ + atomic_t producing; /* Metadata being produced (incomplete) */ + struct kref refcount; /* Metadata cache usage */ + struct list_head metadata_stream; /* Metadata stream list */ + uuid_le uuid; /* Trace session unique ID (copy) */ + struct mutex lock; /* Produce/consume lock */ + uint64_t version; /* Current version of the metadata */ +}; + +void lttng_lock_sessions(void); +void lttng_unlock_sessions(void); + +struct list_head *lttng_get_probe_list_head(void); + +struct lttng_enabler *lttng_enabler_create(enum lttng_enabler_type type, + struct lttng_kernel_event *event_param, + struct lttng_channel *chan); + +int lttng_enabler_enable(struct lttng_enabler *enabler); +int lttng_enabler_disable(struct lttng_enabler *enabler); +int lttng_fix_pending_events(void); +int lttng_session_active(void); + +struct lttng_session *lttng_session_create(void); +int lttng_session_enable(struct lttng_session *session); +int lttng_session_disable(struct lttng_session *session); +void lttng_session_destroy(struct lttng_session *session); +int lttng_session_metadata_regenerate(struct lttng_session *session); +int lttng_session_statedump(struct lttng_session *session); +void metadata_cache_destroy(struct kref *kref); + +struct lttng_channel *lttng_channel_create(struct lttng_session *session, + const char *transport_name, + void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval, + enum channel_type channel_type); +struct lttng_channel *lttng_global_channel_create(struct lttng_session *session, + int overwrite, void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval); + +void lttng_metadata_channel_destroy(struct lttng_channel *chan); +struct lttng_event *lttng_event_create(struct lttng_channel *chan, + struct lttng_kernel_event *event_param, + void *filter, + const struct lttng_event_desc *event_desc, + enum lttng_kernel_instrumentation itype); +struct lttng_event *_lttng_event_create(struct lttng_channel *chan, + struct lttng_kernel_event *event_param, + void *filter, + const struct lttng_event_desc *event_desc, + enum lttng_kernel_instrumentation itype); +struct lttng_event *lttng_event_compat_old_create(struct lttng_channel *chan, + struct lttng_kernel_old_event *old_event_param, + void *filter, + const struct lttng_event_desc *internal_desc); + +int lttng_channel_enable(struct lttng_channel *channel); +int lttng_channel_disable(struct lttng_channel *channel); +int lttng_event_enable(struct lttng_event *event); +int lttng_event_disable(struct lttng_event *event); + +void lttng_transport_register(struct lttng_transport *transport); +void lttng_transport_unregister(struct lttng_transport *transport); + +void synchronize_trace(void); +int lttng_abi_init(void); +int lttng_abi_compat_old_init(void); +void lttng_abi_exit(void); +void lttng_abi_compat_old_exit(void); + +int lttng_probe_register(struct lttng_probe_desc *desc); +void lttng_probe_unregister(struct lttng_probe_desc *desc); +const struct lttng_event_desc *lttng_event_get(const char *name); +void lttng_event_put(const struct lttng_event_desc *desc); +int lttng_probes_init(void); +void lttng_probes_exit(void); + +int lttng_metadata_output_channel(struct lttng_metadata_stream *stream, + struct channel *chan, bool *coherent); + +int lttng_pid_tracker_get_node_pid(const struct lttng_pid_hash_node *node); +struct lttng_pid_tracker *lttng_pid_tracker_create(void); +void lttng_pid_tracker_destroy(struct lttng_pid_tracker *lpf); +bool lttng_pid_tracker_lookup(struct lttng_pid_tracker *lpf, int pid); +int lttng_pid_tracker_add(struct lttng_pid_tracker *lpf, int pid); +int lttng_pid_tracker_del(struct lttng_pid_tracker *lpf, int pid); + +int lttng_session_track_pid(struct lttng_session *session, int pid); +int lttng_session_untrack_pid(struct lttng_session *session, int pid); + +int lttng_session_list_tracker_pids(struct lttng_session *session); + +void lttng_clock_ref(void); +void lttng_clock_unref(void); + +#if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS) +int lttng_syscalls_register(struct lttng_channel *chan, void *filter); +int lttng_syscalls_unregister(struct lttng_channel *chan); +int lttng_syscalls_destroy(struct lttng_channel *chan); +int lttng_syscall_filter_enable(struct lttng_channel *chan, + struct lttng_event *event); +int lttng_syscall_filter_disable(struct lttng_channel *chan, + struct lttng_event *event); +long lttng_channel_syscall_mask(struct lttng_channel *channel, + struct lttng_kernel_syscall_mask __user *usyscall_mask); +#else +static inline int lttng_syscalls_register(struct lttng_channel *chan, void *filter) +{ + return -ENOSYS; +} + +static inline int lttng_syscalls_unregister(struct lttng_channel *chan) +{ + return 0; +} + +static inline int lttng_syscalls_destroy(struct lttng_channel *chan) +{ + return 0; +} + +static inline int lttng_syscall_filter_enable(struct lttng_channel *chan, + struct lttng_event *event); +{ + return -ENOSYS; +} + +static inline int lttng_syscall_filter_disable(struct lttng_channel *chan, + struct lttng_event *event); +{ + return -ENOSYS; +} + +static inline long lttng_channel_syscall_mask(struct lttng_channel *channel, + struct lttng_kernel_syscall_mask __user *usyscall_mask) +{ + return -ENOSYS; +} +#endif + +void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime); +int lttng_enabler_attach_bytecode(struct lttng_enabler *enabler, + struct lttng_kernel_filter_bytecode __user *bytecode); +void lttng_enabler_event_link_bytecode(struct lttng_event *event, + struct lttng_enabler *enabler); + +int lttng_probes_init(void); + +extern struct lttng_ctx *lttng_static_ctx; + +int lttng_context_init(void); +void lttng_context_exit(void); +struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx); +void lttng_context_update(struct lttng_ctx *ctx); +int lttng_find_context(struct lttng_ctx *ctx, const char *name); +int lttng_get_context_index(struct lttng_ctx *ctx, const char *name); +void lttng_remove_context_field(struct lttng_ctx **ctx, + struct lttng_ctx_field *field); +void lttng_destroy_context(struct lttng_ctx *ctx); +int lttng_add_pid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_cpu_id_to_ctx(struct lttng_ctx **ctx); +int lttng_add_procname_to_ctx(struct lttng_ctx **ctx); +int lttng_add_prio_to_ctx(struct lttng_ctx **ctx); +int lttng_add_nice_to_ctx(struct lttng_ctx **ctx); +int lttng_add_vpid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_tid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_vtid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_ppid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_vppid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_hostname_to_ctx(struct lttng_ctx **ctx); +int lttng_add_interruptible_to_ctx(struct lttng_ctx **ctx); +int lttng_add_need_reschedule_to_ctx(struct lttng_ctx **ctx); +#if defined(CONFIG_PREEMPT_RT_FULL) || defined(CONFIG_PREEMPT) +int lttng_add_preemptible_to_ctx(struct lttng_ctx **ctx); +#else +static inline +int lttng_add_preemptible_to_ctx(struct lttng_ctx **ctx) +{ + return -ENOSYS; +} +#endif +#ifdef CONFIG_PREEMPT_RT_FULL +int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx); +#else +static inline +int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx) +{ + return -ENOSYS; +} +#endif + +int lttng_add_callstack_to_ctx(struct lttng_ctx **ctx, int type); + +#if defined(CONFIG_PERF_EVENTS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +int lttng_add_perf_counter_to_ctx(uint32_t type, + uint64_t config, + const char *name, + struct lttng_ctx **ctx); +int lttng_cpuhp_perf_counter_online(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_perf_counter_dead(unsigned int cpu, + struct lttng_cpuhp_node *node); +#else +static inline +int lttng_add_perf_counter_to_ctx(uint32_t type, + uint64_t config, + const char *name, + struct lttng_ctx **ctx) +{ + return -ENOSYS; +} +static inline +int lttng_cpuhp_perf_counter_online(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + return 0; +} +static inline +int lttng_cpuhp_perf_counter_dead(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + return 0; +} +#endif + +int lttng_logger_init(void); +void lttng_logger_exit(void); + +extern int lttng_statedump_start(struct lttng_session *session); + +#ifdef CONFIG_KPROBES +int lttng_kprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event); +void lttng_kprobes_unregister(struct lttng_event *event); +void lttng_kprobes_destroy_private(struct lttng_event *event); +#else +static inline +int lttng_kprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event) +{ + return -ENOSYS; +} + +static inline +void lttng_kprobes_unregister(struct lttng_event *event) +{ +} + +static inline +void lttng_kprobes_destroy_private(struct lttng_event *event) +{ +} +#endif + +int lttng_event_add_callsite(struct lttng_event *event, + struct lttng_kernel_event_callsite *callsite); + +#ifdef CONFIG_UPROBES +int lttng_uprobes_register(const char *name, + int fd, struct lttng_event *event); +int lttng_uprobes_add_callsite(struct lttng_event *event, + struct lttng_kernel_event_callsite *callsite); +void lttng_uprobes_unregister(struct lttng_event *event); +void lttng_uprobes_destroy_private(struct lttng_event *event); +#else +static inline +int lttng_uprobes_register(const char *name, + int fd, struct lttng_event *event) +{ + return -ENOSYS; +} + +static inline +int lttng_uprobes_add_callsite(struct lttng_event *event, + struct lttng_kernel_event_callsite *callsite) +{ + return -ENOSYS; +} + +static inline +void lttng_uprobes_unregister(struct lttng_event *event) +{ +} + +static inline +void lttng_uprobes_destroy_private(struct lttng_event *event) +{ +} +#endif + +#ifdef CONFIG_KRETPROBES +int lttng_kretprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event_entry, + struct lttng_event *event_exit); +void lttng_kretprobes_unregister(struct lttng_event *event); +void lttng_kretprobes_destroy_private(struct lttng_event *event); +int lttng_kretprobes_event_enable_state(struct lttng_event *event, + int enable); +#else +static inline +int lttng_kretprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event_entry, + struct lttng_event *event_exit) +{ + return -ENOSYS; +} + +static inline +void lttng_kretprobes_unregister(struct lttng_event *event) +{ +} + +static inline +void lttng_kretprobes_destroy_private(struct lttng_event *event) +{ +} + +static inline +int lttng_kretprobes_event_enable_state(struct lttng_event *event, + int enable) +{ + return -ENOSYS; +} +#endif + +int lttng_calibrate(struct lttng_kernel_calibrate *calibrate); + +extern const struct file_operations lttng_tracepoint_list_fops; +extern const struct file_operations lttng_syscall_list_fops; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +#define TRACEPOINT_HAS_DATA_ARG +#endif + +#endif /* _LTTNG_EVENTS_H */ diff --git a/ltt/lttng-2.11.0/lttng-filter-interpreter.c b/ltt/lttng-2.11.0/lttng-filter-interpreter.c new file mode 100644 index 000000000000..5d5724379749 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-filter-interpreter.c @@ -0,0 +1,1574 @@ +/* SPDX-License-Identifier: MIT + * + * lttng-filter-interpreter.c + * + * LTTng modules filter interpreter. + * + * Copyright (C) 2010-2016 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#include +#include + +LTTNG_STACK_FRAME_NON_STANDARD(lttng_filter_interpret_bytecode); + +/* + * get_char should be called with page fault handler disabled if it is expected + * to handle user-space read. + */ +static +char get_char(struct estack_entry *reg, size_t offset) +{ + if (unlikely(offset >= reg->u.s.seq_len)) + return '\0'; + if (reg->u.s.user) { + char c; + + /* Handle invalid access as end of string. */ + if (unlikely(!lttng_access_ok(VERIFY_READ, + reg->u.s.user_str + offset, + sizeof(c)))) + return '\0'; + /* Handle fault (nonzero return value) as end of string. */ + if (unlikely(__copy_from_user_inatomic(&c, + reg->u.s.user_str + offset, + sizeof(c)))) + return '\0'; + return c; + } else { + return reg->u.s.str[offset]; + } +} + +/* + * -1: wildcard found. + * -2: unknown escape char. + * 0: normal char. + */ +static +int parse_char(struct estack_entry *reg, char *c, size_t *offset) +{ + switch (*c) { + case '\\': + (*offset)++; + *c = get_char(reg, *offset); + switch (*c) { + case '\\': + case '*': + return 0; + default: + return -2; + } + case '*': + return -1; + default: + return 0; + } +} + +static +char get_char_at_cb(size_t at, void *data) +{ + return get_char(data, at); +} + +static +int stack_star_glob_match(struct estack *stack, int top, const char *cmp_type) +{ + bool has_user = false; + int result; + struct estack_entry *pattern_reg; + struct estack_entry *candidate_reg; + + /* Disable the page fault handler when reading from userspace. */ + if (estack_bx(stack, top)->u.s.user + || estack_ax(stack, top)->u.s.user) { + has_user = true; + pagefault_disable(); + } + + /* Find out which side is the pattern vs. the candidate. */ + if (estack_ax(stack, top)->u.s.literal_type == ESTACK_STRING_LITERAL_TYPE_STAR_GLOB) { + pattern_reg = estack_ax(stack, top); + candidate_reg = estack_bx(stack, top); + } else { + pattern_reg = estack_bx(stack, top); + candidate_reg = estack_ax(stack, top); + } + + /* Perform the match operation. */ + result = !strutils_star_glob_match_char_cb(get_char_at_cb, + pattern_reg, get_char_at_cb, candidate_reg); + if (has_user) + pagefault_enable(); + + return result; +} + +static +int stack_strcmp(struct estack *stack, int top, const char *cmp_type) +{ + size_t offset_bx = 0, offset_ax = 0; + int diff, has_user = 0; + + if (estack_bx(stack, top)->u.s.user + || estack_ax(stack, top)->u.s.user) { + has_user = 1; + pagefault_disable(); + } + + for (;;) { + int ret; + int escaped_r0 = 0; + char char_bx, char_ax; + + char_bx = get_char(estack_bx(stack, top), offset_bx); + char_ax = get_char(estack_ax(stack, top), offset_ax); + + if (unlikely(char_bx == '\0')) { + if (char_ax == '\0') { + diff = 0; + break; + } else { + if (estack_ax(stack, top)->u.s.literal_type == + ESTACK_STRING_LITERAL_TYPE_PLAIN) { + ret = parse_char(estack_ax(stack, top), + &char_ax, &offset_ax); + if (ret == -1) { + diff = 0; + break; + } + } + diff = -1; + break; + } + } + if (unlikely(char_ax == '\0')) { + if (estack_bx(stack, top)->u.s.literal_type == + ESTACK_STRING_LITERAL_TYPE_PLAIN) { + ret = parse_char(estack_bx(stack, top), + &char_bx, &offset_bx); + if (ret == -1) { + diff = 0; + break; + } + } + diff = 1; + break; + } + if (estack_bx(stack, top)->u.s.literal_type == + ESTACK_STRING_LITERAL_TYPE_PLAIN) { + ret = parse_char(estack_bx(stack, top), + &char_bx, &offset_bx); + if (ret == -1) { + diff = 0; + break; + } else if (ret == -2) { + escaped_r0 = 1; + } + /* else compare both char */ + } + if (estack_ax(stack, top)->u.s.literal_type == + ESTACK_STRING_LITERAL_TYPE_PLAIN) { + ret = parse_char(estack_ax(stack, top), + &char_ax, &offset_ax); + if (ret == -1) { + diff = 0; + break; + } else if (ret == -2) { + if (!escaped_r0) { + diff = -1; + break; + } + } else { + if (escaped_r0) { + diff = 1; + break; + } + } + } else { + if (escaped_r0) { + diff = 1; + break; + } + } + diff = char_bx - char_ax; + if (diff != 0) + break; + offset_bx++; + offset_ax++; + } + if (has_user) + pagefault_enable(); + + return diff; +} + +uint64_t lttng_filter_false(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data) +{ + return 0; +} + +#ifdef INTERPRETER_USE_SWITCH + +/* + * Fallback for compilers that do not support taking address of labels. + */ + +#define START_OP \ + start_pc = &bytecode->data[0]; \ + for (pc = next_pc = start_pc; pc - start_pc < bytecode->len; \ + pc = next_pc) { \ + dbg_printk("Executing op %s (%u)\n", \ + lttng_filter_print_op((unsigned int) *(filter_opcode_t *) pc), \ + (unsigned int) *(filter_opcode_t *) pc); \ + switch (*(filter_opcode_t *) pc) { + +#define OP(name) case name + +#define PO break + +#define END_OP } \ + } + +#else + +/* + * Dispatch-table based interpreter. + */ + +#define START_OP \ + start_pc = &bytecode->code[0]; \ + pc = next_pc = start_pc; \ + if (unlikely(pc - start_pc >= bytecode->len)) \ + goto end; \ + goto *dispatch[*(filter_opcode_t *) pc]; + +#define OP(name) \ +LABEL_##name + +#define PO \ + pc = next_pc; \ + goto *dispatch[*(filter_opcode_t *) pc]; + +#define END_OP + +#endif + +static int context_get_index(struct lttng_probe_ctx *lttng_probe_ctx, + struct load_ptr *ptr, + uint32_t idx) +{ + + struct lttng_ctx_field *ctx_field; + struct lttng_event_field *field; + union lttng_ctx_value v; + + ctx_field = <tng_static_ctx->fields[idx]; + field = &ctx_field->event_field; + ptr->type = LOAD_OBJECT; + /* field is only used for types nested within variants. */ + ptr->field = NULL; + + switch (field->type.atype) { + case atype_integer: + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + if (field->type.u.basic.integer.signedness) { + ptr->object_type = OBJECT_TYPE_S64; + ptr->u.s64 = v.s64; + ptr->ptr = &ptr->u.s64; + } else { + ptr->object_type = OBJECT_TYPE_U64; + ptr->u.u64 = v.s64; /* Cast. */ + ptr->ptr = &ptr->u.u64; + } + break; + case atype_enum: + { + const struct lttng_integer_type *itype = + &field->type.u.basic.enumeration.container_type; + + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + if (itype->signedness) { + ptr->object_type = OBJECT_TYPE_S64; + ptr->u.s64 = v.s64; + ptr->ptr = &ptr->u.s64; + } else { + ptr->object_type = OBJECT_TYPE_U64; + ptr->u.u64 = v.s64; /* Cast. */ + ptr->ptr = &ptr->u.u64; + } + break; + } + case atype_array: + if (field->type.u.array.elem_type.atype != atype_integer) { + printk(KERN_WARNING "Array nesting only supports integer types.\n"); + return -EINVAL; + } + if (field->type.u.array.elem_type.u.basic.integer.encoding == lttng_encode_none) { + printk(KERN_WARNING "Only string arrays are supported for contexts.\n"); + return -EINVAL; + } + ptr->object_type = OBJECT_TYPE_STRING; + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + ptr->ptr = v.str; + break; + case atype_sequence: + if (field->type.u.sequence.elem_type.atype != atype_integer) { + printk(KERN_WARNING "Sequence nesting only supports integer types.\n"); + return -EINVAL; + } + if (field->type.u.sequence.elem_type.u.basic.integer.encoding == lttng_encode_none) { + printk(KERN_WARNING "Only string sequences are supported for contexts.\n"); + return -EINVAL; + } + ptr->object_type = OBJECT_TYPE_STRING; + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + ptr->ptr = v.str; + break; + case atype_array_bitfield: + printk(KERN_WARNING "Bitfield array type is not supported.\n"); + return -EINVAL; + case atype_sequence_bitfield: + printk(KERN_WARNING "Bitfield sequence type is not supported.\n"); + return -EINVAL; + case atype_string: + ptr->object_type = OBJECT_TYPE_STRING; + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + ptr->ptr = v.str; + break; + case atype_struct: + printk(KERN_WARNING "Structure type cannot be loaded.\n"); + return -EINVAL; + default: + printk(KERN_WARNING "Unknown type: %d", (int) field->type.atype); + return -EINVAL; + } + return 0; +} + +static int dynamic_get_index(struct lttng_probe_ctx *lttng_probe_ctx, + struct bytecode_runtime *runtime, + uint64_t index, struct estack_entry *stack_top) +{ + int ret; + const struct filter_get_index_data *gid; + + /* + * Types nested within variants need to perform dynamic lookup + * based on the field descriptions. LTTng-UST does not implement + * variants for now. + */ + if (stack_top->u.ptr.field) + return -EINVAL; + gid = (const struct filter_get_index_data *) &runtime->data[index]; + switch (stack_top->u.ptr.type) { + case LOAD_OBJECT: + switch (stack_top->u.ptr.object_type) { + case OBJECT_TYPE_ARRAY: + { + const char *ptr; + + WARN_ON_ONCE(gid->offset >= gid->array_len); + /* Skip count (unsigned long) */ + ptr = *(const char **) (stack_top->u.ptr.ptr + sizeof(unsigned long)); + ptr = ptr + gid->offset; + stack_top->u.ptr.ptr = ptr; + stack_top->u.ptr.object_type = gid->elem.type; + stack_top->u.ptr.rev_bo = gid->elem.rev_bo; + /* field is only used for types nested within variants. */ + stack_top->u.ptr.field = NULL; + break; + } + case OBJECT_TYPE_SEQUENCE: + { + const char *ptr; + size_t ptr_seq_len; + + ptr = *(const char **) (stack_top->u.ptr.ptr + sizeof(unsigned long)); + ptr_seq_len = *(unsigned long *) stack_top->u.ptr.ptr; + if (gid->offset >= gid->elem.len * ptr_seq_len) { + ret = -EINVAL; + goto end; + } + ptr = ptr + gid->offset; + stack_top->u.ptr.ptr = ptr; + stack_top->u.ptr.object_type = gid->elem.type; + stack_top->u.ptr.rev_bo = gid->elem.rev_bo; + /* field is only used for types nested within variants. */ + stack_top->u.ptr.field = NULL; + break; + } + case OBJECT_TYPE_STRUCT: + printk(KERN_WARNING "Nested structures are not supported yet.\n"); + ret = -EINVAL; + goto end; + case OBJECT_TYPE_VARIANT: + default: + printk(KERN_WARNING "Unexpected get index type %d", + (int) stack_top->u.ptr.object_type); + ret = -EINVAL; + goto end; + } + break; + case LOAD_ROOT_CONTEXT: + case LOAD_ROOT_APP_CONTEXT: /* Fall-through */ + { + ret = context_get_index(lttng_probe_ctx, + &stack_top->u.ptr, + gid->ctx_index); + if (ret) { + goto end; + } + break; + } + case LOAD_ROOT_PAYLOAD: + stack_top->u.ptr.ptr += gid->offset; + if (gid->elem.type == OBJECT_TYPE_STRING) + stack_top->u.ptr.ptr = *(const char * const *) stack_top->u.ptr.ptr; + stack_top->u.ptr.object_type = gid->elem.type; + stack_top->u.ptr.type = LOAD_OBJECT; + /* field is only used for types nested within variants. */ + stack_top->u.ptr.field = NULL; + break; + } + return 0; + +end: + return ret; +} + +static int dynamic_load_field(struct estack_entry *stack_top) +{ + int ret; + + switch (stack_top->u.ptr.type) { + case LOAD_OBJECT: + break; + case LOAD_ROOT_CONTEXT: + case LOAD_ROOT_APP_CONTEXT: + case LOAD_ROOT_PAYLOAD: + default: + dbg_printk("Filter warning: cannot load root, missing field name.\n"); + ret = -EINVAL; + goto end; + } + switch (stack_top->u.ptr.object_type) { + case OBJECT_TYPE_S8: + dbg_printk("op load field s8\n"); + stack_top->u.v = *(int8_t *) stack_top->u.ptr.ptr; + break; + case OBJECT_TYPE_S16: + { + int16_t tmp; + + dbg_printk("op load field s16\n"); + tmp = *(int16_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab16s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_S32: + { + int32_t tmp; + + dbg_printk("op load field s32\n"); + tmp = *(int32_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab32s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_S64: + { + int64_t tmp; + + dbg_printk("op load field s64\n"); + tmp = *(int64_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab64s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_U8: + dbg_printk("op load field u8\n"); + stack_top->u.v = *(uint8_t *) stack_top->u.ptr.ptr; + break; + case OBJECT_TYPE_U16: + { + uint16_t tmp; + + dbg_printk("op load field s16\n"); + tmp = *(uint16_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab16s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_U32: + { + uint32_t tmp; + + dbg_printk("op load field u32\n"); + tmp = *(uint32_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab32s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_U64: + { + uint64_t tmp; + + dbg_printk("op load field u64\n"); + tmp = *(uint64_t *) stack_top->u.ptr.ptr; + if (stack_top->u.ptr.rev_bo) + __swab64s(&tmp); + stack_top->u.v = tmp; + break; + } + case OBJECT_TYPE_STRING: + { + const char *str; + + dbg_printk("op load field string\n"); + str = (const char *) stack_top->u.ptr.ptr; + stack_top->u.s.str = str; + if (unlikely(!stack_top->u.s.str)) { + dbg_printk("Filter warning: loading a NULL string.\n"); + ret = -EINVAL; + goto end; + } + stack_top->u.s.seq_len = LTTNG_SIZE_MAX; + stack_top->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + break; + } + case OBJECT_TYPE_STRING_SEQUENCE: + { + const char *ptr; + + dbg_printk("op load field string sequence\n"); + ptr = stack_top->u.ptr.ptr; + stack_top->u.s.seq_len = *(unsigned long *) ptr; + stack_top->u.s.str = *(const char **) (ptr + sizeof(unsigned long)); + if (unlikely(!stack_top->u.s.str)) { + dbg_printk("Filter warning: loading a NULL sequence.\n"); + ret = -EINVAL; + goto end; + } + stack_top->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + break; + } + case OBJECT_TYPE_DYNAMIC: + /* + * Dynamic types in context are looked up + * by context get index. + */ + ret = -EINVAL; + goto end; + case OBJECT_TYPE_DOUBLE: + ret = -EINVAL; + goto end; + case OBJECT_TYPE_SEQUENCE: + case OBJECT_TYPE_ARRAY: + case OBJECT_TYPE_STRUCT: + case OBJECT_TYPE_VARIANT: + printk(KERN_WARNING "Sequences, arrays, struct and variant cannot be loaded (nested types).\n"); + ret = -EINVAL; + goto end; + } + return 0; + +end: + return ret; +} + +/* + * Return 0 (discard), or raise the 0x1 flag (log event). + * Currently, other flags are kept for future extensions and have no + * effect. + */ +uint64_t lttng_filter_interpret_bytecode(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data) +{ + struct bytecode_runtime *bytecode = filter_data; + void *pc, *next_pc, *start_pc; + int ret = -EINVAL; + uint64_t retval = 0; + struct estack _stack; + struct estack *stack = &_stack; + register int64_t ax = 0, bx = 0; + register int top = FILTER_STACK_EMPTY; +#ifndef INTERPRETER_USE_SWITCH + static void *dispatch[NR_FILTER_OPS] = { + [ FILTER_OP_UNKNOWN ] = &&LABEL_FILTER_OP_UNKNOWN, + + [ FILTER_OP_RETURN ] = &&LABEL_FILTER_OP_RETURN, + + /* binary */ + [ FILTER_OP_MUL ] = &&LABEL_FILTER_OP_MUL, + [ FILTER_OP_DIV ] = &&LABEL_FILTER_OP_DIV, + [ FILTER_OP_MOD ] = &&LABEL_FILTER_OP_MOD, + [ FILTER_OP_PLUS ] = &&LABEL_FILTER_OP_PLUS, + [ FILTER_OP_MINUS ] = &&LABEL_FILTER_OP_MINUS, + [ FILTER_OP_BIT_RSHIFT ] = &&LABEL_FILTER_OP_BIT_RSHIFT, + [ FILTER_OP_BIT_LSHIFT ] = &&LABEL_FILTER_OP_BIT_LSHIFT, + [ FILTER_OP_BIT_AND ] = &&LABEL_FILTER_OP_BIT_AND, + [ FILTER_OP_BIT_OR ] = &&LABEL_FILTER_OP_BIT_OR, + [ FILTER_OP_BIT_XOR ] = &&LABEL_FILTER_OP_BIT_XOR, + + /* binary comparators */ + [ FILTER_OP_EQ ] = &&LABEL_FILTER_OP_EQ, + [ FILTER_OP_NE ] = &&LABEL_FILTER_OP_NE, + [ FILTER_OP_GT ] = &&LABEL_FILTER_OP_GT, + [ FILTER_OP_LT ] = &&LABEL_FILTER_OP_LT, + [ FILTER_OP_GE ] = &&LABEL_FILTER_OP_GE, + [ FILTER_OP_LE ] = &&LABEL_FILTER_OP_LE, + + /* string binary comparator */ + [ FILTER_OP_EQ_STRING ] = &&LABEL_FILTER_OP_EQ_STRING, + [ FILTER_OP_NE_STRING ] = &&LABEL_FILTER_OP_NE_STRING, + [ FILTER_OP_GT_STRING ] = &&LABEL_FILTER_OP_GT_STRING, + [ FILTER_OP_LT_STRING ] = &&LABEL_FILTER_OP_LT_STRING, + [ FILTER_OP_GE_STRING ] = &&LABEL_FILTER_OP_GE_STRING, + [ FILTER_OP_LE_STRING ] = &&LABEL_FILTER_OP_LE_STRING, + + /* globbing pattern binary comparator */ + [ FILTER_OP_EQ_STAR_GLOB_STRING ] = &&LABEL_FILTER_OP_EQ_STAR_GLOB_STRING, + [ FILTER_OP_NE_STAR_GLOB_STRING ] = &&LABEL_FILTER_OP_NE_STAR_GLOB_STRING, + + /* s64 binary comparator */ + [ FILTER_OP_EQ_S64 ] = &&LABEL_FILTER_OP_EQ_S64, + [ FILTER_OP_NE_S64 ] = &&LABEL_FILTER_OP_NE_S64, + [ FILTER_OP_GT_S64 ] = &&LABEL_FILTER_OP_GT_S64, + [ FILTER_OP_LT_S64 ] = &&LABEL_FILTER_OP_LT_S64, + [ FILTER_OP_GE_S64 ] = &&LABEL_FILTER_OP_GE_S64, + [ FILTER_OP_LE_S64 ] = &&LABEL_FILTER_OP_LE_S64, + + /* double binary comparator */ + [ FILTER_OP_EQ_DOUBLE ] = &&LABEL_FILTER_OP_EQ_DOUBLE, + [ FILTER_OP_NE_DOUBLE ] = &&LABEL_FILTER_OP_NE_DOUBLE, + [ FILTER_OP_GT_DOUBLE ] = &&LABEL_FILTER_OP_GT_DOUBLE, + [ FILTER_OP_LT_DOUBLE ] = &&LABEL_FILTER_OP_LT_DOUBLE, + [ FILTER_OP_GE_DOUBLE ] = &&LABEL_FILTER_OP_GE_DOUBLE, + [ FILTER_OP_LE_DOUBLE ] = &&LABEL_FILTER_OP_LE_DOUBLE, + + /* Mixed S64-double binary comparators */ + [ FILTER_OP_EQ_DOUBLE_S64 ] = &&LABEL_FILTER_OP_EQ_DOUBLE_S64, + [ FILTER_OP_NE_DOUBLE_S64 ] = &&LABEL_FILTER_OP_NE_DOUBLE_S64, + [ FILTER_OP_GT_DOUBLE_S64 ] = &&LABEL_FILTER_OP_GT_DOUBLE_S64, + [ FILTER_OP_LT_DOUBLE_S64 ] = &&LABEL_FILTER_OP_LT_DOUBLE_S64, + [ FILTER_OP_GE_DOUBLE_S64 ] = &&LABEL_FILTER_OP_GE_DOUBLE_S64, + [ FILTER_OP_LE_DOUBLE_S64 ] = &&LABEL_FILTER_OP_LE_DOUBLE_S64, + + [ FILTER_OP_EQ_S64_DOUBLE ] = &&LABEL_FILTER_OP_EQ_S64_DOUBLE, + [ FILTER_OP_NE_S64_DOUBLE ] = &&LABEL_FILTER_OP_NE_S64_DOUBLE, + [ FILTER_OP_GT_S64_DOUBLE ] = &&LABEL_FILTER_OP_GT_S64_DOUBLE, + [ FILTER_OP_LT_S64_DOUBLE ] = &&LABEL_FILTER_OP_LT_S64_DOUBLE, + [ FILTER_OP_GE_S64_DOUBLE ] = &&LABEL_FILTER_OP_GE_S64_DOUBLE, + [ FILTER_OP_LE_S64_DOUBLE ] = &&LABEL_FILTER_OP_LE_S64_DOUBLE, + + /* unary */ + [ FILTER_OP_UNARY_PLUS ] = &&LABEL_FILTER_OP_UNARY_PLUS, + [ FILTER_OP_UNARY_MINUS ] = &&LABEL_FILTER_OP_UNARY_MINUS, + [ FILTER_OP_UNARY_NOT ] = &&LABEL_FILTER_OP_UNARY_NOT, + [ FILTER_OP_UNARY_PLUS_S64 ] = &&LABEL_FILTER_OP_UNARY_PLUS_S64, + [ FILTER_OP_UNARY_MINUS_S64 ] = &&LABEL_FILTER_OP_UNARY_MINUS_S64, + [ FILTER_OP_UNARY_NOT_S64 ] = &&LABEL_FILTER_OP_UNARY_NOT_S64, + [ FILTER_OP_UNARY_PLUS_DOUBLE ] = &&LABEL_FILTER_OP_UNARY_PLUS_DOUBLE, + [ FILTER_OP_UNARY_MINUS_DOUBLE ] = &&LABEL_FILTER_OP_UNARY_MINUS_DOUBLE, + [ FILTER_OP_UNARY_NOT_DOUBLE ] = &&LABEL_FILTER_OP_UNARY_NOT_DOUBLE, + + /* logical */ + [ FILTER_OP_AND ] = &&LABEL_FILTER_OP_AND, + [ FILTER_OP_OR ] = &&LABEL_FILTER_OP_OR, + + /* load field ref */ + [ FILTER_OP_LOAD_FIELD_REF ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF, + [ FILTER_OP_LOAD_FIELD_REF_STRING ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_STRING, + [ FILTER_OP_LOAD_FIELD_REF_SEQUENCE ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_SEQUENCE, + [ FILTER_OP_LOAD_FIELD_REF_S64 ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_S64, + [ FILTER_OP_LOAD_FIELD_REF_DOUBLE ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_DOUBLE, + + /* load from immediate operand */ + [ FILTER_OP_LOAD_STRING ] = &&LABEL_FILTER_OP_LOAD_STRING, + [ FILTER_OP_LOAD_STAR_GLOB_STRING ] = &&LABEL_FILTER_OP_LOAD_STAR_GLOB_STRING, + [ FILTER_OP_LOAD_S64 ] = &&LABEL_FILTER_OP_LOAD_S64, + [ FILTER_OP_LOAD_DOUBLE ] = &&LABEL_FILTER_OP_LOAD_DOUBLE, + + /* cast */ + [ FILTER_OP_CAST_TO_S64 ] = &&LABEL_FILTER_OP_CAST_TO_S64, + [ FILTER_OP_CAST_DOUBLE_TO_S64 ] = &&LABEL_FILTER_OP_CAST_DOUBLE_TO_S64, + [ FILTER_OP_CAST_NOP ] = &&LABEL_FILTER_OP_CAST_NOP, + + /* get context ref */ + [ FILTER_OP_GET_CONTEXT_REF ] = &&LABEL_FILTER_OP_GET_CONTEXT_REF, + [ FILTER_OP_GET_CONTEXT_REF_STRING ] = &&LABEL_FILTER_OP_GET_CONTEXT_REF_STRING, + [ FILTER_OP_GET_CONTEXT_REF_S64 ] = &&LABEL_FILTER_OP_GET_CONTEXT_REF_S64, + [ FILTER_OP_GET_CONTEXT_REF_DOUBLE ] = &&LABEL_FILTER_OP_GET_CONTEXT_REF_DOUBLE, + + /* load userspace field ref */ + [ FILTER_OP_LOAD_FIELD_REF_USER_STRING ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_USER_STRING, + [ FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE ] = &&LABEL_FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE, + + /* Instructions for recursive traversal through composed types. */ + [ FILTER_OP_GET_CONTEXT_ROOT ] = &&LABEL_FILTER_OP_GET_CONTEXT_ROOT, + [ FILTER_OP_GET_APP_CONTEXT_ROOT ] = &&LABEL_FILTER_OP_GET_APP_CONTEXT_ROOT, + [ FILTER_OP_GET_PAYLOAD_ROOT ] = &&LABEL_FILTER_OP_GET_PAYLOAD_ROOT, + + [ FILTER_OP_GET_SYMBOL ] = &&LABEL_FILTER_OP_GET_SYMBOL, + [ FILTER_OP_GET_SYMBOL_FIELD ] = &&LABEL_FILTER_OP_GET_SYMBOL_FIELD, + [ FILTER_OP_GET_INDEX_U16 ] = &&LABEL_FILTER_OP_GET_INDEX_U16, + [ FILTER_OP_GET_INDEX_U64 ] = &&LABEL_FILTER_OP_GET_INDEX_U64, + + [ FILTER_OP_LOAD_FIELD ] = &&LABEL_FILTER_OP_LOAD_FIELD, + [ FILTER_OP_LOAD_FIELD_S8 ] = &&LABEL_FILTER_OP_LOAD_FIELD_S8, + [ FILTER_OP_LOAD_FIELD_S16 ] = &&LABEL_FILTER_OP_LOAD_FIELD_S16, + [ FILTER_OP_LOAD_FIELD_S32 ] = &&LABEL_FILTER_OP_LOAD_FIELD_S32, + [ FILTER_OP_LOAD_FIELD_S64 ] = &&LABEL_FILTER_OP_LOAD_FIELD_S64, + [ FILTER_OP_LOAD_FIELD_U8 ] = &&LABEL_FILTER_OP_LOAD_FIELD_U8, + [ FILTER_OP_LOAD_FIELD_U16 ] = &&LABEL_FILTER_OP_LOAD_FIELD_U16, + [ FILTER_OP_LOAD_FIELD_U32 ] = &&LABEL_FILTER_OP_LOAD_FIELD_U32, + [ FILTER_OP_LOAD_FIELD_U64 ] = &&LABEL_FILTER_OP_LOAD_FIELD_U64, + [ FILTER_OP_LOAD_FIELD_STRING ] = &&LABEL_FILTER_OP_LOAD_FIELD_STRING, + [ FILTER_OP_LOAD_FIELD_SEQUENCE ] = &&LABEL_FILTER_OP_LOAD_FIELD_SEQUENCE, + [ FILTER_OP_LOAD_FIELD_DOUBLE ] = &&LABEL_FILTER_OP_LOAD_FIELD_DOUBLE, + + [ FILTER_OP_UNARY_BIT_NOT ] = &&LABEL_FILTER_OP_UNARY_BIT_NOT, + + [ FILTER_OP_RETURN_S64 ] = &&LABEL_FILTER_OP_RETURN_S64, + }; +#endif /* #ifndef INTERPRETER_USE_SWITCH */ + + START_OP + + OP(FILTER_OP_UNKNOWN): + OP(FILTER_OP_LOAD_FIELD_REF): + OP(FILTER_OP_GET_CONTEXT_REF): +#ifdef INTERPRETER_USE_SWITCH + default: +#endif /* INTERPRETER_USE_SWITCH */ + printk(KERN_WARNING "unknown bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + OP(FILTER_OP_RETURN): + OP(FILTER_OP_RETURN_S64): + /* LTTNG_FILTER_DISCARD or LTTNG_FILTER_RECORD_FLAG */ + retval = !!estack_ax_v; + ret = 0; + goto end; + + /* binary */ + OP(FILTER_OP_MUL): + OP(FILTER_OP_DIV): + OP(FILTER_OP_MOD): + OP(FILTER_OP_PLUS): + OP(FILTER_OP_MINUS): + printk(KERN_WARNING "unsupported bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + OP(FILTER_OP_EQ): + OP(FILTER_OP_NE): + OP(FILTER_OP_GT): + OP(FILTER_OP_LT): + OP(FILTER_OP_GE): + OP(FILTER_OP_LE): + printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + OP(FILTER_OP_EQ_STRING): + { + int res; + + res = (stack_strcmp(stack, top, "==") == 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_NE_STRING): + { + int res; + + res = (stack_strcmp(stack, top, "!=") != 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_GT_STRING): + { + int res; + + res = (stack_strcmp(stack, top, ">") > 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_LT_STRING): + { + int res; + + res = (stack_strcmp(stack, top, "<") < 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_GE_STRING): + { + int res; + + res = (stack_strcmp(stack, top, ">=") >= 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_LE_STRING): + { + int res; + + res = (stack_strcmp(stack, top, "<=") <= 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + + OP(FILTER_OP_EQ_STAR_GLOB_STRING): + { + int res; + + res = (stack_star_glob_match(stack, top, "==") == 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_NE_STAR_GLOB_STRING): + { + int res; + + res = (stack_star_glob_match(stack, top, "!=") != 0); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + + OP(FILTER_OP_EQ_S64): + { + int res; + + res = (estack_bx_v == estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_NE_S64): + { + int res; + + res = (estack_bx_v != estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_GT_S64): + { + int res; + + res = (estack_bx_v > estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_LT_S64): + { + int res; + + res = (estack_bx_v < estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_GE_S64): + { + int res; + + res = (estack_bx_v >= estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_LE_S64): + { + int res; + + res = (estack_bx_v <= estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + + OP(FILTER_OP_EQ_DOUBLE): + OP(FILTER_OP_NE_DOUBLE): + OP(FILTER_OP_GT_DOUBLE): + OP(FILTER_OP_LT_DOUBLE): + OP(FILTER_OP_GE_DOUBLE): + OP(FILTER_OP_LE_DOUBLE): + { + BUG_ON(1); + PO; + } + + /* Mixed S64-double binary comparators */ + OP(FILTER_OP_EQ_DOUBLE_S64): + OP(FILTER_OP_NE_DOUBLE_S64): + OP(FILTER_OP_GT_DOUBLE_S64): + OP(FILTER_OP_LT_DOUBLE_S64): + OP(FILTER_OP_GE_DOUBLE_S64): + OP(FILTER_OP_LE_DOUBLE_S64): + OP(FILTER_OP_EQ_S64_DOUBLE): + OP(FILTER_OP_NE_S64_DOUBLE): + OP(FILTER_OP_GT_S64_DOUBLE): + OP(FILTER_OP_LT_S64_DOUBLE): + OP(FILTER_OP_GE_S64_DOUBLE): + OP(FILTER_OP_LE_S64_DOUBLE): + { + BUG_ON(1); + PO; + } + OP(FILTER_OP_BIT_RSHIFT): + { + int64_t res; + + /* Catch undefined behavior. */ + if (unlikely(estack_ax_v < 0 || estack_ax_v >= 64)) { + ret = -EINVAL; + goto end; + } + res = ((uint64_t) estack_bx_v >> (uint32_t) estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_BIT_LSHIFT): + { + int64_t res; + + /* Catch undefined behavior. */ + if (unlikely(estack_ax_v < 0 || estack_ax_v >= 64)) { + ret = -EINVAL; + goto end; + } + res = ((uint64_t) estack_bx_v << (uint32_t) estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_BIT_AND): + { + int64_t res; + + res = ((uint64_t) estack_bx_v & (uint64_t) estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_BIT_OR): + { + int64_t res; + + res = ((uint64_t) estack_bx_v | (uint64_t) estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + OP(FILTER_OP_BIT_XOR): + { + int64_t res; + + res = ((uint64_t) estack_bx_v ^ (uint64_t) estack_ax_v); + estack_pop(stack, top, ax, bx); + estack_ax_v = res; + next_pc += sizeof(struct binary_op); + PO; + } + + /* unary */ + OP(FILTER_OP_UNARY_PLUS): + OP(FILTER_OP_UNARY_MINUS): + OP(FILTER_OP_UNARY_NOT): + printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + + OP(FILTER_OP_UNARY_BIT_NOT): + { + estack_ax_v = ~(uint64_t) estack_ax_v; + next_pc += sizeof(struct unary_op); + PO; + } + + OP(FILTER_OP_UNARY_PLUS_S64): + { + next_pc += sizeof(struct unary_op); + PO; + } + OP(FILTER_OP_UNARY_MINUS_S64): + { + estack_ax_v = -estack_ax_v; + next_pc += sizeof(struct unary_op); + PO; + } + OP(FILTER_OP_UNARY_PLUS_DOUBLE): + OP(FILTER_OP_UNARY_MINUS_DOUBLE): + { + BUG_ON(1); + PO; + } + OP(FILTER_OP_UNARY_NOT_S64): + { + estack_ax_v = !estack_ax_v; + next_pc += sizeof(struct unary_op); + PO; + } + OP(FILTER_OP_UNARY_NOT_DOUBLE): + { + BUG_ON(1); + PO; + } + + /* logical */ + OP(FILTER_OP_AND): + { + struct logical_op *insn = (struct logical_op *) pc; + + /* If AX is 0, skip and evaluate to 0 */ + if (unlikely(estack_ax_v == 0)) { + dbg_printk("Jumping to bytecode offset %u\n", + (unsigned int) insn->skip_offset); + next_pc = start_pc + insn->skip_offset; + } else { + /* Pop 1 when jump not taken */ + estack_pop(stack, top, ax, bx); + next_pc += sizeof(struct logical_op); + } + PO; + } + OP(FILTER_OP_OR): + { + struct logical_op *insn = (struct logical_op *) pc; + + /* If AX is nonzero, skip and evaluate to 1 */ + + if (unlikely(estack_ax_v != 0)) { + estack_ax_v = 1; + dbg_printk("Jumping to bytecode offset %u\n", + (unsigned int) insn->skip_offset); + next_pc = start_pc + insn->skip_offset; + } else { + /* Pop 1 when jump not taken */ + estack_pop(stack, top, ax, bx); + next_pc += sizeof(struct logical_op); + } + PO; + } + + + /* load field ref */ + OP(FILTER_OP_LOAD_FIELD_REF_STRING): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("load field ref offset %u type string\n", + ref->offset); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.str = + *(const char * const *) &filter_stack_data[ref->offset]; + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL string.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + estack_ax(stack, top)->u.s.user = 0; + dbg_printk("ref load string %s\n", estack_ax(stack, top)->u.s.str); + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_REF_SEQUENCE): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("load field ref offset %u type sequence\n", + ref->offset); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.seq_len = + *(unsigned long *) &filter_stack_data[ref->offset]; + estack_ax(stack, top)->u.s.str = + *(const char **) (&filter_stack_data[ref->offset + + sizeof(unsigned long)]); + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL sequence.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + estack_ax(stack, top)->u.s.user = 0; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_REF_S64): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("load field ref offset %u type s64\n", + ref->offset); + estack_push(stack, top, ax, bx); + estack_ax_v = + ((struct literal_numeric *) &filter_stack_data[ref->offset])->v; + dbg_printk("ref load s64 %lld\n", + (long long) estack_ax_v); + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_REF_DOUBLE): + { + BUG_ON(1); + PO; + } + + /* load from immediate operand */ + OP(FILTER_OP_LOAD_STRING): + { + struct load_op *insn = (struct load_op *) pc; + + dbg_printk("load string %s\n", insn->data); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.str = insn->data; + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_PLAIN; + estack_ax(stack, top)->u.s.user = 0; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + PO; + } + + OP(FILTER_OP_LOAD_STAR_GLOB_STRING): + { + struct load_op *insn = (struct load_op *) pc; + + dbg_printk("load globbing pattern %s\n", insn->data); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.str = insn->data; + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_STAR_GLOB; + estack_ax(stack, top)->u.s.user = 0; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + PO; + } + + OP(FILTER_OP_LOAD_S64): + { + struct load_op *insn = (struct load_op *) pc; + + estack_push(stack, top, ax, bx); + estack_ax_v = ((struct literal_numeric *) insn->data)->v; + dbg_printk("load s64 %lld\n", + (long long) estack_ax_v); + next_pc += sizeof(struct load_op) + + sizeof(struct literal_numeric); + PO; + } + + OP(FILTER_OP_LOAD_DOUBLE): + { + BUG_ON(1); + PO; + } + + /* cast */ + OP(FILTER_OP_CAST_TO_S64): + printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + OP(FILTER_OP_CAST_DOUBLE_TO_S64): + { + BUG_ON(1); + PO; + } + + OP(FILTER_OP_CAST_NOP): + { + next_pc += sizeof(struct cast_op); + PO; + } + + /* get context ref */ + OP(FILTER_OP_GET_CONTEXT_REF_STRING): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + struct lttng_ctx_field *ctx_field; + union lttng_ctx_value v; + + dbg_printk("get context ref offset %u type string\n", + ref->offset); + ctx_field = <tng_static_ctx->fields[ref->offset]; + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.str = v.str; + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL string.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + estack_ax(stack, top)->u.s.user = 0; + dbg_printk("ref get context string %s\n", estack_ax(stack, top)->u.s.str); + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_GET_CONTEXT_REF_S64): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + struct lttng_ctx_field *ctx_field; + union lttng_ctx_value v; + + dbg_printk("get context ref offset %u type s64\n", + ref->offset); + ctx_field = <tng_static_ctx->fields[ref->offset]; + ctx_field->get_value(ctx_field, lttng_probe_ctx, &v); + estack_push(stack, top, ax, bx); + estack_ax_v = v.s64; + dbg_printk("ref get context s64 %lld\n", + (long long) estack_ax_v); + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_GET_CONTEXT_REF_DOUBLE): + { + BUG_ON(1); + PO; + } + + /* load userspace field ref */ + OP(FILTER_OP_LOAD_FIELD_REF_USER_STRING): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("load field ref offset %u type user string\n", + ref->offset); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.user_str = + *(const char * const *) &filter_stack_data[ref->offset]; + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL string.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + estack_ax(stack, top)->u.s.user = 1; + dbg_printk("ref load string %s\n", estack_ax(stack, top)->u.s.str); + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE): + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("load field ref offset %u type user sequence\n", + ref->offset); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.s.seq_len = + *(unsigned long *) &filter_stack_data[ref->offset]; + estack_ax(stack, top)->u.s.user_str = + *(const char **) (&filter_stack_data[ref->offset + + sizeof(unsigned long)]); + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL sequence.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + estack_ax(stack, top)->u.s.user = 1; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + PO; + } + + OP(FILTER_OP_GET_CONTEXT_ROOT): + { + dbg_printk("op get context root\n"); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.ptr.type = LOAD_ROOT_CONTEXT; + /* "field" only needed for variants. */ + estack_ax(stack, top)->u.ptr.field = NULL; + next_pc += sizeof(struct load_op); + PO; + } + + OP(FILTER_OP_GET_APP_CONTEXT_ROOT): + { + BUG_ON(1); + PO; + } + + OP(FILTER_OP_GET_PAYLOAD_ROOT): + { + dbg_printk("op get app payload root\n"); + estack_push(stack, top, ax, bx); + estack_ax(stack, top)->u.ptr.type = LOAD_ROOT_PAYLOAD; + estack_ax(stack, top)->u.ptr.ptr = filter_stack_data; + /* "field" only needed for variants. */ + estack_ax(stack, top)->u.ptr.field = NULL; + next_pc += sizeof(struct load_op); + PO; + } + + OP(FILTER_OP_GET_SYMBOL): + { + dbg_printk("op get symbol\n"); + switch (estack_ax(stack, top)->u.ptr.type) { + case LOAD_OBJECT: + printk(KERN_WARNING "Nested fields not implemented yet.\n"); + ret = -EINVAL; + goto end; + case LOAD_ROOT_CONTEXT: + case LOAD_ROOT_APP_CONTEXT: + case LOAD_ROOT_PAYLOAD: + /* + * symbol lookup is performed by + * specialization. + */ + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct load_op) + sizeof(struct get_symbol); + PO; + } + + OP(FILTER_OP_GET_SYMBOL_FIELD): + { + /* + * Used for first variant encountered in a + * traversal. Variants are not implemented yet. + */ + ret = -EINVAL; + goto end; + } + + OP(FILTER_OP_GET_INDEX_U16): + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u16 *index = (struct get_index_u16 *) insn->data; + + dbg_printk("op get index u16\n"); + ret = dynamic_get_index(lttng_probe_ctx, bytecode, index->index, estack_ax(stack, top)); + if (ret) + goto end; + estack_ax_v = estack_ax(stack, top)->u.v; + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u16); + PO; + } + + OP(FILTER_OP_GET_INDEX_U64): + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u64 *index = (struct get_index_u64 *) insn->data; + + dbg_printk("op get index u64\n"); + ret = dynamic_get_index(lttng_probe_ctx, bytecode, index->index, estack_ax(stack, top)); + if (ret) + goto end; + estack_ax_v = estack_ax(stack, top)->u.v; + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u64); + PO; + } + + OP(FILTER_OP_LOAD_FIELD): + { + dbg_printk("op load field\n"); + ret = dynamic_load_field(estack_ax(stack, top)); + if (ret) + goto end; + estack_ax_v = estack_ax(stack, top)->u.v; + next_pc += sizeof(struct load_op); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_S8): + { + dbg_printk("op load field s8\n"); + + estack_ax_v = *(int8_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_S16): + { + dbg_printk("op load field s16\n"); + + estack_ax_v = *(int16_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_S32): + { + dbg_printk("op load field s32\n"); + + estack_ax_v = *(int32_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_S64): + { + dbg_printk("op load field s64\n"); + + estack_ax_v = *(int64_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_U8): + { + dbg_printk("op load field u8\n"); + + estack_ax_v = *(uint8_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_U16): + { + dbg_printk("op load field u16\n"); + + estack_ax_v = *(uint16_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_U32): + { + dbg_printk("op load field u32\n"); + + estack_ax_v = *(uint32_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_U64): + { + dbg_printk("op load field u64\n"); + + estack_ax_v = *(uint64_t *) estack_ax(stack, top)->u.ptr.ptr; + next_pc += sizeof(struct load_op); + PO; + } + OP(FILTER_OP_LOAD_FIELD_DOUBLE): + { + ret = -EINVAL; + goto end; + } + + OP(FILTER_OP_LOAD_FIELD_STRING): + { + const char *str; + + dbg_printk("op load field string\n"); + str = (const char *) estack_ax(stack, top)->u.ptr.ptr; + estack_ax(stack, top)->u.s.str = str; + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL string.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX; + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + next_pc += sizeof(struct load_op); + PO; + } + + OP(FILTER_OP_LOAD_FIELD_SEQUENCE): + { + const char *ptr; + + dbg_printk("op load field string sequence\n"); + ptr = estack_ax(stack, top)->u.ptr.ptr; + estack_ax(stack, top)->u.s.seq_len = *(unsigned long *) ptr; + estack_ax(stack, top)->u.s.str = *(const char **) (ptr + sizeof(unsigned long)); + if (unlikely(!estack_ax(stack, top)->u.s.str)) { + dbg_printk("Filter warning: loading a NULL sequence.\n"); + ret = -EINVAL; + goto end; + } + estack_ax(stack, top)->u.s.literal_type = + ESTACK_STRING_LITERAL_TYPE_NONE; + next_pc += sizeof(struct load_op); + PO; + } + + END_OP +end: + /* return 0 (discard) on error */ + if (ret) + return 0; + return retval; +} + +#undef START_OP +#undef OP +#undef PO +#undef END_OP diff --git a/ltt/lttng-2.11.0/lttng-filter-specialize.c b/ltt/lttng-2.11.0/lttng-filter-specialize.c new file mode 100644 index 000000000000..4f9a0cd1833d --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-filter-specialize.c @@ -0,0 +1,1205 @@ +/* SPDX-License-Identifier: MIT + * + * lttng-filter-specialize.c + * + * LTTng modules filter code specializer. + * + * Copyright (C) 2010-2016 Mathieu Desnoyers + */ + +#include +#include +#include "lib/align.h" + +static ssize_t bytecode_reserve_data(struct bytecode_runtime *runtime, + size_t align, size_t len) +{ + ssize_t ret; + size_t padding = offset_align(runtime->data_len, align); + size_t new_len = runtime->data_len + padding + len; + size_t new_alloc_len = new_len; + size_t old_alloc_len = runtime->data_alloc_len; + + if (new_len > FILTER_MAX_DATA_LEN) + return -EINVAL; + + if (new_alloc_len > old_alloc_len) { + char *newptr; + + new_alloc_len = + max_t(size_t, 1U << get_count_order(new_alloc_len), old_alloc_len << 1); + newptr = krealloc(runtime->data, new_alloc_len, GFP_KERNEL); + if (!newptr) + return -ENOMEM; + runtime->data = newptr; + /* We zero directly the memory from start of allocation. */ + memset(&runtime->data[old_alloc_len], 0, new_alloc_len - old_alloc_len); + runtime->data_alloc_len = new_alloc_len; + } + runtime->data_len += padding; + ret = runtime->data_len; + runtime->data_len += len; + return ret; +} + +static ssize_t bytecode_push_data(struct bytecode_runtime *runtime, + const void *p, size_t align, size_t len) +{ + ssize_t offset; + + offset = bytecode_reserve_data(runtime, align, len); + if (offset < 0) + return -ENOMEM; + memcpy(&runtime->data[offset], p, len); + return offset; +} + +static int specialize_load_field(struct vstack_entry *stack_top, + struct load_op *insn) +{ + int ret; + + switch (stack_top->load.type) { + case LOAD_OBJECT: + break; + case LOAD_ROOT_CONTEXT: + case LOAD_ROOT_APP_CONTEXT: + case LOAD_ROOT_PAYLOAD: + default: + dbg_printk("Filter warning: cannot load root, missing field name.\n"); + ret = -EINVAL; + goto end; + } + switch (stack_top->load.object_type) { + case OBJECT_TYPE_S8: + dbg_printk("op load field s8\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_S8; + break; + case OBJECT_TYPE_S16: + dbg_printk("op load field s16\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_S16; + break; + case OBJECT_TYPE_S32: + dbg_printk("op load field s32\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_S32; + break; + case OBJECT_TYPE_S64: + dbg_printk("op load field s64\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_S64; + break; + case OBJECT_TYPE_U8: + dbg_printk("op load field u8\n"); + stack_top->type = REG_S64; + insn->op = FILTER_OP_LOAD_FIELD_U8; + break; + case OBJECT_TYPE_U16: + dbg_printk("op load field u16\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_U16; + break; + case OBJECT_TYPE_U32: + dbg_printk("op load field u32\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_U32; + break; + case OBJECT_TYPE_U64: + dbg_printk("op load field u64\n"); + stack_top->type = REG_S64; + if (!stack_top->load.rev_bo) + insn->op = FILTER_OP_LOAD_FIELD_U64; + break; + case OBJECT_TYPE_DOUBLE: + printk(KERN_WARNING "Double type unsupported\n\n"); + ret = -EINVAL; + goto end; + case OBJECT_TYPE_STRING: + dbg_printk("op load field string\n"); + stack_top->type = REG_STRING; + insn->op = FILTER_OP_LOAD_FIELD_STRING; + break; + case OBJECT_TYPE_STRING_SEQUENCE: + dbg_printk("op load field string sequence\n"); + stack_top->type = REG_STRING; + insn->op = FILTER_OP_LOAD_FIELD_SEQUENCE; + break; + case OBJECT_TYPE_DYNAMIC: + ret = -EINVAL; + goto end; + case OBJECT_TYPE_SEQUENCE: + case OBJECT_TYPE_ARRAY: + case OBJECT_TYPE_STRUCT: + case OBJECT_TYPE_VARIANT: + printk(KERN_WARNING "Sequences, arrays, struct and variant cannot be loaded (nested types).\n"); + ret = -EINVAL; + goto end; + } + return 0; + +end: + return ret; +} + +static int specialize_get_index_object_type(enum object_type *otype, + int signedness, uint32_t elem_len) +{ + switch (elem_len) { + case 8: + if (signedness) + *otype = OBJECT_TYPE_S8; + else + *otype = OBJECT_TYPE_U8; + break; + case 16: + if (signedness) + *otype = OBJECT_TYPE_S16; + else + *otype = OBJECT_TYPE_U16; + break; + case 32: + if (signedness) + *otype = OBJECT_TYPE_S32; + else + *otype = OBJECT_TYPE_U32; + break; + case 64: + if (signedness) + *otype = OBJECT_TYPE_S64; + else + *otype = OBJECT_TYPE_U64; + break; + default: + return -EINVAL; + } + return 0; +} + +static int specialize_get_index(struct bytecode_runtime *runtime, + struct load_op *insn, uint64_t index, + struct vstack_entry *stack_top, + int idx_len) +{ + int ret; + struct filter_get_index_data gid; + ssize_t data_offset; + + memset(&gid, 0, sizeof(gid)); + switch (stack_top->load.type) { + case LOAD_OBJECT: + switch (stack_top->load.object_type) { + case OBJECT_TYPE_ARRAY: + { + const struct lttng_event_field *field; + uint32_t elem_len, num_elems; + int signedness; + + field = stack_top->load.field; + elem_len = field->type.u.array.elem_type.u.basic.integer.size; + signedness = field->type.u.array.elem_type.u.basic.integer.signedness; + num_elems = field->type.u.array.length; + if (index >= num_elems) { + ret = -EINVAL; + goto end; + } + ret = specialize_get_index_object_type(&stack_top->load.object_type, + signedness, elem_len); + if (ret) + goto end; + gid.offset = index * (elem_len / CHAR_BIT); + gid.array_len = num_elems * (elem_len / CHAR_BIT); + gid.elem.type = stack_top->load.object_type; + gid.elem.len = elem_len; + if (field->type.u.array.elem_type.u.basic.integer.reverse_byte_order) + gid.elem.rev_bo = true; + stack_top->load.rev_bo = gid.elem.rev_bo; + break; + } + case OBJECT_TYPE_SEQUENCE: + { + const struct lttng_event_field *field; + uint32_t elem_len; + int signedness; + + field = stack_top->load.field; + elem_len = field->type.u.sequence.elem_type.u.basic.integer.size; + signedness = field->type.u.sequence.elem_type.u.basic.integer.signedness; + ret = specialize_get_index_object_type(&stack_top->load.object_type, + signedness, elem_len); + if (ret) + goto end; + gid.offset = index * (elem_len / CHAR_BIT); + gid.elem.type = stack_top->load.object_type; + gid.elem.len = elem_len; + if (field->type.u.sequence.elem_type.u.basic.integer.reverse_byte_order) + gid.elem.rev_bo = true; + stack_top->load.rev_bo = gid.elem.rev_bo; + break; + } + case OBJECT_TYPE_STRUCT: + /* Only generated by the specialize phase. */ + case OBJECT_TYPE_VARIANT: /* Fall-through */ + default: + printk(KERN_WARNING "Unexpected get index type %d", + (int) stack_top->load.object_type); + ret = -EINVAL; + goto end; + } + break; + case LOAD_ROOT_CONTEXT: + case LOAD_ROOT_APP_CONTEXT: + case LOAD_ROOT_PAYLOAD: + printk(KERN_WARNING "Index lookup for root field not implemented yet.\n"); + ret = -EINVAL; + goto end; + } + data_offset = bytecode_push_data(runtime, &gid, + __alignof__(gid), sizeof(gid)); + if (data_offset < 0) { + ret = -EINVAL; + goto end; + } + switch (idx_len) { + case 2: + ((struct get_index_u16 *) insn->data)->index = data_offset; + break; + case 8: + ((struct get_index_u64 *) insn->data)->index = data_offset; + break; + default: + ret = -EINVAL; + goto end; + } + + return 0; + +end: + return ret; +} + +static int specialize_context_lookup_name(struct bytecode_runtime *bytecode, + struct load_op *insn) +{ + uint16_t offset; + const char *name; + + offset = ((struct get_symbol *) insn->data)->offset; + name = bytecode->p.bc->bc.data + bytecode->p.bc->bc.reloc_offset + offset; + return lttng_get_context_index(lttng_static_ctx, name); +} + +static int specialize_load_object(const struct lttng_event_field *field, + struct vstack_load *load, bool is_context) +{ + load->type = LOAD_OBJECT; + /* + * LTTng-UST layout all integer fields as s64 on the stack for the filter. + */ + switch (field->type.atype) { + case atype_integer: + if (field->type.u.basic.integer.signedness) + load->object_type = OBJECT_TYPE_S64; + else + load->object_type = OBJECT_TYPE_U64; + load->rev_bo = false; + break; + case atype_enum: + { + const struct lttng_integer_type *itype = + &field->type.u.basic.enumeration.container_type; + + if (itype->signedness) + load->object_type = OBJECT_TYPE_S64; + else + load->object_type = OBJECT_TYPE_U64; + load->rev_bo = false; + break; + } + case atype_array: + if (field->type.u.array.elem_type.atype != atype_integer) { + printk(KERN_WARNING "Array nesting only supports integer types.\n"); + return -EINVAL; + } + if (is_context) { + load->object_type = OBJECT_TYPE_STRING; + } else { + if (field->type.u.array.elem_type.u.basic.integer.encoding == lttng_encode_none) { + load->object_type = OBJECT_TYPE_ARRAY; + load->field = field; + } else { + load->object_type = OBJECT_TYPE_STRING_SEQUENCE; + } + } + break; + case atype_sequence: + if (field->type.u.sequence.elem_type.atype != atype_integer) { + printk(KERN_WARNING "Sequence nesting only supports integer types.\n"); + return -EINVAL; + } + if (is_context) { + load->object_type = OBJECT_TYPE_STRING; + } else { + if (field->type.u.sequence.elem_type.u.basic.integer.encoding == lttng_encode_none) { + load->object_type = OBJECT_TYPE_SEQUENCE; + load->field = field; + } else { + load->object_type = OBJECT_TYPE_STRING_SEQUENCE; + } + } + break; + case atype_array_bitfield: + printk(KERN_WARNING "Bitfield array type is not supported.\n"); + return -EINVAL; + case atype_sequence_bitfield: + printk(KERN_WARNING "Bitfield sequence type is not supported.\n"); + return -EINVAL; + case atype_string: + load->object_type = OBJECT_TYPE_STRING; + break; + case atype_struct: + printk(KERN_WARNING "Structure type cannot be loaded.\n"); + return -EINVAL; + default: + printk(KERN_WARNING "Unknown type: %d", (int) field->type.atype); + return -EINVAL; + } + return 0; +} + +static int specialize_context_lookup(struct bytecode_runtime *runtime, + struct load_op *insn, + struct vstack_load *load) +{ + int idx, ret; + struct lttng_ctx_field *ctx_field; + struct lttng_event_field *field; + struct filter_get_index_data gid; + ssize_t data_offset; + + idx = specialize_context_lookup_name(runtime, insn); + if (idx < 0) { + return -ENOENT; + } + ctx_field = <tng_static_ctx->fields[idx]; + field = &ctx_field->event_field; + ret = specialize_load_object(field, load, true); + if (ret) + return ret; + /* Specialize each get_symbol into a get_index. */ + insn->op = FILTER_OP_GET_INDEX_U16; + memset(&gid, 0, sizeof(gid)); + gid.ctx_index = idx; + gid.elem.type = load->object_type; + data_offset = bytecode_push_data(runtime, &gid, + __alignof__(gid), sizeof(gid)); + if (data_offset < 0) { + return -EINVAL; + } + ((struct get_index_u16 *) insn->data)->index = data_offset; + return 0; +} + +static int specialize_event_payload_lookup(struct lttng_event *event, + struct bytecode_runtime *runtime, + struct load_op *insn, + struct vstack_load *load) +{ + const char *name; + uint16_t offset; + const struct lttng_event_desc *desc = event->desc; + unsigned int i, nr_fields; + bool found = false; + uint32_t field_offset = 0; + const struct lttng_event_field *field; + int ret; + struct filter_get_index_data gid; + ssize_t data_offset; + + nr_fields = desc->nr_fields; + offset = ((struct get_symbol *) insn->data)->offset; + name = runtime->p.bc->bc.data + runtime->p.bc->bc.reloc_offset + offset; + for (i = 0; i < nr_fields; i++) { + field = &desc->fields[i]; + if (!strcmp(field->name, name)) { + found = true; + break; + } + /* compute field offset on stack */ + switch (field->type.atype) { + case atype_integer: + case atype_enum: + field_offset += sizeof(int64_t); + break; + case atype_array: + case atype_sequence: + case atype_array_bitfield: + case atype_sequence_bitfield: + field_offset += sizeof(unsigned long); + field_offset += sizeof(void *); + break; + case atype_string: + field_offset += sizeof(void *); + break; + default: + ret = -EINVAL; + goto end; + } + } + if (!found) { + ret = -EINVAL; + goto end; + } + + ret = specialize_load_object(field, load, false); + if (ret) + goto end; + + /* Specialize each get_symbol into a get_index. */ + insn->op = FILTER_OP_GET_INDEX_U16; + memset(&gid, 0, sizeof(gid)); + gid.offset = field_offset; + gid.elem.type = load->object_type; + data_offset = bytecode_push_data(runtime, &gid, + __alignof__(gid), sizeof(gid)); + if (data_offset < 0) { + ret = -EINVAL; + goto end; + } + ((struct get_index_u16 *) insn->data)->index = data_offset; + ret = 0; +end: + return ret; +} + +int lttng_filter_specialize_bytecode(struct lttng_event *event, + struct bytecode_runtime *bytecode) +{ + void *pc, *next_pc, *start_pc; + int ret = -EINVAL; + struct vstack _stack; + struct vstack *stack = &_stack; + + vstack_init(stack); + + start_pc = &bytecode->code[0]; + for (pc = next_pc = start_pc; pc - start_pc < bytecode->len; + pc = next_pc) { + switch (*(filter_opcode_t *) pc) { + case FILTER_OP_UNKNOWN: + default: + printk(KERN_WARNING "unknown bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + case FILTER_OP_RETURN: + case FILTER_OP_RETURN_S64: + ret = 0; + goto end; + + /* binary */ + case FILTER_OP_MUL: + case FILTER_OP_DIV: + case FILTER_OP_MOD: + case FILTER_OP_PLUS: + case FILTER_OP_MINUS: + printk(KERN_WARNING "unsupported bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + + case FILTER_OP_EQ: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + if (vstack_bx(stack)->type == REG_STAR_GLOB_STRING) + insn->op = FILTER_OP_EQ_STAR_GLOB_STRING; + else + insn->op = FILTER_OP_EQ_STRING; + break; + case REG_STAR_GLOB_STRING: + insn->op = FILTER_OP_EQ_STAR_GLOB_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_EQ_S64; + else + insn->op = FILTER_OP_EQ_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_EQ_S64_DOUBLE; + else + insn->op = FILTER_OP_EQ_DOUBLE; + break; + } + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + case FILTER_OP_NE: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + if (vstack_bx(stack)->type == REG_STAR_GLOB_STRING) + insn->op = FILTER_OP_NE_STAR_GLOB_STRING; + else + insn->op = FILTER_OP_NE_STRING; + break; + case REG_STAR_GLOB_STRING: + insn->op = FILTER_OP_NE_STAR_GLOB_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_NE_S64; + else + insn->op = FILTER_OP_NE_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_NE_S64_DOUBLE; + else + insn->op = FILTER_OP_NE_DOUBLE; + break; + } + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + case FILTER_OP_GT: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "invalid register type for > binary operator\n"); + ret = -EINVAL; + goto end; + case REG_STRING: + insn->op = FILTER_OP_GT_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_GT_S64; + else + insn->op = FILTER_OP_GT_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_GT_S64_DOUBLE; + else + insn->op = FILTER_OP_GT_DOUBLE; + break; + } + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + case FILTER_OP_LT: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "invalid register type for < binary operator\n"); + ret = -EINVAL; + goto end; + case REG_STRING: + insn->op = FILTER_OP_LT_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_LT_S64; + else + insn->op = FILTER_OP_LT_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_LT_S64_DOUBLE; + else + insn->op = FILTER_OP_LT_DOUBLE; + break; + } + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + case FILTER_OP_GE: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "invalid register type for >= binary operator\n"); + ret = -EINVAL; + goto end; + case REG_STRING: + insn->op = FILTER_OP_GE_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_GE_S64; + else + insn->op = FILTER_OP_GE_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_GE_S64_DOUBLE; + else + insn->op = FILTER_OP_GE_DOUBLE; + break; + } + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + case FILTER_OP_LE: + { + struct binary_op *insn = (struct binary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "invalid register type for <= binary operator\n"); + ret = -EINVAL; + goto end; + case REG_STRING: + insn->op = FILTER_OP_LE_STRING; + break; + case REG_S64: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_LE_S64; + else + insn->op = FILTER_OP_LE_DOUBLE_S64; + break; + case REG_DOUBLE: + if (vstack_bx(stack)->type == REG_S64) + insn->op = FILTER_OP_LE_S64_DOUBLE; + else + insn->op = FILTER_OP_LE_DOUBLE; + break; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + case FILTER_OP_EQ_STRING: + case FILTER_OP_NE_STRING: + case FILTER_OP_GT_STRING: + case FILTER_OP_LT_STRING: + case FILTER_OP_GE_STRING: + case FILTER_OP_LE_STRING: + case FILTER_OP_EQ_STAR_GLOB_STRING: + case FILTER_OP_NE_STAR_GLOB_STRING: + case FILTER_OP_EQ_S64: + case FILTER_OP_NE_S64: + case FILTER_OP_GT_S64: + case FILTER_OP_LT_S64: + case FILTER_OP_GE_S64: + case FILTER_OP_LE_S64: + case FILTER_OP_EQ_DOUBLE: + case FILTER_OP_NE_DOUBLE: + case FILTER_OP_GT_DOUBLE: + case FILTER_OP_LT_DOUBLE: + case FILTER_OP_GE_DOUBLE: + case FILTER_OP_LE_DOUBLE: + case FILTER_OP_EQ_DOUBLE_S64: + case FILTER_OP_NE_DOUBLE_S64: + case FILTER_OP_GT_DOUBLE_S64: + case FILTER_OP_LT_DOUBLE_S64: + case FILTER_OP_GE_DOUBLE_S64: + case FILTER_OP_LE_DOUBLE_S64: + case FILTER_OP_EQ_S64_DOUBLE: + case FILTER_OP_NE_S64_DOUBLE: + case FILTER_OP_GT_S64_DOUBLE: + case FILTER_OP_LT_S64_DOUBLE: + case FILTER_OP_GE_S64_DOUBLE: + case FILTER_OP_LE_S64_DOUBLE: + case FILTER_OP_BIT_RSHIFT: + case FILTER_OP_BIT_LSHIFT: + case FILTER_OP_BIT_AND: + case FILTER_OP_BIT_OR: + case FILTER_OP_BIT_XOR: + { + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + /* unary */ + case FILTER_OP_UNARY_PLUS: + { + struct unary_op *insn = (struct unary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_S64: + insn->op = FILTER_OP_UNARY_PLUS_S64; + break; + case REG_DOUBLE: + insn->op = FILTER_OP_UNARY_PLUS_DOUBLE; + break; + } + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_MINUS: + { + struct unary_op *insn = (struct unary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_S64: + insn->op = FILTER_OP_UNARY_MINUS_S64; + break; + case REG_DOUBLE: + insn->op = FILTER_OP_UNARY_MINUS_DOUBLE; + break; + } + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_NOT: + { + struct unary_op *insn = (struct unary_op *) pc; + + switch(vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_S64: + insn->op = FILTER_OP_UNARY_NOT_S64; + break; + case REG_DOUBLE: + insn->op = FILTER_OP_UNARY_NOT_DOUBLE; + break; + } + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_BIT_NOT: + { + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_PLUS_S64: + case FILTER_OP_UNARY_MINUS_S64: + case FILTER_OP_UNARY_NOT_S64: + case FILTER_OP_UNARY_PLUS_DOUBLE: + case FILTER_OP_UNARY_MINUS_DOUBLE: + case FILTER_OP_UNARY_NOT_DOUBLE: + { + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + + /* logical */ + case FILTER_OP_AND: + case FILTER_OP_OR: + { + /* Continue to next instruction */ + /* Pop 1 when jump not taken */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct logical_op); + break; + } + + /* load field ref */ + case FILTER_OP_LOAD_FIELD_REF: + { + printk(KERN_WARNING "Unknown field ref type\n"); + ret = -EINVAL; + goto end; + } + /* get context ref */ + case FILTER_OP_GET_CONTEXT_REF: + { + printk(KERN_WARNING "Unknown get context ref type\n"); + ret = -EINVAL; + goto end; + } + case FILTER_OP_LOAD_FIELD_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_SEQUENCE: + case FILTER_OP_GET_CONTEXT_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + break; + } + case FILTER_OP_LOAD_FIELD_REF_S64: + case FILTER_OP_GET_CONTEXT_REF_S64: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + break; + } + case FILTER_OP_LOAD_FIELD_REF_DOUBLE: + case FILTER_OP_GET_CONTEXT_REF_DOUBLE: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_DOUBLE; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + break; + } + + /* load from immediate operand */ + case FILTER_OP_LOAD_STRING: + { + struct load_op *insn = (struct load_op *) pc; + + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + break; + } + + case FILTER_OP_LOAD_STAR_GLOB_STRING: + { + struct load_op *insn = (struct load_op *) pc; + + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STAR_GLOB_STRING; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + break; + } + + case FILTER_OP_LOAD_S64: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op) + + sizeof(struct literal_numeric); + break; + } + + case FILTER_OP_LOAD_DOUBLE: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_DOUBLE; + next_pc += sizeof(struct load_op) + + sizeof(struct literal_double); + break; + } + + /* cast */ + case FILTER_OP_CAST_TO_S64: + { + struct cast_op *insn = (struct cast_op *) pc; + + switch (vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "Cast op can only be applied to numeric or floating point registers\n"); + ret = -EINVAL; + goto end; + case REG_S64: + insn->op = FILTER_OP_CAST_NOP; + break; + case REG_DOUBLE: + insn->op = FILTER_OP_CAST_DOUBLE_TO_S64; + break; + } + /* Pop 1, push 1 */ + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct cast_op); + break; + } + case FILTER_OP_CAST_DOUBLE_TO_S64: + { + /* Pop 1, push 1 */ + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct cast_op); + break; + } + case FILTER_OP_CAST_NOP: + { + next_pc += sizeof(struct cast_op); + break; + } + + /* + * Instructions for recursive traversal through composed types. + */ + case FILTER_OP_GET_CONTEXT_ROOT: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_PTR; + vstack_ax(stack)->load.type = LOAD_ROOT_CONTEXT; + next_pc += sizeof(struct load_op); + break; + } + case FILTER_OP_GET_APP_CONTEXT_ROOT: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_PTR; + vstack_ax(stack)->load.type = LOAD_ROOT_APP_CONTEXT; + next_pc += sizeof(struct load_op); + break; + } + case FILTER_OP_GET_PAYLOAD_ROOT: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_PTR; + vstack_ax(stack)->load.type = LOAD_ROOT_PAYLOAD; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD: + { + struct load_op *insn = (struct load_op *) pc; + + WARN_ON_ONCE(vstack_ax(stack)->type != REG_PTR); + /* Pop 1, push 1 */ + ret = specialize_load_field(vstack_ax(stack), insn); + if (ret) + goto end; + + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_S8: + case FILTER_OP_LOAD_FIELD_S16: + case FILTER_OP_LOAD_FIELD_S32: + case FILTER_OP_LOAD_FIELD_S64: + case FILTER_OP_LOAD_FIELD_U8: + case FILTER_OP_LOAD_FIELD_U16: + case FILTER_OP_LOAD_FIELD_U32: + case FILTER_OP_LOAD_FIELD_U64: + { + /* Pop 1, push 1 */ + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_STRING: + case FILTER_OP_LOAD_FIELD_SEQUENCE: + { + /* Pop 1, push 1 */ + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_DOUBLE: + { + /* Pop 1, push 1 */ + vstack_ax(stack)->type = REG_DOUBLE; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_GET_SYMBOL: + { + struct load_op *insn = (struct load_op *) pc; + + dbg_printk("op get symbol\n"); + switch (vstack_ax(stack)->load.type) { + case LOAD_OBJECT: + printk(KERN_WARNING "Nested fields not implemented yet.\n"); + ret = -EINVAL; + goto end; + case LOAD_ROOT_CONTEXT: + /* Lookup context field. */ + ret = specialize_context_lookup(bytecode, insn, + &vstack_ax(stack)->load); + if (ret) + goto end; + break; + case LOAD_ROOT_APP_CONTEXT: + ret = -EINVAL; + goto end; + case LOAD_ROOT_PAYLOAD: + /* Lookup event payload field. */ + ret = specialize_event_payload_lookup(event, + bytecode, insn, + &vstack_ax(stack)->load); + if (ret) + goto end; + break; + } + next_pc += sizeof(struct load_op) + sizeof(struct get_symbol); + break; + } + + case FILTER_OP_GET_SYMBOL_FIELD: + { + /* Always generated by specialize phase. */ + ret = -EINVAL; + goto end; + } + + case FILTER_OP_GET_INDEX_U16: + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u16 *index = (struct get_index_u16 *) insn->data; + + dbg_printk("op get index u16\n"); + /* Pop 1, push 1 */ + ret = specialize_get_index(bytecode, insn, index->index, + vstack_ax(stack), sizeof(*index)); + if (ret) + goto end; + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u16); + break; + } + + case FILTER_OP_GET_INDEX_U64: + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u64 *index = (struct get_index_u64 *) insn->data; + + dbg_printk("op get index u64\n"); + /* Pop 1, push 1 */ + ret = specialize_get_index(bytecode, insn, index->index, + vstack_ax(stack), sizeof(*index)); + if (ret) + goto end; + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u64); + break; + } + + } + } +end: + return ret; +} diff --git a/ltt/lttng-2.11.0/lttng-filter-validator.c b/ltt/lttng-2.11.0/lttng-filter-validator.c new file mode 100644 index 000000000000..c479af08153c --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-filter-validator.c @@ -0,0 +1,1743 @@ +/* SPDX-License-Identifier: MIT + * + * lttng-filter-validator.c + * + * LTTng modules filter bytecode validator. + * + * Copyright (C) 2010-2016 Mathieu Desnoyers + */ + +#include +#include +#include + +#include +#include + +#define MERGE_POINT_TABLE_BITS 7 +#define MERGE_POINT_TABLE_SIZE (1U << MERGE_POINT_TABLE_BITS) + +/* merge point table node */ +struct mp_node { + struct hlist_node node; + + /* Context at merge point */ + struct vstack stack; + unsigned long target_pc; +}; + +struct mp_table { + struct hlist_head mp_head[MERGE_POINT_TABLE_SIZE]; +}; + +static +int lttng_hash_match(struct mp_node *mp_node, unsigned long key_pc) +{ + if (mp_node->target_pc == key_pc) + return 1; + else + return 0; +} + +static +int merge_points_compare(const struct vstack *stacka, + const struct vstack *stackb) +{ + int i, len; + + if (stacka->top != stackb->top) + return 1; + len = stacka->top + 1; + WARN_ON_ONCE(len < 0); + for (i = 0; i < len; i++) { + if (stacka->e[i].type != stackb->e[i].type) + return 1; + } + return 0; +} + +static +int merge_point_add_check(struct mp_table *mp_table, unsigned long target_pc, + const struct vstack *stack) +{ + struct mp_node *mp_node; + unsigned long hash = jhash_1word(target_pc, 0); + struct hlist_head *head; + struct mp_node *lookup_node; + int found = 0; + + dbg_printk("Filter: adding merge point at offset %lu, hash %lu\n", + target_pc, hash); + mp_node = kzalloc(sizeof(struct mp_node), GFP_KERNEL); + if (!mp_node) + return -ENOMEM; + mp_node->target_pc = target_pc; + memcpy(&mp_node->stack, stack, sizeof(mp_node->stack)); + + head = &mp_table->mp_head[hash & (MERGE_POINT_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry(lookup_node, head, node) { + if (lttng_hash_match(lookup_node, target_pc)) { + found = 1; + break; + } + } + if (found) { + /* Key already present */ + dbg_printk("Filter: compare merge points for offset %lu, hash %lu\n", + target_pc, hash); + kfree(mp_node); + if (merge_points_compare(stack, &lookup_node->stack)) { + printk(KERN_WARNING "Merge points differ for offset %lu\n", + target_pc); + return -EINVAL; + } + } else { + hlist_add_head(&mp_node->node, head); + } + return 0; +} + +/* + * Binary comparators use top of stack and top of stack -1. + */ +static +int bin_op_compare_check(struct vstack *stack, const filter_opcode_t opcode, + const char *str) +{ + if (unlikely(!vstack_ax(stack) || !vstack_bx(stack))) + goto error_empty; + + switch (vstack_ax(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + + case REG_STRING: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + goto unknown; + case REG_STRING: + break; + case REG_STAR_GLOB_STRING: + if (opcode != FILTER_OP_EQ && opcode != FILTER_OP_NE) { + goto error_mismatch; + } + break; + case REG_S64: + goto error_mismatch; + } + break; + case REG_STAR_GLOB_STRING: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + goto unknown; + case REG_STRING: + if (opcode != FILTER_OP_EQ && opcode != FILTER_OP_NE) { + goto error_mismatch; + } + break; + case REG_STAR_GLOB_STRING: + case REG_S64: + goto error_mismatch; + } + break; + case REG_S64: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + goto unknown; + case REG_STRING: + case REG_STAR_GLOB_STRING: + goto error_mismatch; + case REG_S64: + break; + } + break; + case REG_TYPE_UNKNOWN: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + case REG_STRING: + case REG_STAR_GLOB_STRING: + case REG_S64: + goto unknown; + } + break; + } + return 0; + +unknown: + return 1; + +error_empty: + printk(KERN_WARNING "empty stack for '%s' binary operator\n", str); + return -EINVAL; + +error_mismatch: + printk(KERN_WARNING "type mismatch for '%s' binary operator\n", str); + return -EINVAL; + +error_type: + printk(KERN_WARNING "unknown type for '%s' binary operator\n", str); + return -EINVAL; +} + +/* + * Binary bitwise operators use top of stack and top of stack -1. + * Return 0 if typing is known to match, 1 if typing is dynamic + * (unknown), negative error value on error. + */ +static +int bin_op_bitwise_check(struct vstack *stack, filter_opcode_t opcode, + const char *str) +{ + if (unlikely(!vstack_ax(stack) || !vstack_bx(stack))) + goto error_empty; + + switch (vstack_ax(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + + case REG_TYPE_UNKNOWN: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + case REG_STRING: + case REG_STAR_GLOB_STRING: + case REG_S64: + goto unknown; + } + break; + case REG_S64: + switch (vstack_bx(stack)->type) { + default: + case REG_DOUBLE: + goto error_type; + case REG_TYPE_UNKNOWN: + goto unknown; + case REG_S64: + break; + } + break; + } + return 0; + +unknown: + return 1; + +error_empty: + printk(KERN_WARNING "empty stack for '%s' binary operator\n", str); + return -EINVAL; + +error_type: + printk(KERN_WARNING "unknown type for '%s' binary operator\n", str); + return -EINVAL; +} + +static +int validate_get_symbol(struct bytecode_runtime *bytecode, + const struct get_symbol *sym) +{ + const char *str, *str_limit; + size_t len_limit; + + if (sym->offset >= bytecode->p.bc->bc.len - bytecode->p.bc->bc.reloc_offset) + return -EINVAL; + + str = bytecode->p.bc->bc.data + bytecode->p.bc->bc.reloc_offset + sym->offset; + str_limit = bytecode->p.bc->bc.data + bytecode->p.bc->bc.len; + len_limit = str_limit - str; + if (strnlen(str, len_limit) == len_limit) + return -EINVAL; + return 0; +} + +/* + * Validate bytecode range overflow within the validation pass. + * Called for each instruction encountered. + */ +static +int bytecode_validate_overflow(struct bytecode_runtime *bytecode, + char *start_pc, char *pc) +{ + int ret = 0; + + switch (*(filter_opcode_t *) pc) { + case FILTER_OP_UNKNOWN: + default: + { + printk(KERN_WARNING "unknown bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + break; + } + + case FILTER_OP_RETURN: + case FILTER_OP_RETURN_S64: + { + if (unlikely(pc + sizeof(struct return_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* binary */ + case FILTER_OP_MUL: + case FILTER_OP_DIV: + case FILTER_OP_MOD: + case FILTER_OP_PLUS: + case FILTER_OP_MINUS: + case FILTER_OP_EQ_DOUBLE: + case FILTER_OP_NE_DOUBLE: + case FILTER_OP_GT_DOUBLE: + case FILTER_OP_LT_DOUBLE: + case FILTER_OP_GE_DOUBLE: + case FILTER_OP_LE_DOUBLE: + /* Floating point */ + case FILTER_OP_EQ_DOUBLE_S64: + case FILTER_OP_NE_DOUBLE_S64: + case FILTER_OP_GT_DOUBLE_S64: + case FILTER_OP_LT_DOUBLE_S64: + case FILTER_OP_GE_DOUBLE_S64: + case FILTER_OP_LE_DOUBLE_S64: + case FILTER_OP_EQ_S64_DOUBLE: + case FILTER_OP_NE_S64_DOUBLE: + case FILTER_OP_GT_S64_DOUBLE: + case FILTER_OP_LT_S64_DOUBLE: + case FILTER_OP_GE_S64_DOUBLE: + case FILTER_OP_LE_S64_DOUBLE: + case FILTER_OP_LOAD_FIELD_REF_DOUBLE: + case FILTER_OP_GET_CONTEXT_REF_DOUBLE: + case FILTER_OP_LOAD_DOUBLE: + case FILTER_OP_CAST_DOUBLE_TO_S64: + case FILTER_OP_UNARY_PLUS_DOUBLE: + case FILTER_OP_UNARY_MINUS_DOUBLE: + case FILTER_OP_UNARY_NOT_DOUBLE: + { + printk(KERN_WARNING "unsupported bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + break; + } + + case FILTER_OP_EQ: + case FILTER_OP_NE: + case FILTER_OP_GT: + case FILTER_OP_LT: + case FILTER_OP_GE: + case FILTER_OP_LE: + case FILTER_OP_EQ_STRING: + case FILTER_OP_NE_STRING: + case FILTER_OP_GT_STRING: + case FILTER_OP_LT_STRING: + case FILTER_OP_GE_STRING: + case FILTER_OP_LE_STRING: + case FILTER_OP_EQ_STAR_GLOB_STRING: + case FILTER_OP_NE_STAR_GLOB_STRING: + case FILTER_OP_EQ_S64: + case FILTER_OP_NE_S64: + case FILTER_OP_GT_S64: + case FILTER_OP_LT_S64: + case FILTER_OP_GE_S64: + case FILTER_OP_LE_S64: + case FILTER_OP_BIT_RSHIFT: + case FILTER_OP_BIT_LSHIFT: + case FILTER_OP_BIT_AND: + case FILTER_OP_BIT_OR: + case FILTER_OP_BIT_XOR: + { + if (unlikely(pc + sizeof(struct binary_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* unary */ + case FILTER_OP_UNARY_PLUS: + case FILTER_OP_UNARY_MINUS: + case FILTER_OP_UNARY_NOT: + case FILTER_OP_UNARY_PLUS_S64: + case FILTER_OP_UNARY_MINUS_S64: + case FILTER_OP_UNARY_NOT_S64: + case FILTER_OP_UNARY_BIT_NOT: + { + if (unlikely(pc + sizeof(struct unary_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* logical */ + case FILTER_OP_AND: + case FILTER_OP_OR: + { + if (unlikely(pc + sizeof(struct logical_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* load field ref */ + case FILTER_OP_LOAD_FIELD_REF: + { + printk(KERN_WARNING "Unknown field ref type\n"); + ret = -EINVAL; + break; + } + + /* get context ref */ + case FILTER_OP_GET_CONTEXT_REF: + { + printk(KERN_WARNING "Unknown field ref type\n"); + ret = -EINVAL; + break; + } + case FILTER_OP_LOAD_FIELD_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_SEQUENCE: + case FILTER_OP_LOAD_FIELD_REF_USER_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE: + case FILTER_OP_LOAD_FIELD_REF_S64: + case FILTER_OP_GET_CONTEXT_REF_STRING: + case FILTER_OP_GET_CONTEXT_REF_S64: + { + if (unlikely(pc + sizeof(struct load_op) + sizeof(struct field_ref) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* load from immediate operand */ + case FILTER_OP_LOAD_STRING: + case FILTER_OP_LOAD_STAR_GLOB_STRING: + { + struct load_op *insn = (struct load_op *) pc; + uint32_t str_len, maxlen; + + if (unlikely(pc + sizeof(struct load_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + break; + } + + maxlen = start_pc + bytecode->len - pc - sizeof(struct load_op); + str_len = strnlen(insn->data, maxlen); + if (unlikely(str_len >= maxlen)) { + /* Final '\0' not found within range */ + ret = -ERANGE; + } + break; + } + + case FILTER_OP_LOAD_S64: + { + if (unlikely(pc + sizeof(struct load_op) + sizeof(struct literal_numeric) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + case FILTER_OP_CAST_TO_S64: + case FILTER_OP_CAST_NOP: + { + if (unlikely(pc + sizeof(struct cast_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + /* + * Instructions for recursive traversal through composed types. + */ + case FILTER_OP_GET_CONTEXT_ROOT: + case FILTER_OP_GET_APP_CONTEXT_ROOT: + case FILTER_OP_GET_PAYLOAD_ROOT: + case FILTER_OP_LOAD_FIELD: + case FILTER_OP_LOAD_FIELD_S8: + case FILTER_OP_LOAD_FIELD_S16: + case FILTER_OP_LOAD_FIELD_S32: + case FILTER_OP_LOAD_FIELD_S64: + case FILTER_OP_LOAD_FIELD_U8: + case FILTER_OP_LOAD_FIELD_U16: + case FILTER_OP_LOAD_FIELD_U32: + case FILTER_OP_LOAD_FIELD_U64: + case FILTER_OP_LOAD_FIELD_STRING: + case FILTER_OP_LOAD_FIELD_SEQUENCE: + case FILTER_OP_LOAD_FIELD_DOUBLE: + if (unlikely(pc + sizeof(struct load_op) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + + case FILTER_OP_GET_SYMBOL: + { + struct load_op *insn = (struct load_op *) pc; + struct get_symbol *sym = (struct get_symbol *) insn->data; + + if (unlikely(pc + sizeof(struct load_op) + sizeof(struct get_symbol) + > start_pc + bytecode->len)) { + ret = -ERANGE; + break; + } + ret = validate_get_symbol(bytecode, sym); + break; + } + + case FILTER_OP_GET_SYMBOL_FIELD: + printk(KERN_WARNING "Unexpected get symbol field\n"); + ret = -EINVAL; + break; + + case FILTER_OP_GET_INDEX_U16: + if (unlikely(pc + sizeof(struct load_op) + sizeof(struct get_index_u16) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + + case FILTER_OP_GET_INDEX_U64: + if (unlikely(pc + sizeof(struct load_op) + sizeof(struct get_index_u64) + > start_pc + bytecode->len)) { + ret = -ERANGE; + } + break; + } + + return ret; +} + +static +unsigned long delete_all_nodes(struct mp_table *mp_table) +{ + struct mp_node *mp_node; + struct hlist_node *tmp; + unsigned long nr_nodes = 0; + int i; + + for (i = 0; i < MERGE_POINT_TABLE_SIZE; i++) { + struct hlist_head *head; + + head = &mp_table->mp_head[i]; + lttng_hlist_for_each_entry_safe(mp_node, tmp, head, node) { + kfree(mp_node); + nr_nodes++; + } + } + return nr_nodes; +} + +/* + * Return value: + * >=0: success + * <0: error + */ +static +int validate_instruction_context(struct bytecode_runtime *bytecode, + struct vstack *stack, + char *start_pc, + char *pc) +{ + int ret = 0; + const filter_opcode_t opcode = *(filter_opcode_t *) pc; + + switch (opcode) { + case FILTER_OP_UNKNOWN: + default: + { + printk(KERN_WARNING "unknown bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + } + + case FILTER_OP_RETURN: + case FILTER_OP_RETURN_S64: + { + goto end; + } + + /* binary */ + case FILTER_OP_MUL: + case FILTER_OP_DIV: + case FILTER_OP_MOD: + case FILTER_OP_PLUS: + case FILTER_OP_MINUS: + /* Floating point */ + case FILTER_OP_EQ_DOUBLE: + case FILTER_OP_NE_DOUBLE: + case FILTER_OP_GT_DOUBLE: + case FILTER_OP_LT_DOUBLE: + case FILTER_OP_GE_DOUBLE: + case FILTER_OP_LE_DOUBLE: + case FILTER_OP_EQ_DOUBLE_S64: + case FILTER_OP_NE_DOUBLE_S64: + case FILTER_OP_GT_DOUBLE_S64: + case FILTER_OP_LT_DOUBLE_S64: + case FILTER_OP_GE_DOUBLE_S64: + case FILTER_OP_LE_DOUBLE_S64: + case FILTER_OP_EQ_S64_DOUBLE: + case FILTER_OP_NE_S64_DOUBLE: + case FILTER_OP_GT_S64_DOUBLE: + case FILTER_OP_LT_S64_DOUBLE: + case FILTER_OP_GE_S64_DOUBLE: + case FILTER_OP_LE_S64_DOUBLE: + case FILTER_OP_UNARY_PLUS_DOUBLE: + case FILTER_OP_UNARY_MINUS_DOUBLE: + case FILTER_OP_UNARY_NOT_DOUBLE: + case FILTER_OP_LOAD_FIELD_REF_DOUBLE: + case FILTER_OP_LOAD_DOUBLE: + case FILTER_OP_CAST_DOUBLE_TO_S64: + case FILTER_OP_GET_CONTEXT_REF_DOUBLE: + { + printk(KERN_WARNING "unsupported bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + } + + case FILTER_OP_EQ: + { + ret = bin_op_compare_check(stack, opcode, "=="); + if (ret < 0) + goto end; + break; + } + case FILTER_OP_NE: + { + ret = bin_op_compare_check(stack, opcode, "!="); + if (ret < 0) + goto end; + break; + } + case FILTER_OP_GT: + { + ret = bin_op_compare_check(stack, opcode, ">"); + if (ret < 0) + goto end; + break; + } + case FILTER_OP_LT: + { + ret = bin_op_compare_check(stack, opcode, "<"); + if (ret < 0) + goto end; + break; + } + case FILTER_OP_GE: + { + ret = bin_op_compare_check(stack, opcode, ">="); + if (ret < 0) + goto end; + break; + } + case FILTER_OP_LE: + { + ret = bin_op_compare_check(stack, opcode, "<="); + if (ret < 0) + goto end; + break; + } + + case FILTER_OP_EQ_STRING: + case FILTER_OP_NE_STRING: + case FILTER_OP_GT_STRING: + case FILTER_OP_LT_STRING: + case FILTER_OP_GE_STRING: + case FILTER_OP_LE_STRING: + { + if (!vstack_ax(stack) || !vstack_bx(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_STRING + || vstack_bx(stack)->type != REG_STRING) { + printk(KERN_WARNING "Unexpected register type for string comparator\n"); + ret = -EINVAL; + goto end; + } + break; + } + + + case FILTER_OP_EQ_STAR_GLOB_STRING: + case FILTER_OP_NE_STAR_GLOB_STRING: + { + if (!vstack_ax(stack) || !vstack_bx(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_STAR_GLOB_STRING + && vstack_bx(stack)->type != REG_STAR_GLOB_STRING) { + printk(KERN_WARNING "Unexpected register type for globbing pattern comparator\n"); + ret = -EINVAL; + goto end; + } + break; + } + + case FILTER_OP_EQ_S64: + case FILTER_OP_NE_S64: + case FILTER_OP_GT_S64: + case FILTER_OP_LT_S64: + case FILTER_OP_GE_S64: + case FILTER_OP_LE_S64: + { + if (!vstack_ax(stack) || !vstack_bx(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_S64 + || vstack_bx(stack)->type != REG_S64) { + printk(KERN_WARNING "Unexpected register type for s64 comparator\n"); + ret = -EINVAL; + goto end; + } + break; + } + + case FILTER_OP_BIT_RSHIFT: + ret = bin_op_bitwise_check(stack, opcode, ">>"); + if (ret < 0) + goto end; + break; + case FILTER_OP_BIT_LSHIFT: + ret = bin_op_bitwise_check(stack, opcode, "<<"); + if (ret < 0) + goto end; + break; + case FILTER_OP_BIT_AND: + ret = bin_op_bitwise_check(stack, opcode, "&"); + if (ret < 0) + goto end; + break; + case FILTER_OP_BIT_OR: + ret = bin_op_bitwise_check(stack, opcode, "|"); + if (ret < 0) + goto end; + break; + case FILTER_OP_BIT_XOR: + ret = bin_op_bitwise_check(stack, opcode, "^"); + if (ret < 0) + goto end; + break; + + /* unary */ + case FILTER_OP_UNARY_PLUS: + case FILTER_OP_UNARY_MINUS: + case FILTER_OP_UNARY_NOT: + { + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + default: + case REG_DOUBLE: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "Unary op can only be applied to numeric or floating point registers\n"); + ret = -EINVAL; + goto end; + case REG_S64: + case REG_TYPE_UNKNOWN: + break; + } + break; + } + case FILTER_OP_UNARY_BIT_NOT: + { + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + default: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + case REG_STAR_GLOB_STRING: + case REG_DOUBLE: + printk(KERN_WARNING "Unary bitwise op can only be applied to numeric registers\n"); + ret = -EINVAL; + goto end; + case REG_S64: + break; + case REG_TYPE_UNKNOWN: + break; + } + break; + } + + case FILTER_OP_UNARY_PLUS_S64: + case FILTER_OP_UNARY_MINUS_S64: + case FILTER_OP_UNARY_NOT_S64: + { + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_S64) { + printk(KERN_WARNING "Invalid register type\n"); + ret = -EINVAL; + goto end; + } + break; + } + + /* logical */ + case FILTER_OP_AND: + case FILTER_OP_OR: + { + struct logical_op *insn = (struct logical_op *) pc; + + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_S64) { + printk(KERN_WARNING "Logical comparator expects S64 register\n"); + ret = -EINVAL; + goto end; + } + + dbg_printk("Validate jumping to bytecode offset %u\n", + (unsigned int) insn->skip_offset); + if (unlikely(start_pc + insn->skip_offset <= pc)) { + printk(KERN_WARNING "Loops are not allowed in bytecode\n"); + ret = -EINVAL; + goto end; + } + break; + } + + /* load field ref */ + case FILTER_OP_LOAD_FIELD_REF: + { + printk(KERN_WARNING "Unknown field ref type\n"); + ret = -EINVAL; + goto end; + } + case FILTER_OP_LOAD_FIELD_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_SEQUENCE: + case FILTER_OP_LOAD_FIELD_REF_USER_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE: + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("Validate load field ref offset %u type string\n", + ref->offset); + break; + } + case FILTER_OP_LOAD_FIELD_REF_S64: + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("Validate load field ref offset %u type s64\n", + ref->offset); + break; + } + + /* load from immediate operand */ + case FILTER_OP_LOAD_STRING: + case FILTER_OP_LOAD_STAR_GLOB_STRING: + { + break; + } + + case FILTER_OP_LOAD_S64: + { + break; + } + + case FILTER_OP_CAST_TO_S64: + { + struct cast_op *insn = (struct cast_op *) pc; + + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + default: + case REG_DOUBLE: + printk(KERN_WARNING "unknown register type\n"); + ret = -EINVAL; + goto end; + + case REG_STRING: + case REG_STAR_GLOB_STRING: + printk(KERN_WARNING "Cast op can only be applied to numeric or floating point registers\n"); + ret = -EINVAL; + goto end; + case REG_S64: + break; + } + if (insn->op == FILTER_OP_CAST_DOUBLE_TO_S64) { + if (vstack_ax(stack)->type != REG_DOUBLE) { + printk(KERN_WARNING "Cast expects double\n"); + ret = -EINVAL; + goto end; + } + } + break; + } + case FILTER_OP_CAST_NOP: + { + break; + } + + /* get context ref */ + case FILTER_OP_GET_CONTEXT_REF: + { + printk(KERN_WARNING "Unknown get context ref type\n"); + ret = -EINVAL; + goto end; + } + case FILTER_OP_GET_CONTEXT_REF_STRING: + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("Validate get context ref offset %u type string\n", + ref->offset); + break; + } + case FILTER_OP_GET_CONTEXT_REF_S64: + { + struct load_op *insn = (struct load_op *) pc; + struct field_ref *ref = (struct field_ref *) insn->data; + + dbg_printk("Validate get context ref offset %u type s64\n", + ref->offset); + break; + } + + /* + * Instructions for recursive traversal through composed types. + */ + case FILTER_OP_GET_CONTEXT_ROOT: + { + dbg_printk("Validate get context root\n"); + break; + } + case FILTER_OP_GET_APP_CONTEXT_ROOT: + { + dbg_printk("Validate get app context root\n"); + break; + } + case FILTER_OP_GET_PAYLOAD_ROOT: + { + dbg_printk("Validate get payload root\n"); + break; + } + case FILTER_OP_LOAD_FIELD: + { + /* + * We tolerate that field type is unknown at validation, + * because we are performing the load specialization in + * a phase after validation. + */ + dbg_printk("Validate load field\n"); + break; + } + case FILTER_OP_LOAD_FIELD_S8: + { + dbg_printk("Validate load field s8\n"); + break; + } + case FILTER_OP_LOAD_FIELD_S16: + { + dbg_printk("Validate load field s16\n"); + break; + } + case FILTER_OP_LOAD_FIELD_S32: + { + dbg_printk("Validate load field s32\n"); + break; + } + case FILTER_OP_LOAD_FIELD_S64: + { + dbg_printk("Validate load field s64\n"); + break; + } + case FILTER_OP_LOAD_FIELD_U8: + { + dbg_printk("Validate load field u8\n"); + break; + } + case FILTER_OP_LOAD_FIELD_U16: + { + dbg_printk("Validate load field u16\n"); + break; + } + case FILTER_OP_LOAD_FIELD_U32: + { + dbg_printk("Validate load field u32\n"); + break; + } + case FILTER_OP_LOAD_FIELD_U64: + { + dbg_printk("Validate load field u64\n"); + break; + } + case FILTER_OP_LOAD_FIELD_STRING: + { + dbg_printk("Validate load field string\n"); + break; + } + case FILTER_OP_LOAD_FIELD_SEQUENCE: + { + dbg_printk("Validate load field sequence\n"); + break; + } + case FILTER_OP_LOAD_FIELD_DOUBLE: + { + dbg_printk("Validate load field double\n"); + break; + } + + case FILTER_OP_GET_SYMBOL: + { + struct load_op *insn = (struct load_op *) pc; + struct get_symbol *sym = (struct get_symbol *) insn->data; + + dbg_printk("Validate get symbol offset %u\n", sym->offset); + break; + } + + case FILTER_OP_GET_SYMBOL_FIELD: + { + struct load_op *insn = (struct load_op *) pc; + struct get_symbol *sym = (struct get_symbol *) insn->data; + + dbg_printk("Validate get symbol field offset %u\n", sym->offset); + break; + } + + case FILTER_OP_GET_INDEX_U16: + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u16 *get_index = (struct get_index_u16 *) insn->data; + + dbg_printk("Validate get index u16 index %u\n", get_index->index); + break; + } + + case FILTER_OP_GET_INDEX_U64: + { + struct load_op *insn = (struct load_op *) pc; + struct get_index_u64 *get_index = (struct get_index_u64 *) insn->data; + + dbg_printk("Validate get index u64 index %llu\n", + (unsigned long long) get_index->index); + break; + } + } +end: + return ret; +} + +/* + * Return value: + * 0: success + * <0: error + */ +static +int validate_instruction_all_contexts(struct bytecode_runtime *bytecode, + struct mp_table *mp_table, + struct vstack *stack, + char *start_pc, + char *pc) +{ + int ret, found = 0; + unsigned long target_pc = pc - start_pc; + unsigned long hash; + struct hlist_head *head; + struct mp_node *mp_node; + + /* Validate the context resulting from the previous instruction */ + ret = validate_instruction_context(bytecode, stack, start_pc, pc); + if (ret < 0) + return ret; + + /* Validate merge points */ + hash = jhash_1word(target_pc, 0); + head = &mp_table->mp_head[hash & (MERGE_POINT_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry(mp_node, head, node) { + if (lttng_hash_match(mp_node, target_pc)) { + found = 1; + break; + } + } + if (found) { + dbg_printk("Filter: validate merge point at offset %lu\n", + target_pc); + if (merge_points_compare(stack, &mp_node->stack)) { + printk(KERN_WARNING "Merge points differ for offset %lu\n", + target_pc); + return -EINVAL; + } + /* Once validated, we can remove the merge point */ + dbg_printk("Filter: remove merge point at offset %lu\n", + target_pc); + hlist_del(&mp_node->node); + } + return 0; +} + +/* + * Return value: + * >0: going to next insn. + * 0: success, stop iteration. + * <0: error + */ +static +int exec_insn(struct bytecode_runtime *bytecode, + struct mp_table *mp_table, + struct vstack *stack, + char **_next_pc, + char *pc) +{ + int ret = 1; + char *next_pc = *_next_pc; + + switch (*(filter_opcode_t *) pc) { + case FILTER_OP_UNKNOWN: + default: + { + printk(KERN_WARNING "unknown bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + } + + case FILTER_OP_RETURN: + { + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_TYPE_UNKNOWN: + break; + default: + printk(KERN_WARNING "Unexpected register type %d at end of bytecode\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + ret = 0; + goto end; + } + + case FILTER_OP_RETURN_S64: + { + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + break; + default: + case REG_TYPE_UNKNOWN: + printk(KERN_WARNING "Unexpected register type %d at end of bytecode\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + ret = 0; + goto end; + } + + /* binary */ + case FILTER_OP_MUL: + case FILTER_OP_DIV: + case FILTER_OP_MOD: + case FILTER_OP_PLUS: + case FILTER_OP_MINUS: + /* Floating point */ + case FILTER_OP_EQ_DOUBLE: + case FILTER_OP_NE_DOUBLE: + case FILTER_OP_GT_DOUBLE: + case FILTER_OP_LT_DOUBLE: + case FILTER_OP_GE_DOUBLE: + case FILTER_OP_LE_DOUBLE: + case FILTER_OP_EQ_DOUBLE_S64: + case FILTER_OP_NE_DOUBLE_S64: + case FILTER_OP_GT_DOUBLE_S64: + case FILTER_OP_LT_DOUBLE_S64: + case FILTER_OP_GE_DOUBLE_S64: + case FILTER_OP_LE_DOUBLE_S64: + case FILTER_OP_EQ_S64_DOUBLE: + case FILTER_OP_NE_S64_DOUBLE: + case FILTER_OP_GT_S64_DOUBLE: + case FILTER_OP_LT_S64_DOUBLE: + case FILTER_OP_GE_S64_DOUBLE: + case FILTER_OP_LE_S64_DOUBLE: + case FILTER_OP_UNARY_PLUS_DOUBLE: + case FILTER_OP_UNARY_MINUS_DOUBLE: + case FILTER_OP_UNARY_NOT_DOUBLE: + case FILTER_OP_LOAD_FIELD_REF_DOUBLE: + case FILTER_OP_GET_CONTEXT_REF_DOUBLE: + case FILTER_OP_LOAD_DOUBLE: + case FILTER_OP_CAST_DOUBLE_TO_S64: + { + printk(KERN_WARNING "unsupported bytecode op %u\n", + (unsigned int) *(filter_opcode_t *) pc); + ret = -EINVAL; + goto end; + } + + case FILTER_OP_EQ: + case FILTER_OP_NE: + case FILTER_OP_GT: + case FILTER_OP_LT: + case FILTER_OP_GE: + case FILTER_OP_LE: + case FILTER_OP_EQ_STRING: + case FILTER_OP_NE_STRING: + case FILTER_OP_GT_STRING: + case FILTER_OP_LT_STRING: + case FILTER_OP_GE_STRING: + case FILTER_OP_LE_STRING: + case FILTER_OP_EQ_STAR_GLOB_STRING: + case FILTER_OP_NE_STAR_GLOB_STRING: + case FILTER_OP_EQ_S64: + case FILTER_OP_NE_S64: + case FILTER_OP_GT_S64: + case FILTER_OP_LT_S64: + case FILTER_OP_GE_S64: + case FILTER_OP_LE_S64: + case FILTER_OP_BIT_RSHIFT: + case FILTER_OP_BIT_LSHIFT: + case FILTER_OP_BIT_AND: + case FILTER_OP_BIT_OR: + case FILTER_OP_BIT_XOR: + { + /* Pop 2, push 1 */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_DOUBLE: + case REG_STRING: + case REG_STAR_GLOB_STRING: + case REG_TYPE_UNKNOWN: + break; + default: + printk(KERN_WARNING "Unexpected register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct binary_op); + break; + } + + /* unary */ + case FILTER_OP_UNARY_PLUS: + case FILTER_OP_UNARY_MINUS: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_TYPE_UNKNOWN: + break; + default: + printk(KERN_WARNING "Unexpected register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + vstack_ax(stack)->type = REG_TYPE_UNKNOWN; + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_PLUS_S64: + case FILTER_OP_UNARY_MINUS_S64: + case FILTER_OP_UNARY_NOT_S64: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + break; + default: + printk(KERN_WARNING "Unexpected register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_NOT: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_TYPE_UNKNOWN: + break; + default: + printk(KERN_WARNING "Unexpected register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct unary_op); + break; + } + + case FILTER_OP_UNARY_BIT_NOT: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_TYPE_UNKNOWN: + break; + case REG_DOUBLE: + default: + printk(KERN_WARNING "Unexpected register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct unary_op); + break; + } + + /* logical */ + case FILTER_OP_AND: + case FILTER_OP_OR: + { + struct logical_op *insn = (struct logical_op *) pc; + int merge_ret; + + /* Add merge point to table */ + merge_ret = merge_point_add_check(mp_table, + insn->skip_offset, stack); + if (merge_ret) { + ret = merge_ret; + goto end; + } + + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + /* There is always a cast-to-s64 operation before a or/and op. */ + switch (vstack_ax(stack)->type) { + case REG_S64: + break; + default: + printk(KERN_WARNING "Incorrect register type %d for operation\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + + /* Continue to next instruction */ + /* Pop 1 when jump not taken */ + if (vstack_pop(stack)) { + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct logical_op); + break; + } + + /* load field ref */ + case FILTER_OP_LOAD_FIELD_REF: + { + printk(KERN_WARNING "Unknown field ref type\n"); + ret = -EINVAL; + goto end; + } + /* get context ref */ + case FILTER_OP_GET_CONTEXT_REF: + { + printk(KERN_WARNING "Unknown get context ref type\n"); + ret = -EINVAL; + goto end; + } + case FILTER_OP_LOAD_FIELD_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_SEQUENCE: + case FILTER_OP_GET_CONTEXT_REF_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_STRING: + case FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + break; + } + case FILTER_OP_LOAD_FIELD_REF_S64: + case FILTER_OP_GET_CONTEXT_REF_S64: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op) + sizeof(struct field_ref); + break; + } + + /* load from immediate operand */ + case FILTER_OP_LOAD_STRING: + { + struct load_op *insn = (struct load_op *) pc; + + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + break; + } + + case FILTER_OP_LOAD_STAR_GLOB_STRING: + { + struct load_op *insn = (struct load_op *) pc; + + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STAR_GLOB_STRING; + next_pc += sizeof(struct load_op) + strlen(insn->data) + 1; + break; + } + + case FILTER_OP_LOAD_S64: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op) + + sizeof(struct literal_numeric); + break; + } + + case FILTER_OP_CAST_TO_S64: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n"); + ret = -EINVAL; + goto end; + } + switch (vstack_ax(stack)->type) { + case REG_S64: + case REG_DOUBLE: + case REG_TYPE_UNKNOWN: + break; + default: + printk(KERN_WARNING "Incorrect register type %d for cast\n", + (int) vstack_ax(stack)->type); + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct cast_op); + break; + } + case FILTER_OP_CAST_NOP: + { + next_pc += sizeof(struct cast_op); + break; + } + + /* + * Instructions for recursive traversal through composed types. + */ + case FILTER_OP_GET_CONTEXT_ROOT: + case FILTER_OP_GET_APP_CONTEXT_ROOT: + case FILTER_OP_GET_PAYLOAD_ROOT: + { + if (vstack_push(stack)) { + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_PTR; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_TYPE_UNKNOWN; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_S8: + case FILTER_OP_LOAD_FIELD_S16: + case FILTER_OP_LOAD_FIELD_S32: + case FILTER_OP_LOAD_FIELD_S64: + case FILTER_OP_LOAD_FIELD_U8: + case FILTER_OP_LOAD_FIELD_U16: + case FILTER_OP_LOAD_FIELD_U32: + case FILTER_OP_LOAD_FIELD_U64: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_S64; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_STRING: + case FILTER_OP_LOAD_FIELD_SEQUENCE: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_STRING; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_LOAD_FIELD_DOUBLE: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + vstack_ax(stack)->type = REG_DOUBLE; + next_pc += sizeof(struct load_op); + break; + } + + case FILTER_OP_GET_SYMBOL: + case FILTER_OP_GET_SYMBOL_FIELD: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct load_op) + sizeof(struct get_symbol); + break; + } + + case FILTER_OP_GET_INDEX_U16: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u16); + break; + } + + case FILTER_OP_GET_INDEX_U64: + { + /* Pop 1, push 1 */ + if (!vstack_ax(stack)) { + printk(KERN_WARNING "Empty stack\n\n"); + ret = -EINVAL; + goto end; + } + if (vstack_ax(stack)->type != REG_PTR) { + printk(KERN_WARNING "Expecting pointer on top of stack\n\n"); + ret = -EINVAL; + goto end; + } + next_pc += sizeof(struct load_op) + sizeof(struct get_index_u64); + break; + } + + } +end: + *_next_pc = next_pc; + return ret; +} + +/* + * Never called concurrently (hash seed is shared). + */ +int lttng_filter_validate_bytecode(struct bytecode_runtime *bytecode) +{ + struct mp_table *mp_table; + char *pc, *next_pc, *start_pc; + int ret = -EINVAL; + struct vstack stack; + + vstack_init(&stack); + + mp_table = kzalloc(sizeof(*mp_table), GFP_KERNEL); + if (!mp_table) { + printk(KERN_WARNING "Error allocating hash table for bytecode validation\n"); + return -ENOMEM; + } + start_pc = &bytecode->code[0]; + for (pc = next_pc = start_pc; pc - start_pc < bytecode->len; + pc = next_pc) { + ret = bytecode_validate_overflow(bytecode, start_pc, pc); + if (ret != 0) { + if (ret == -ERANGE) + printk(KERN_WARNING "filter bytecode overflow\n"); + goto end; + } + dbg_printk("Validating op %s (%u)\n", + lttng_filter_print_op((unsigned int) *(filter_opcode_t *) pc), + (unsigned int) *(filter_opcode_t *) pc); + + /* + * For each instruction, validate the current context + * (traversal of entire execution flow), and validate + * all merge points targeting this instruction. + */ + ret = validate_instruction_all_contexts(bytecode, mp_table, + &stack, start_pc, pc); + if (ret) + goto end; + ret = exec_insn(bytecode, mp_table, &stack, &next_pc, pc); + if (ret <= 0) + goto end; + } +end: + if (delete_all_nodes(mp_table)) { + if (!ret) { + printk(KERN_WARNING "Unexpected merge points\n"); + ret = -EINVAL; + } + } + kfree(mp_table); + return ret; +} diff --git a/ltt/lttng-2.11.0/lttng-filter.c b/ltt/lttng-2.11.0/lttng-filter.c new file mode 100644 index 000000000000..325ae7bbc053 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-filter.c @@ -0,0 +1,557 @@ +/* SPDX-License-Identifier: MIT + * + * lttng-filter.c + * + * LTTng modules filter code. + * + * Copyright (C) 2010-2016 Mathieu Desnoyers + */ + +#include +#include + +#include + +static const char *opnames[] = { + [ FILTER_OP_UNKNOWN ] = "UNKNOWN", + + [ FILTER_OP_RETURN ] = "RETURN", + + /* binary */ + [ FILTER_OP_MUL ] = "MUL", + [ FILTER_OP_DIV ] = "DIV", + [ FILTER_OP_MOD ] = "MOD", + [ FILTER_OP_PLUS ] = "PLUS", + [ FILTER_OP_MINUS ] = "MINUS", + [ FILTER_OP_BIT_RSHIFT ] = "BIT_RSHIFT", + [ FILTER_OP_BIT_LSHIFT ] = "BIT_LSHIFT", + [ FILTER_OP_BIT_AND ] = "BIT_AND", + [ FILTER_OP_BIT_OR ] = "BIT_OR", + [ FILTER_OP_BIT_XOR ] = "BIT_XOR", + + /* binary comparators */ + [ FILTER_OP_EQ ] = "EQ", + [ FILTER_OP_NE ] = "NE", + [ FILTER_OP_GT ] = "GT", + [ FILTER_OP_LT ] = "LT", + [ FILTER_OP_GE ] = "GE", + [ FILTER_OP_LE ] = "LE", + + /* string binary comparators */ + [ FILTER_OP_EQ_STRING ] = "EQ_STRING", + [ FILTER_OP_NE_STRING ] = "NE_STRING", + [ FILTER_OP_GT_STRING ] = "GT_STRING", + [ FILTER_OP_LT_STRING ] = "LT_STRING", + [ FILTER_OP_GE_STRING ] = "GE_STRING", + [ FILTER_OP_LE_STRING ] = "LE_STRING", + + /* s64 binary comparators */ + [ FILTER_OP_EQ_S64 ] = "EQ_S64", + [ FILTER_OP_NE_S64 ] = "NE_S64", + [ FILTER_OP_GT_S64 ] = "GT_S64", + [ FILTER_OP_LT_S64 ] = "LT_S64", + [ FILTER_OP_GE_S64 ] = "GE_S64", + [ FILTER_OP_LE_S64 ] = "LE_S64", + + /* double binary comparators */ + [ FILTER_OP_EQ_DOUBLE ] = "EQ_DOUBLE", + [ FILTER_OP_NE_DOUBLE ] = "NE_DOUBLE", + [ FILTER_OP_GT_DOUBLE ] = "GT_DOUBLE", + [ FILTER_OP_LT_DOUBLE ] = "LT_DOUBLE", + [ FILTER_OP_GE_DOUBLE ] = "GE_DOUBLE", + [ FILTER_OP_LE_DOUBLE ] = "LE_DOUBLE", + + /* Mixed S64-double binary comparators */ + [ FILTER_OP_EQ_DOUBLE_S64 ] = "EQ_DOUBLE_S64", + [ FILTER_OP_NE_DOUBLE_S64 ] = "NE_DOUBLE_S64", + [ FILTER_OP_GT_DOUBLE_S64 ] = "GT_DOUBLE_S64", + [ FILTER_OP_LT_DOUBLE_S64 ] = "LT_DOUBLE_S64", + [ FILTER_OP_GE_DOUBLE_S64 ] = "GE_DOUBLE_S64", + [ FILTER_OP_LE_DOUBLE_S64 ] = "LE_DOUBLE_S64", + + [ FILTER_OP_EQ_S64_DOUBLE ] = "EQ_S64_DOUBLE", + [ FILTER_OP_NE_S64_DOUBLE ] = "NE_S64_DOUBLE", + [ FILTER_OP_GT_S64_DOUBLE ] = "GT_S64_DOUBLE", + [ FILTER_OP_LT_S64_DOUBLE ] = "LT_S64_DOUBLE", + [ FILTER_OP_GE_S64_DOUBLE ] = "GE_S64_DOUBLE", + [ FILTER_OP_LE_S64_DOUBLE ] = "LE_S64_DOUBLE", + + /* unary */ + [ FILTER_OP_UNARY_PLUS ] = "UNARY_PLUS", + [ FILTER_OP_UNARY_MINUS ] = "UNARY_MINUS", + [ FILTER_OP_UNARY_NOT ] = "UNARY_NOT", + [ FILTER_OP_UNARY_PLUS_S64 ] = "UNARY_PLUS_S64", + [ FILTER_OP_UNARY_MINUS_S64 ] = "UNARY_MINUS_S64", + [ FILTER_OP_UNARY_NOT_S64 ] = "UNARY_NOT_S64", + [ FILTER_OP_UNARY_PLUS_DOUBLE ] = "UNARY_PLUS_DOUBLE", + [ FILTER_OP_UNARY_MINUS_DOUBLE ] = "UNARY_MINUS_DOUBLE", + [ FILTER_OP_UNARY_NOT_DOUBLE ] = "UNARY_NOT_DOUBLE", + + /* logical */ + [ FILTER_OP_AND ] = "AND", + [ FILTER_OP_OR ] = "OR", + + /* load field ref */ + [ FILTER_OP_LOAD_FIELD_REF ] = "LOAD_FIELD_REF", + [ FILTER_OP_LOAD_FIELD_REF_STRING ] = "LOAD_FIELD_REF_STRING", + [ FILTER_OP_LOAD_FIELD_REF_SEQUENCE ] = "LOAD_FIELD_REF_SEQUENCE", + [ FILTER_OP_LOAD_FIELD_REF_S64 ] = "LOAD_FIELD_REF_S64", + [ FILTER_OP_LOAD_FIELD_REF_DOUBLE ] = "LOAD_FIELD_REF_DOUBLE", + + /* load from immediate operand */ + [ FILTER_OP_LOAD_STRING ] = "LOAD_STRING", + [ FILTER_OP_LOAD_S64 ] = "LOAD_S64", + [ FILTER_OP_LOAD_DOUBLE ] = "LOAD_DOUBLE", + + /* cast */ + [ FILTER_OP_CAST_TO_S64 ] = "CAST_TO_S64", + [ FILTER_OP_CAST_DOUBLE_TO_S64 ] = "CAST_DOUBLE_TO_S64", + [ FILTER_OP_CAST_NOP ] = "CAST_NOP", + + /* get context ref */ + [ FILTER_OP_GET_CONTEXT_REF ] = "GET_CONTEXT_REF", + [ FILTER_OP_GET_CONTEXT_REF_STRING ] = "GET_CONTEXT_REF_STRING", + [ FILTER_OP_GET_CONTEXT_REF_S64 ] = "GET_CONTEXT_REF_S64", + [ FILTER_OP_GET_CONTEXT_REF_DOUBLE ] = "GET_CONTEXT_REF_DOUBLE", + + /* load userspace field ref */ + [ FILTER_OP_LOAD_FIELD_REF_USER_STRING ] = "LOAD_FIELD_REF_USER_STRING", + [ FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE ] = "LOAD_FIELD_REF_USER_SEQUENCE", + + /* + * load immediate star globbing pattern (literal string) + * from immediate. + */ + [ FILTER_OP_LOAD_STAR_GLOB_STRING ] = "LOAD_STAR_GLOB_STRING", + + /* globbing pattern binary operator: apply to */ + [ FILTER_OP_EQ_STAR_GLOB_STRING ] = "EQ_STAR_GLOB_STRING", + [ FILTER_OP_NE_STAR_GLOB_STRING ] = "NE_STAR_GLOB_STRING", + + /* + * Instructions for recursive traversal through composed types. + */ + [ FILTER_OP_GET_CONTEXT_ROOT ] = "GET_CONTEXT_ROOT", + [ FILTER_OP_GET_APP_CONTEXT_ROOT ] = "GET_APP_CONTEXT_ROOT", + [ FILTER_OP_GET_PAYLOAD_ROOT ] = "GET_PAYLOAD_ROOT", + + [ FILTER_OP_GET_SYMBOL ] = "GET_SYMBOL", + [ FILTER_OP_GET_SYMBOL_FIELD ] = "GET_SYMBOL_FIELD", + [ FILTER_OP_GET_INDEX_U16 ] = "GET_INDEX_U16", + [ FILTER_OP_GET_INDEX_U64 ] = "GET_INDEX_U64", + + [ FILTER_OP_LOAD_FIELD ] = "LOAD_FIELD", + [ FILTER_OP_LOAD_FIELD_S8 ] = "LOAD_FIELD_S8", + [ FILTER_OP_LOAD_FIELD_S16 ] = "LOAD_FIELD_S16", + [ FILTER_OP_LOAD_FIELD_S32 ] = "LOAD_FIELD_S32", + [ FILTER_OP_LOAD_FIELD_S64 ] = "LOAD_FIELD_S64", + [ FILTER_OP_LOAD_FIELD_U8 ] = "LOAD_FIELD_U8", + [ FILTER_OP_LOAD_FIELD_U16 ] = "LOAD_FIELD_U16", + [ FILTER_OP_LOAD_FIELD_U32 ] = "LOAD_FIELD_U32", + [ FILTER_OP_LOAD_FIELD_U64 ] = "LOAD_FIELD_U64", + [ FILTER_OP_LOAD_FIELD_STRING ] = "LOAD_FIELD_STRING", + [ FILTER_OP_LOAD_FIELD_SEQUENCE ] = "LOAD_FIELD_SEQUENCE", + [ FILTER_OP_LOAD_FIELD_DOUBLE ] = "LOAD_FIELD_DOUBLE", + + [ FILTER_OP_UNARY_BIT_NOT ] = "UNARY_BIT_NOT", + + [ FILTER_OP_RETURN_S64 ] = "RETURN_S64", +}; + +const char *lttng_filter_print_op(enum filter_op op) +{ + if (op >= NR_FILTER_OPS) + return "UNKNOWN"; + else + return opnames[op]; +} + +static +int apply_field_reloc(struct lttng_event *event, + struct bytecode_runtime *runtime, + uint32_t runtime_len, + uint32_t reloc_offset, + const char *field_name, + enum filter_op filter_op) +{ + const struct lttng_event_desc *desc; + const struct lttng_event_field *fields, *field = NULL; + unsigned int nr_fields, i; + struct load_op *op; + uint32_t field_offset = 0; + + dbg_printk("Apply field reloc: %u %s\n", reloc_offset, field_name); + + /* Lookup event by name */ + desc = event->desc; + if (!desc) + return -EINVAL; + fields = desc->fields; + if (!fields) + return -EINVAL; + nr_fields = desc->nr_fields; + for (i = 0; i < nr_fields; i++) { + if (!strcmp(fields[i].name, field_name)) { + field = &fields[i]; + break; + } + /* compute field offset */ + switch (fields[i].type.atype) { + case atype_integer: + case atype_enum: + field_offset += sizeof(int64_t); + break; + case atype_array: + case atype_sequence: + case atype_array_bitfield: + case atype_sequence_bitfield: + field_offset += sizeof(unsigned long); + field_offset += sizeof(void *); + break; + case atype_string: + field_offset += sizeof(void *); + break; + case atype_struct: /* Unsupported. */ + case atype_array_compound: /* Unsupported. */ + case atype_sequence_compound: /* Unsupported. */ + case atype_variant: /* Unsupported. */ + default: + return -EINVAL; + } + } + if (!field) + return -EINVAL; + + /* Check if field offset is too large for 16-bit offset */ + if (field_offset > LTTNG_KERNEL_FILTER_BYTECODE_MAX_LEN - 1) + return -EINVAL; + + /* set type */ + op = (struct load_op *) &runtime->code[reloc_offset]; + + switch (filter_op) { + case FILTER_OP_LOAD_FIELD_REF: + { + struct field_ref *field_ref; + + field_ref = (struct field_ref *) op->data; + switch (field->type.atype) { + case atype_integer: + case atype_enum: + op->op = FILTER_OP_LOAD_FIELD_REF_S64; + break; + case atype_array: + case atype_sequence: + if (field->user) + op->op = FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE; + else + op->op = FILTER_OP_LOAD_FIELD_REF_SEQUENCE; + break; + case atype_string: + if (field->user) + op->op = FILTER_OP_LOAD_FIELD_REF_USER_STRING; + else + op->op = FILTER_OP_LOAD_FIELD_REF_STRING; + break; + case atype_struct: /* Unsupported. */ + case atype_array_compound: /* Unsupported. */ + case atype_sequence_compound: /* Unsupported. */ + case atype_variant: /* Unsupported. */ + case atype_array_bitfield: /* Unsupported. */ + case atype_sequence_bitfield: /* Unsupported. */ + default: + return -EINVAL; + } + /* set offset */ + field_ref->offset = (uint16_t) field_offset; + break; + } + default: + return -EINVAL; + } + return 0; +} + +static +int apply_context_reloc(struct lttng_event *event, + struct bytecode_runtime *runtime, + uint32_t runtime_len, + uint32_t reloc_offset, + const char *context_name, + enum filter_op filter_op) +{ + struct load_op *op; + struct lttng_ctx_field *ctx_field; + int idx; + + dbg_printk("Apply context reloc: %u %s\n", reloc_offset, context_name); + + /* Get context index */ + idx = lttng_get_context_index(lttng_static_ctx, context_name); + if (idx < 0) + return -ENOENT; + + /* Check if idx is too large for 16-bit offset */ + if (idx > LTTNG_KERNEL_FILTER_BYTECODE_MAX_LEN - 1) + return -EINVAL; + + /* Get context return type */ + ctx_field = <tng_static_ctx->fields[idx]; + op = (struct load_op *) &runtime->code[reloc_offset]; + + switch (filter_op) { + case FILTER_OP_GET_CONTEXT_REF: + { + struct field_ref *field_ref; + + field_ref = (struct field_ref *) op->data; + switch (ctx_field->event_field.type.atype) { + case atype_integer: + case atype_enum: + op->op = FILTER_OP_GET_CONTEXT_REF_S64; + break; + /* Sequence and array supported as string */ + case atype_string: + case atype_array: + case atype_sequence: + BUG_ON(ctx_field->event_field.user); + op->op = FILTER_OP_GET_CONTEXT_REF_STRING; + break; + case atype_struct: /* Unsupported. */ + case atype_array_compound: /* Unsupported. */ + case atype_sequence_compound: /* Unsupported. */ + case atype_variant: /* Unsupported. */ + case atype_array_bitfield: /* Unsupported. */ + case atype_sequence_bitfield: /* Unsupported. */ + default: + return -EINVAL; + } + /* set offset to context index within channel contexts */ + field_ref->offset = (uint16_t) idx; + break; + } + default: + return -EINVAL; + } + return 0; +} + +static +int apply_reloc(struct lttng_event *event, + struct bytecode_runtime *runtime, + uint32_t runtime_len, + uint32_t reloc_offset, + const char *name) +{ + struct load_op *op; + + dbg_printk("Apply reloc: %u %s\n", reloc_offset, name); + + /* Ensure that the reloc is within the code */ + if (runtime_len - reloc_offset < sizeof(uint16_t)) + return -EINVAL; + + op = (struct load_op *) &runtime->code[reloc_offset]; + switch (op->op) { + case FILTER_OP_LOAD_FIELD_REF: + return apply_field_reloc(event, runtime, runtime_len, + reloc_offset, name, op->op); + case FILTER_OP_GET_CONTEXT_REF: + return apply_context_reloc(event, runtime, runtime_len, + reloc_offset, name, op->op); + case FILTER_OP_GET_SYMBOL: + case FILTER_OP_GET_SYMBOL_FIELD: + /* + * Will be handled by load specialize phase or + * dynamically by interpreter. + */ + return 0; + default: + printk(KERN_WARNING "Unknown reloc op type %u\n", op->op); + return -EINVAL; + } + return 0; +} + +static +int bytecode_is_linked(struct lttng_filter_bytecode_node *filter_bytecode, + struct lttng_event *event) +{ + struct lttng_bytecode_runtime *bc_runtime; + + list_for_each_entry(bc_runtime, + &event->bytecode_runtime_head, node) { + if (bc_runtime->bc == filter_bytecode) + return 1; + } + return 0; +} + +/* + * Take a bytecode with reloc table and link it to an event to create a + * bytecode runtime. + */ +static +int _lttng_filter_event_link_bytecode(struct lttng_event *event, + struct lttng_filter_bytecode_node *filter_bytecode, + struct list_head *insert_loc) +{ + int ret, offset, next_offset; + struct bytecode_runtime *runtime = NULL; + size_t runtime_alloc_len; + + if (!filter_bytecode) + return 0; + /* Bytecode already linked */ + if (bytecode_is_linked(filter_bytecode, event)) + return 0; + + dbg_printk("Linking...\n"); + + /* We don't need the reloc table in the runtime */ + runtime_alloc_len = sizeof(*runtime) + filter_bytecode->bc.reloc_offset; + runtime = kzalloc(runtime_alloc_len, GFP_KERNEL); + if (!runtime) { + ret = -ENOMEM; + goto alloc_error; + } + runtime->p.bc = filter_bytecode; + runtime->p.event = event; + runtime->len = filter_bytecode->bc.reloc_offset; + /* copy original bytecode */ + memcpy(runtime->code, filter_bytecode->bc.data, runtime->len); + /* + * apply relocs. Those are a uint16_t (offset in bytecode) + * followed by a string (field name). + */ + for (offset = filter_bytecode->bc.reloc_offset; + offset < filter_bytecode->bc.len; + offset = next_offset) { + uint16_t reloc_offset = + *(uint16_t *) &filter_bytecode->bc.data[offset]; + const char *name = + (const char *) &filter_bytecode->bc.data[offset + sizeof(uint16_t)]; + + ret = apply_reloc(event, runtime, runtime->len, reloc_offset, name); + if (ret) { + goto link_error; + } + next_offset = offset + sizeof(uint16_t) + strlen(name) + 1; + } + /* Validate bytecode */ + ret = lttng_filter_validate_bytecode(runtime); + if (ret) { + goto link_error; + } + /* Specialize bytecode */ + ret = lttng_filter_specialize_bytecode(event, runtime); + if (ret) { + goto link_error; + } + runtime->p.filter = lttng_filter_interpret_bytecode; + runtime->p.link_failed = 0; + list_add_rcu(&runtime->p.node, insert_loc); + dbg_printk("Linking successful.\n"); + return 0; + +link_error: + runtime->p.filter = lttng_filter_false; + runtime->p.link_failed = 1; + list_add_rcu(&runtime->p.node, insert_loc); +alloc_error: + dbg_printk("Linking failed.\n"); + return ret; +} + +void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime) +{ + struct lttng_filter_bytecode_node *bc = runtime->bc; + + if (!bc->enabler->enabled || runtime->link_failed) + runtime->filter = lttng_filter_false; + else + runtime->filter = lttng_filter_interpret_bytecode; +} + +/* + * Link bytecode for all enablers referenced by an event. + */ +void lttng_enabler_event_link_bytecode(struct lttng_event *event, + struct lttng_enabler *enabler) +{ + struct lttng_filter_bytecode_node *bc; + struct lttng_bytecode_runtime *runtime; + + /* Can only be called for events with desc attached */ + WARN_ON_ONCE(!event->desc); + + /* Link each bytecode. */ + list_for_each_entry(bc, &enabler->filter_bytecode_head, node) { + int found = 0, ret; + struct list_head *insert_loc; + + list_for_each_entry(runtime, + &event->bytecode_runtime_head, node) { + if (runtime->bc == bc) { + found = 1; + break; + } + } + /* Skip bytecode already linked */ + if (found) + continue; + + /* + * Insert at specified priority (seqnum) in increasing + * order. + */ + list_for_each_entry_reverse(runtime, + &event->bytecode_runtime_head, node) { + if (runtime->bc->bc.seqnum < bc->bc.seqnum) { + /* insert here */ + insert_loc = &runtime->node; + goto add_within; + } + } + /* Add to head to list */ + insert_loc = &event->bytecode_runtime_head; + add_within: + dbg_printk("linking bytecode\n"); + ret = _lttng_filter_event_link_bytecode(event, bc, + insert_loc); + if (ret) { + dbg_printk("[lttng filter] warning: cannot link event bytecode\n"); + } + } +} + +/* + * We own the filter_bytecode if we return success. + */ +int lttng_filter_enabler_attach_bytecode(struct lttng_enabler *enabler, + struct lttng_filter_bytecode_node *filter_bytecode) +{ + list_add(&filter_bytecode->node, &enabler->filter_bytecode_head); + return 0; +} + +void lttng_free_enabler_filter_bytecode(struct lttng_enabler *enabler) +{ + struct lttng_filter_bytecode_node *filter_bytecode, *tmp; + + list_for_each_entry_safe(filter_bytecode, tmp, + &enabler->filter_bytecode_head, node) { + kfree(filter_bytecode); + } +} + +void lttng_free_event_filter_runtime(struct lttng_event *event) +{ + struct bytecode_runtime *runtime, *tmp; + + list_for_each_entry_safe(runtime, tmp, + &event->bytecode_runtime_head, p.node) { + kfree(runtime->data); + kfree(runtime); + } +} diff --git a/ltt/lttng-2.11.0/lttng-filter.h b/ltt/lttng-2.11.0/lttng-filter.h new file mode 100644 index 000000000000..fec2db1f6c3b --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-filter.h @@ -0,0 +1,248 @@ +/* SPDX-License-Identifier: MIT + * + * lttng-filter.h + * + * LTTng modules filter header. + * + * Copyright (C) 2010-2016 Mathieu Desnoyers + */ + +#ifndef _LTTNG_FILTER_H +#define _LTTNG_FILTER_H + +#include + +#include +#include + +/* Filter stack length, in number of entries */ +#define FILTER_STACK_LEN 10 /* includes 2 dummy */ +#define FILTER_STACK_EMPTY 1 + +#define FILTER_MAX_DATA_LEN 65536 + +#ifdef DEBUG +#define dbg_printk(fmt, args...) \ + printk(KERN_DEBUG "[debug bytecode in %s:%s@%u] " fmt, \ + __FILE__, __func__, __LINE__, ## args) +#else +#define dbg_printk(fmt, args...) \ +do { \ + /* do nothing but check printf format */ \ + if (0) \ + printk(KERN_DEBUG "[debug bytecode in %s:%s@%u] " fmt, \ + __FILE__, __func__, __LINE__, ## args); \ +} while (0) +#endif + +/* Linked bytecode. Child of struct lttng_bytecode_runtime. */ +struct bytecode_runtime { + struct lttng_bytecode_runtime p; + size_t data_len; + size_t data_alloc_len; + char *data; + uint16_t len; + char code[0]; +}; + +enum entry_type { + REG_S64, + REG_DOUBLE, + REG_STRING, + REG_STAR_GLOB_STRING, + REG_TYPE_UNKNOWN, + REG_PTR, +}; + +enum load_type { + LOAD_ROOT_CONTEXT, + LOAD_ROOT_APP_CONTEXT, + LOAD_ROOT_PAYLOAD, + LOAD_OBJECT, +}; + +enum object_type { + OBJECT_TYPE_S8, + OBJECT_TYPE_S16, + OBJECT_TYPE_S32, + OBJECT_TYPE_S64, + OBJECT_TYPE_U8, + OBJECT_TYPE_U16, + OBJECT_TYPE_U32, + OBJECT_TYPE_U64, + + OBJECT_TYPE_DOUBLE, + OBJECT_TYPE_STRING, + OBJECT_TYPE_STRING_SEQUENCE, + + OBJECT_TYPE_SEQUENCE, + OBJECT_TYPE_ARRAY, + OBJECT_TYPE_STRUCT, + OBJECT_TYPE_VARIANT, + + OBJECT_TYPE_DYNAMIC, +}; + +struct filter_get_index_data { + uint64_t offset; /* in bytes */ + size_t ctx_index; + size_t array_len; + struct { + size_t len; + enum object_type type; + bool rev_bo; /* reverse byte order */ + } elem; +}; + +/* Validation stack */ +struct vstack_load { + enum load_type type; + enum object_type object_type; + const struct lttng_event_field *field; + bool rev_bo; /* reverse byte order */ +}; + +struct vstack_entry { + enum entry_type type; + struct vstack_load load; +}; + +struct vstack { + int top; /* top of stack */ + struct vstack_entry e[FILTER_STACK_LEN]; +}; + +static inline +void vstack_init(struct vstack *stack) +{ + stack->top = -1; +} + +static inline +struct vstack_entry *vstack_ax(struct vstack *stack) +{ + if (unlikely(stack->top < 0)) + return NULL; + return &stack->e[stack->top]; +} + +static inline +struct vstack_entry *vstack_bx(struct vstack *stack) +{ + if (unlikely(stack->top < 1)) + return NULL; + return &stack->e[stack->top - 1]; +} + +static inline +int vstack_push(struct vstack *stack) +{ + if (stack->top >= FILTER_STACK_LEN - 1) { + printk(KERN_WARNING "Stack full\n"); + return -EINVAL; + } + ++stack->top; + return 0; +} + +static inline +int vstack_pop(struct vstack *stack) +{ + if (unlikely(stack->top < 0)) { + printk(KERN_WARNING "Stack empty\n"); + return -EINVAL; + } + stack->top--; + return 0; +} + +/* Execution stack */ +enum estack_string_literal_type { + ESTACK_STRING_LITERAL_TYPE_NONE, + ESTACK_STRING_LITERAL_TYPE_PLAIN, + ESTACK_STRING_LITERAL_TYPE_STAR_GLOB, +}; + +struct load_ptr { + enum load_type type; + enum object_type object_type; + const void *ptr; + bool rev_bo; + /* Temporary place-holders for contexts. */ + union { + int64_t s64; + uint64_t u64; + double d; + } u; + /* + * "field" is only needed when nested under a variant, in which + * case we cannot specialize the nested operations. + */ + const struct lttng_event_field *field; +}; + +struct estack_entry { + union { + int64_t v; + + struct { + const char *str; + const char __user *user_str; + size_t seq_len; + enum estack_string_literal_type literal_type; + int user; /* is string from userspace ? */ + } s; + struct load_ptr ptr; + } u; +}; + +struct estack { + int top; /* top of stack */ + struct estack_entry e[FILTER_STACK_LEN]; +}; + +#define estack_ax_v ax +#define estack_bx_v bx + +#define estack_ax(stack, top) \ + ({ \ + BUG_ON((top) <= FILTER_STACK_EMPTY); \ + &(stack)->e[top]; \ + }) + +#define estack_bx(stack, top) \ + ({ \ + BUG_ON((top) <= FILTER_STACK_EMPTY + 1); \ + &(stack)->e[(top) - 1]; \ + }) + +#define estack_push(stack, top, ax, bx) \ + do { \ + BUG_ON((top) >= FILTER_STACK_LEN - 1); \ + (stack)->e[(top) - 1].u.v = (bx); \ + (bx) = (ax); \ + ++(top); \ + } while (0) + +#define estack_pop(stack, top, ax, bx) \ + do { \ + BUG_ON((top) <= FILTER_STACK_EMPTY); \ + (ax) = (bx); \ + (bx) = (stack)->e[(top) - 2].u.v; \ + (top)--; \ + } while (0) + +const char *lttng_filter_print_op(enum filter_op op); + +int lttng_filter_validate_bytecode(struct bytecode_runtime *bytecode); +int lttng_filter_specialize_bytecode(struct lttng_event *event, + struct bytecode_runtime *bytecode); + +uint64_t lttng_filter_false(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data); +uint64_t lttng_filter_interpret_bytecode(void *filter_data, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *filter_stack_data); + +#endif /* _LTTNG_FILTER_H */ diff --git a/ltt/lttng-2.11.0/lttng-kernel-version.h b/ltt/lttng-2.11.0/lttng-kernel-version.h new file mode 100644 index 000000000000..6b545dbbe289 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-kernel-version.h @@ -0,0 +1,143 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-kernel-version.h + * + * Contains helpers to check more complex kernel version conditions. + * + * Copyright (C) 2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_KERNEL_VERSION_H +#define _LTTNG_KERNEL_VERSION_H + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +#include +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) */ +#include +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) */ + +/* + * This macro checks if the kernel version is between the two specified + * versions (lower limit inclusive, upper limit exclusive). + */ +#define LTTNG_KERNEL_RANGE(a_low, b_low, c_low, a_high, b_high, c_high) \ + (LINUX_VERSION_CODE >= KERNEL_VERSION(a_low, b_low, c_low) && \ + LINUX_VERSION_CODE < KERNEL_VERSION(a_high, b_high, c_high)) + +/* Ubuntu */ + +#define LTTNG_UBUNTU_KERNEL_VERSION(a, b, c, d) \ + (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +#ifdef UTS_UBUNTU_RELEASE_ABI +#define LTTNG_UBUNTU_VERSION_CODE \ + ((LINUX_VERSION_CODE << 8) + UTS_UBUNTU_RELEASE_ABI) +#else +#define LTTNG_UBUNTU_VERSION_CODE 0 +#endif + +#define LTTNG_UBUNTU_KERNEL_RANGE(a_low, b_low, c_low, d_low, \ + a_high, b_high, c_high, d_high) \ + (LTTNG_UBUNTU_VERSION_CODE >= \ + LTTNG_UBUNTU_KERNEL_VERSION(a_low, b_low, c_low, d_low) && \ + LTTNG_UBUNTU_VERSION_CODE < \ + LTTNG_UBUNTU_KERNEL_VERSION(a_high, b_high, c_high, d_high)) + +/* Debian */ + +#define LTTNG_DEBIAN_KERNEL_VERSION(a, b, c, d, e, f) \ + (((((a) << 16) + ((b) << 8) + (c)) * 1000000ULL) + ((d) * 10000) + ((e) * 100) + (f)) + +#ifdef DEBIAN_API_VERSION +#define LTTNG_DEBIAN_VERSION_CODE \ + ((LINUX_VERSION_CODE * 1000000ULL) + DEBIAN_API_VERSION) +#else +#define LTTNG_DEBIAN_VERSION_CODE 0 +#endif + +#define LTTNG_DEBIAN_KERNEL_RANGE(a_low, b_low, c_low, d_low, e_low, f_low, \ + a_high, b_high, c_high, d_high, e_high, f_high) \ + (LTTNG_DEBIAN_VERSION_CODE >= \ + LTTNG_DEBIAN_KERNEL_VERSION(a_low, b_low, c_low, d_low, e_low, f_low) && \ + LTTNG_DEBIAN_VERSION_CODE < \ + LTTNG_DEBIAN_KERNEL_VERSION(a_high, b_high, c_high, d_high, e_high, f_high)) + +#define LTTNG_RHEL_KERNEL_VERSION(a, b, c, d, e, f) \ + (((((a) << 16) + ((b) << 8) + (c)) * 10000000ULL) + ((d) * 10000) + ((e) * 100) + (f)) + +/* RHEL */ + +#ifdef RHEL_API_VERSION +#define LTTNG_RHEL_VERSION_CODE \ + ((LINUX_VERSION_CODE * 10000000ULL) + RHEL_API_VERSION) +#else +#define LTTNG_RHEL_VERSION_CODE 0 +#endif + +#define LTTNG_RHEL_KERNEL_RANGE(a_low, b_low, c_low, d_low, e_low, f_low, \ + a_high, b_high, c_high, d_high, e_high, f_high) \ + (LTTNG_RHEL_VERSION_CODE >= \ + LTTNG_RHEL_KERNEL_VERSION(a_low, b_low, c_low, d_low, e_low, f_low) && \ + LTTNG_RHEL_VERSION_CODE < \ + LTTNG_RHEL_KERNEL_VERSION(a_high, b_high, c_high, d_high, e_high, f_high)) + +/* SUSE Linux enterprise */ + +#define LTTNG_SLE_KERNEL_VERSION(a, b, c, d, e, f) \ + (((((a) << 16) + ((b) << 8) + (c)) * 10000000ULL) + ((d) * 10000) + ((e) * 100) + (f)) + +#ifdef SLE_API_VERSION +#define LTTNG_SLE_VERSION_CODE \ + ((LINUX_VERSION_CODE * 10000000ULL) + SLE_API_VERSION) +#else +#define LTTNG_SLE_VERSION_CODE 0 +#endif + +#define LTTNG_SLE_KERNEL_RANGE(a_low, b_low, c_low, d_low, e_low, f_low, \ + a_high, b_high, c_high, d_high, e_high, f_high) \ + (LTTNG_SLE_VERSION_CODE >= \ + LTTNG_SLE_KERNEL_VERSION(a_low, b_low, c_low, d_low, e_low, f_low) && \ + LTTNG_SLE_VERSION_CODE < \ + LTTNG_SLE_KERNEL_VERSION(a_high, b_high, c_high, d_high, e_high, f_high)) + +/* Fedora */ + +#define LTTNG_FEDORA_KERNEL_VERSION(a, b, c, d) \ + (((((a) << 16) + ((b) << 8) + (c)) * 10000ULL) + (d)) + +#ifdef FEDORA_REVISION_VERSION +#define LTTNG_FEDORA_VERSION_CODE \ + ((LINUX_VERSION_CODE * 10000ULL) + FEDORA_REVISION_VERSION) +#else +#define LTTNG_FEDORA_VERSION_CODE 0 +#endif + +#define LTTNG_FEDORA_KERNEL_RANGE(a_low, b_low, c_low, d_low, \ + a_high, b_high, c_high, d_high) \ + (LTTNG_FEDORA_VERSION_CODE >= \ + LTTNG_FEDORA_KERNEL_VERSION(a_low, b_low, c_low, d_low) && \ + LTTNG_FEDORA_VERSION_CODE < \ + LTTNG_FEDORA_KERNEL_VERSION(a_high, b_high, c_high, d_high)) + +/* RT patch */ + +#define LTTNG_RT_KERNEL_VERSION(a, b, c, d) \ + (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +#ifdef RT_PATCH_VERSION +#define LTTNG_RT_VERSION_CODE \ + ((LINUX_VERSION_CODE << 8) + RT_PATCH_VERSION) +#else +#define LTTNG_RT_VERSION_CODE 0 +#endif + +#define LTTNG_RT_KERNEL_RANGE(a_low, b_low, c_low, d_low, \ + a_high, b_high, c_high, d_high) \ + (LTTNG_RT_VERSION_CODE >= \ + LTTNG_RT_KERNEL_VERSION(a_low, b_low, c_low, d_low) && \ + LTTNG_RT_VERSION_CODE < \ + LTTNG_RT_KERNEL_VERSION(a_high, b_high, c_high, d_high)) + +#endif /* _LTTNG_KERNEL_VERSION_H */ diff --git a/ltt/lttng-2.11.0/lttng-probes.c b/ltt/lttng-2.11.0/lttng-probes.c new file mode 100644 index 000000000000..f95391fd0c0c --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-probes.c @@ -0,0 +1,324 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-probes.c + * + * Holds LTTng probes registry. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#include + +/* + * probe list is protected by sessions lock. + */ +static LIST_HEAD(_probe_list); + +/* + * List of probes registered by not yet processed. + */ +static LIST_HEAD(lazy_probe_init); + +/* + * lazy_nesting counter ensures we don't trigger lazy probe registration + * fixup while we are performing the fixup. It is protected by the + * sessions lock. + */ +static int lazy_nesting; + +DEFINE_PER_CPU(struct lttng_dynamic_len_stack, lttng_dynamic_len_stack); + +EXPORT_PER_CPU_SYMBOL_GPL(lttng_dynamic_len_stack); + +/* + * Called under sessions lock. + */ +static +int check_event_provider(struct lttng_probe_desc *desc) +{ + int i; + size_t provider_name_len; + + provider_name_len = strnlen(desc->provider, + LTTNG_KERNEL_SYM_NAME_LEN - 1); + for (i = 0; i < desc->nr_events; i++) { + if (strncmp(desc->event_desc[i]->name, + desc->provider, + provider_name_len)) + return 0; /* provider mismatch */ + /* + * The event needs to contain at least provider name + _ + + * one or more letter. + */ + if (strlen(desc->event_desc[i]->name) <= provider_name_len + 1) + return 0; /* provider mismatch */ + if (desc->event_desc[i]->name[provider_name_len] != '_') + return 0; /* provider mismatch */ + } + return 1; +} + +/* + * Called under sessions lock. + */ +static +void lttng_lazy_probe_register(struct lttng_probe_desc *desc) +{ + struct lttng_probe_desc *iter; + struct list_head *probe_list; + + /* + * Each provider enforce that every event name begins with the + * provider name. Check this in an assertion for extra + * carefulness. This ensures we cannot have duplicate event + * names across providers. + */ + WARN_ON_ONCE(!check_event_provider(desc)); + + /* + * The provider ensures there are no duplicate event names. + * Duplicated TRACEPOINT_EVENT event names would generate a + * compile-time error due to duplicated symbol names. + */ + + /* + * We sort the providers by struct lttng_probe_desc pointer + * address. + */ + probe_list = &_probe_list; + list_for_each_entry_reverse(iter, probe_list, head) { + BUG_ON(iter == desc); /* Should never be in the list twice */ + if (iter < desc) { + /* We belong to the location right after iter. */ + list_add(&desc->head, &iter->head); + goto desc_added; + } + } + /* We should be added at the head of the list */ + list_add(&desc->head, probe_list); +desc_added: + pr_debug("LTTng: just registered probe %s containing %u events\n", + desc->provider, desc->nr_events); +} + +/* + * Called under sessions lock. + */ +static +void fixup_lazy_probes(void) +{ + struct lttng_probe_desc *iter, *tmp; + int ret; + + lazy_nesting++; + list_for_each_entry_safe(iter, tmp, + &lazy_probe_init, lazy_init_head) { + lttng_lazy_probe_register(iter); + iter->lazy = 0; + list_del(&iter->lazy_init_head); + } + ret = lttng_fix_pending_events(); + WARN_ON_ONCE(ret); + lazy_nesting--; +} + +/* + * Called under sessions lock. + */ +struct list_head *lttng_get_probe_list_head(void) +{ + if (!lazy_nesting && !list_empty(&lazy_probe_init)) + fixup_lazy_probes(); + return &_probe_list; +} + +static +const struct lttng_probe_desc *find_provider(const char *provider) +{ + struct lttng_probe_desc *iter; + struct list_head *probe_list; + + probe_list = lttng_get_probe_list_head(); + list_for_each_entry(iter, probe_list, head) { + if (!strcmp(iter->provider, provider)) + return iter; + } + return NULL; +} + +int lttng_probe_register(struct lttng_probe_desc *desc) +{ + int ret = 0; + + lttng_lock_sessions(); + + /* + * Check if the provider has already been registered. + */ + if (find_provider(desc->provider)) { + ret = -EEXIST; + goto end; + } + list_add(&desc->lazy_init_head, &lazy_probe_init); + desc->lazy = 1; + pr_debug("LTTng: adding probe %s containing %u events to lazy registration list\n", + desc->provider, desc->nr_events); + /* + * If there is at least one active session, we need to register + * the probe immediately, since we cannot delay event + * registration because they are needed ASAP. + */ + if (lttng_session_active()) + fixup_lazy_probes(); +end: + lttng_unlock_sessions(); + return ret; +} +EXPORT_SYMBOL_GPL(lttng_probe_register); + +void lttng_probe_unregister(struct lttng_probe_desc *desc) +{ + lttng_lock_sessions(); + if (!desc->lazy) + list_del(&desc->head); + else + list_del(&desc->lazy_init_head); + pr_debug("LTTng: just unregistered probe %s\n", desc->provider); + lttng_unlock_sessions(); +} +EXPORT_SYMBOL_GPL(lttng_probe_unregister); + +/* + * TODO: this is O(nr_probes * nb_events), could be faster. + * Called with sessions lock held. + */ +static +const struct lttng_event_desc *find_event(const char *name) +{ + struct lttng_probe_desc *probe_desc; + int i; + + list_for_each_entry(probe_desc, &_probe_list, head) { + for (i = 0; i < probe_desc->nr_events; i++) { + if (!strcmp(probe_desc->event_desc[i]->name, name)) + return probe_desc->event_desc[i]; + } + } + return NULL; +} + +/* + * Called with sessions lock held. + */ +const struct lttng_event_desc *lttng_event_get(const char *name) +{ + const struct lttng_event_desc *event; + int ret; + + event = find_event(name); + if (!event) + return NULL; + ret = try_module_get(event->owner); + WARN_ON_ONCE(!ret); + return event; +} +EXPORT_SYMBOL_GPL(lttng_event_get); + +/* + * Called with sessions lock held. + */ +void lttng_event_put(const struct lttng_event_desc *event) +{ + module_put(event->owner); +} +EXPORT_SYMBOL_GPL(lttng_event_put); + +static +void *tp_list_start(struct seq_file *m, loff_t *pos) +{ + struct lttng_probe_desc *probe_desc; + struct list_head *probe_list; + int iter = 0, i; + + lttng_lock_sessions(); + probe_list = lttng_get_probe_list_head(); + list_for_each_entry(probe_desc, probe_list, head) { + for (i = 0; i < probe_desc->nr_events; i++) { + if (iter++ >= *pos) + return (void *) probe_desc->event_desc[i]; + } + } + /* End of list */ + return NULL; +} + +static +void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos) +{ + struct lttng_probe_desc *probe_desc; + struct list_head *probe_list; + int iter = 0, i; + + (*ppos)++; + probe_list = lttng_get_probe_list_head(); + list_for_each_entry(probe_desc, probe_list, head) { + for (i = 0; i < probe_desc->nr_events; i++) { + if (iter++ >= *ppos) + return (void *) probe_desc->event_desc[i]; + } + } + /* End of list */ + return NULL; +} + +static +void tp_list_stop(struct seq_file *m, void *p) +{ + lttng_unlock_sessions(); +} + +static +int tp_list_show(struct seq_file *m, void *p) +{ + const struct lttng_event_desc *probe_desc = p; + + seq_printf(m, "event { name = %s; };\n", + probe_desc->name); + return 0; +} + +static +const struct seq_operations lttng_tracepoint_list_seq_ops = { + .start = tp_list_start, + .next = tp_list_next, + .stop = tp_list_stop, + .show = tp_list_show, +}; + +static +int lttng_tracepoint_list_open(struct inode *inode, struct file *file) +{ + return seq_open(file, <tng_tracepoint_list_seq_ops); +} + +const struct file_operations lttng_tracepoint_list_fops = { + .owner = THIS_MODULE, + .open = lttng_tracepoint_list_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +int lttng_probes_init(void) +{ + int cpu; + + for_each_possible_cpu(cpu) + per_cpu_ptr(<tng_dynamic_len_stack, cpu)->offset = 0; + return 0; +} diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-client-discard.c b/ltt/lttng-2.11.0/lttng-ring-buffer-client-discard.c new file mode 100644 index 000000000000..d544146779b4 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-client-discard.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client-discard.c + * + * LTTng lib ring buffer client (discard mode). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_DISCARD +#define RING_BUFFER_MODE_TEMPLATE_STRING "discard" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_SPLICE +#include "lttng-ring-buffer-client.h" diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-discard.c b/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-discard.c new file mode 100644 index 000000000000..67483df3f87d --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-discard.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client-discard.c + * + * LTTng lib ring buffer client (discard mode). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_DISCARD +#define RING_BUFFER_MODE_TEMPLATE_STRING "discard-mmap" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_MMAP +#include "lttng-ring-buffer-client.h" diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-overwrite.c b/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-overwrite.c new file mode 100644 index 000000000000..95b58d0d9971 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-client-mmap-overwrite.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client-overwrite.c + * + * LTTng lib ring buffer client (overwrite mode). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_OVERWRITE +#define RING_BUFFER_MODE_TEMPLATE_STRING "overwrite-mmap" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_MMAP +#include "lttng-ring-buffer-client.h" diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-client-overwrite.c b/ltt/lttng-2.11.0/lttng-ring-buffer-client-overwrite.c new file mode 100644 index 000000000000..6623aff57a46 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-client-overwrite.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client-overwrite.c + * + * LTTng lib ring buffer client (overwrite mode). + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_OVERWRITE +#define RING_BUFFER_MODE_TEMPLATE_STRING "overwrite" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_SPLICE +#include "lttng-ring-buffer-client.h" diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-client.h b/ltt/lttng-2.11.0/lttng-ring-buffer-client.h new file mode 100644 index 000000000000..ff6283087d61 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-client.h @@ -0,0 +1,790 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client.h + * + * LTTng lib ring buffer client template. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include +#include + +#define LTTNG_COMPACT_EVENT_BITS 5 +#define LTTNG_COMPACT_TSC_BITS 27 + +static struct lttng_transport lttng_relay_transport; + +/* + * Keep the natural field alignment for _each field_ within this structure if + * you ever add/remove a field from this header. Packed attribute is not used + * because gcc generates poor code on at least powerpc and mips. Don't ever + * let gcc add padding between the structure elements. + * + * The guarantee we have with timestamps is that all the events in a + * packet are included (inclusive) within the begin/end timestamps of + * the packet. Another guarantee we have is that the "timestamp begin", + * as well as the event timestamps, are monotonically increasing (never + * decrease) when moving forward in a stream (physically). But this + * guarantee does not apply to "timestamp end", because it is sampled at + * commit time, which is not ordered with respect to space reservation. + */ + +struct packet_header { + /* Trace packet header */ + uint32_t magic; /* + * Trace magic number. + * contains endianness information. + */ + uint8_t uuid[16]; + uint32_t stream_id; + uint64_t stream_instance_id; + + struct { + /* Stream packet context */ + uint64_t timestamp_begin; /* Cycle count at subbuffer start */ + uint64_t timestamp_end; /* Cycle count at subbuffer end */ + uint64_t content_size; /* Size of data in subbuffer */ + uint64_t packet_size; /* Subbuffer size (include padding) */ + uint64_t packet_seq_num; /* Packet sequence number */ + unsigned long events_discarded; /* + * Events lost in this subbuffer since + * the beginning of the trace. + * (may overflow) + */ + uint32_t cpu_id; /* CPU id associated with stream */ + uint8_t header_end; /* End of header */ + } ctx; +}; + +struct lttng_client_ctx { + size_t packet_context_len; + size_t event_context_len; +}; + +static inline notrace u64 lib_ring_buffer_clock_read(struct channel *chan) +{ + return trace_clock_read64(); +} + +static inline +size_t ctx_get_aligned_size(size_t offset, struct lttng_ctx *ctx, + size_t ctx_len) +{ + size_t orig_offset = offset; + + if (likely(!ctx)) + return 0; + offset += lib_ring_buffer_align(offset, ctx->largest_align); + offset += ctx_len; + return offset - orig_offset; +} + +static inline +void ctx_get_struct_size(struct lttng_ctx *ctx, size_t *ctx_len, + struct lttng_channel *chan, struct lib_ring_buffer_ctx *bufctx) +{ + int i; + size_t offset = 0; + + if (likely(!ctx)) { + *ctx_len = 0; + return; + } + for (i = 0; i < ctx->nr_fields; i++) { + if (ctx->fields[i].get_size) + offset += ctx->fields[i].get_size(offset); + if (ctx->fields[i].get_size_arg) + offset += ctx->fields[i].get_size_arg(offset, + &ctx->fields[i], bufctx, chan); + } + *ctx_len = offset; +} + +static inline +void ctx_record(struct lib_ring_buffer_ctx *bufctx, + struct lttng_channel *chan, + struct lttng_ctx *ctx) +{ + int i; + + if (likely(!ctx)) + return; + lib_ring_buffer_align_ctx(bufctx, ctx->largest_align); + for (i = 0; i < ctx->nr_fields; i++) + ctx->fields[i].record(&ctx->fields[i], bufctx, chan); +} + +/* + * record_header_size - Calculate the header size and padding necessary. + * @config: ring buffer instance configuration + * @chan: channel + * @offset: offset in the write buffer + * @pre_header_padding: padding to add before the header (output) + * @ctx: reservation context + * + * Returns the event header size (including padding). + * + * The payload must itself determine its own alignment from the biggest type it + * contains. + */ +static __inline__ +size_t record_header_size(const struct lib_ring_buffer_config *config, + struct channel *chan, size_t offset, + size_t *pre_header_padding, + struct lib_ring_buffer_ctx *ctx, + struct lttng_client_ctx *client_ctx) +{ + struct lttng_channel *lttng_chan = channel_get_private(chan); + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; + size_t orig_offset = offset; + size_t padding; + + switch (lttng_chan->header_type) { + case 1: /* compact */ + padding = lib_ring_buffer_align(offset, lttng_alignof(uint32_t)); + offset += padding; + if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) { + offset += sizeof(uint32_t); /* id and timestamp */ + } else { + /* Minimum space taken by LTTNG_COMPACT_EVENT_BITS id */ + offset += (LTTNG_COMPACT_EVENT_BITS + CHAR_BIT - 1) / CHAR_BIT; + /* Align extended struct on largest member */ + offset += lib_ring_buffer_align(offset, lttng_alignof(uint64_t)); + offset += sizeof(uint32_t); /* id */ + offset += lib_ring_buffer_align(offset, lttng_alignof(uint64_t)); + offset += sizeof(uint64_t); /* timestamp */ + } + break; + case 2: /* large */ + padding = lib_ring_buffer_align(offset, lttng_alignof(uint16_t)); + offset += padding; + offset += sizeof(uint16_t); + if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) { + offset += lib_ring_buffer_align(offset, lttng_alignof(uint32_t)); + offset += sizeof(uint32_t); /* timestamp */ + } else { + /* Align extended struct on largest member */ + offset += lib_ring_buffer_align(offset, lttng_alignof(uint64_t)); + offset += sizeof(uint32_t); /* id */ + offset += lib_ring_buffer_align(offset, lttng_alignof(uint64_t)); + offset += sizeof(uint64_t); /* timestamp */ + } + break; + default: + padding = 0; + WARN_ON_ONCE(1); + } + offset += ctx_get_aligned_size(offset, lttng_chan->ctx, + client_ctx->packet_context_len); + offset += ctx_get_aligned_size(offset, event->ctx, + client_ctx->event_context_len); + + *pre_header_padding = padding; + return offset - orig_offset; +} + +#include + +static +void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + uint32_t event_id); + +/* + * lttng_write_event_header + * + * Writes the event header to the offset (already aligned on 32-bits). + * + * @config: ring buffer instance configuration + * @ctx: reservation context + * @event_id: event ID + */ +static __inline__ +void lttng_write_event_header(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + uint32_t event_id) +{ + struct lttng_channel *lttng_chan = channel_get_private(ctx->chan); + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; + + if (unlikely(ctx->rflags)) + goto slow_path; + + switch (lttng_chan->header_type) { + case 1: /* compact */ + { + uint32_t id_time = 0; + + bt_bitfield_write(&id_time, uint32_t, + 0, + LTTNG_COMPACT_EVENT_BITS, + event_id); + bt_bitfield_write(&id_time, uint32_t, + LTTNG_COMPACT_EVENT_BITS, + LTTNG_COMPACT_TSC_BITS, + ctx->tsc); + lib_ring_buffer_write(config, ctx, &id_time, sizeof(id_time)); + break; + } + case 2: /* large */ + { + uint32_t timestamp = (uint32_t) ctx->tsc; + uint16_t id = event_id; + + lib_ring_buffer_write(config, ctx, &id, sizeof(id)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint32_t)); + lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp)); + break; + } + default: + WARN_ON_ONCE(1); + } + + ctx_record(ctx, lttng_chan, lttng_chan->ctx); + ctx_record(ctx, lttng_chan, event->ctx); + lib_ring_buffer_align_ctx(ctx, ctx->largest_align); + + return; + +slow_path: + lttng_write_event_header_slow(config, ctx, event_id); +} + +static +void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer_ctx *ctx, + uint32_t event_id) +{ + struct lttng_channel *lttng_chan = channel_get_private(ctx->chan); + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; + + switch (lttng_chan->header_type) { + case 1: /* compact */ + if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) { + uint32_t id_time = 0; + + bt_bitfield_write(&id_time, uint32_t, + 0, + LTTNG_COMPACT_EVENT_BITS, + event_id); + bt_bitfield_write(&id_time, uint32_t, + LTTNG_COMPACT_EVENT_BITS, + LTTNG_COMPACT_TSC_BITS, ctx->tsc); + lib_ring_buffer_write(config, ctx, &id_time, sizeof(id_time)); + } else { + uint8_t id = 0; + uint64_t timestamp = ctx->tsc; + + bt_bitfield_write(&id, uint8_t, + 0, + LTTNG_COMPACT_EVENT_BITS, + 31); + lib_ring_buffer_write(config, ctx, &id, sizeof(id)); + /* Align extended struct on largest member */ + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint64_t)); + lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint64_t)); + lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp)); + } + break; + case 2: /* large */ + { + if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) { + uint32_t timestamp = (uint32_t) ctx->tsc; + uint16_t id = event_id; + + lib_ring_buffer_write(config, ctx, &id, sizeof(id)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint32_t)); + lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp)); + } else { + uint16_t id = 65535; + uint64_t timestamp = ctx->tsc; + + lib_ring_buffer_write(config, ctx, &id, sizeof(id)); + /* Align extended struct on largest member */ + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint64_t)); + lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id)); + lib_ring_buffer_align_ctx(ctx, lttng_alignof(uint64_t)); + lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp)); + } + break; + } + default: + WARN_ON_ONCE(1); + } + ctx_record(ctx, lttng_chan, lttng_chan->ctx); + ctx_record(ctx, lttng_chan, event->ctx); + lib_ring_buffer_align_ctx(ctx, ctx->largest_align); +} + +static const struct lib_ring_buffer_config client_config; + +static u64 client_ring_buffer_clock_read(struct channel *chan) +{ + return lib_ring_buffer_clock_read(chan); +} + +static +size_t client_record_header_size(const struct lib_ring_buffer_config *config, + struct channel *chan, size_t offset, + size_t *pre_header_padding, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + return record_header_size(config, chan, offset, + pre_header_padding, ctx, client_ctx); +} + +/** + * client_packet_header_size - called on buffer-switch to a new sub-buffer + * + * Return header size without padding after the structure. Don't use packed + * structure because gcc generates inefficient code on some architectures + * (powerpc, mips..) + */ +static size_t client_packet_header_size(void) +{ + return offsetof(struct packet_header, ctx.header_end); +} + +static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx) +{ + struct channel *chan = buf->backend.chan; + struct packet_header *header = + (struct packet_header *) + lib_ring_buffer_offset_address(&buf->backend, + subbuf_idx * chan->backend.subbuf_size); + struct lttng_channel *lttng_chan = channel_get_private(chan); + struct lttng_session *session = lttng_chan->session; + + header->magic = CTF_MAGIC_NUMBER; + memcpy(header->uuid, session->uuid.b, sizeof(session->uuid)); + header->stream_id = lttng_chan->id; + header->stream_instance_id = buf->backend.cpu; + header->ctx.timestamp_begin = tsc; + header->ctx.timestamp_end = 0; + header->ctx.content_size = ~0ULL; /* for debugging */ + header->ctx.packet_size = ~0ULL; + header->ctx.packet_seq_num = chan->backend.num_subbuf * \ + buf->backend.buf_cnt[subbuf_idx].seq_cnt + \ + subbuf_idx; + header->ctx.events_discarded = 0; + header->ctx.cpu_id = buf->backend.cpu; +} + +/* + * offset is assumed to never be 0 here : never deliver a completely empty + * subbuffer. data_size is between 1 and subbuf_size. + */ +static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx, unsigned long data_size) +{ + struct channel *chan = buf->backend.chan; + struct packet_header *header = + (struct packet_header *) + lib_ring_buffer_offset_address(&buf->backend, + subbuf_idx * chan->backend.subbuf_size); + unsigned long records_lost = 0; + + header->ctx.timestamp_end = tsc; + header->ctx.content_size = + (uint64_t) data_size * CHAR_BIT; /* in bits */ + header->ctx.packet_size = + (uint64_t) PAGE_ALIGN(data_size) * CHAR_BIT; /* in bits */ + records_lost += lib_ring_buffer_get_records_lost_full(&client_config, buf); + records_lost += lib_ring_buffer_get_records_lost_wrap(&client_config, buf); + records_lost += lib_ring_buffer_get_records_lost_big(&client_config, buf); + header->ctx.events_discarded = records_lost; +} + +static int client_buffer_create(struct lib_ring_buffer *buf, void *priv, + int cpu, const char *name) +{ + return 0; +} + +static void client_buffer_finalize(struct lib_ring_buffer *buf, void *priv, int cpu) +{ +} + +static struct packet_header *client_packet_header( + const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf) +{ + return lib_ring_buffer_read_offset_address(&buf->backend, 0); +} + +static int client_timestamp_begin(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *timestamp_begin) +{ + struct packet_header *header = client_packet_header(config, buf); + *timestamp_begin = header->ctx.timestamp_begin; + + return 0; +} + +static int client_timestamp_end(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *timestamp_end) +{ + struct packet_header *header = client_packet_header(config, buf); + *timestamp_end = header->ctx.timestamp_end; + + return 0; +} + +static int client_events_discarded(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *events_discarded) +{ + struct packet_header *header = client_packet_header(config, buf); + *events_discarded = header->ctx.events_discarded; + + return 0; +} + +static int client_content_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *content_size) +{ + struct packet_header *header = client_packet_header(config, buf); + *content_size = header->ctx.content_size; + + return 0; +} + +static int client_packet_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *packet_size) +{ + struct packet_header *header = client_packet_header(config, buf); + *packet_size = header->ctx.packet_size; + + return 0; +} + +static int client_stream_id(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *stream_id) +{ + struct channel *chan = buf->backend.chan; + struct lttng_channel *lttng_chan = channel_get_private(chan); + + *stream_id = lttng_chan->id; + return 0; +} + +static int client_current_timestamp(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *ts) +{ + *ts = config->cb.ring_buffer_clock_read(bufb->backend.chan); + + return 0; +} + +static int client_sequence_number(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *seq) +{ + struct packet_header *header = client_packet_header(config, buf); + + *seq = header->ctx.packet_seq_num; + + return 0; +} + +static +int client_instance_id(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *id) +{ + *id = buf->backend.cpu; + + return 0; +} + +static const struct lib_ring_buffer_config client_config = { + .cb.ring_buffer_clock_read = client_ring_buffer_clock_read, + .cb.record_header_size = client_record_header_size, + .cb.subbuffer_header_size = client_packet_header_size, + .cb.buffer_begin = client_buffer_begin, + .cb.buffer_end = client_buffer_end, + .cb.buffer_create = client_buffer_create, + .cb.buffer_finalize = client_buffer_finalize, + + .tsc_bits = LTTNG_COMPACT_TSC_BITS, + .alloc = RING_BUFFER_ALLOC_PER_CPU, + .sync = RING_BUFFER_SYNC_PER_CPU, + .mode = RING_BUFFER_MODE_TEMPLATE, + .backend = RING_BUFFER_PAGE, + .output = RING_BUFFER_OUTPUT_TEMPLATE, + .oops = RING_BUFFER_OOPS_CONSISTENCY, + .ipi = RING_BUFFER_IPI_BARRIER, + .wakeup = RING_BUFFER_WAKEUP_BY_TIMER, +}; + +static +void release_priv_ops(void *priv_ops) +{ + module_put(THIS_MODULE); +} + +static +void lttng_channel_destroy(struct channel *chan) +{ + channel_destroy(chan); +} + +static +struct channel *_channel_create(const char *name, + struct lttng_channel *lttng_chan, void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval) +{ + struct channel *chan; + + chan = channel_create(&client_config, name, lttng_chan, buf_addr, + subbuf_size, num_subbuf, switch_timer_interval, + read_timer_interval); + if (chan) { + /* + * Ensure this module is not unloaded before we finish + * using lttng_relay_transport.ops. + */ + if (!try_module_get(THIS_MODULE)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + goto error; + } + chan->backend.priv_ops = <tng_relay_transport.ops; + chan->backend.release_priv_ops = release_priv_ops; + } + return chan; + +error: + lttng_channel_destroy(chan); + return NULL; +} + +static +struct lib_ring_buffer *lttng_buffer_read_open(struct channel *chan) +{ + struct lib_ring_buffer *buf; + int cpu; + + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(&client_config, chan, cpu); + if (!lib_ring_buffer_open_read(buf)) + return buf; + } + return NULL; +} + +static +int lttng_buffer_has_read_closed_stream(struct channel *chan) +{ + struct lib_ring_buffer *buf; + int cpu; + + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(&client_config, chan, cpu); + if (!atomic_long_read(&buf->active_readers)) + return 1; + } + return 0; +} + +static +void lttng_buffer_read_close(struct lib_ring_buffer *buf) +{ + lib_ring_buffer_release_read(buf); +} + +static +int lttng_event_reserve(struct lib_ring_buffer_ctx *ctx, + uint32_t event_id) +{ + struct lttng_channel *lttng_chan = channel_get_private(ctx->chan); + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; + struct lttng_client_ctx client_ctx; + int ret, cpu; + + cpu = lib_ring_buffer_get_cpu(&client_config); + if (unlikely(cpu < 0)) + return -EPERM; + ctx->cpu = cpu; + + /* Compute internal size of context structures. */ + ctx_get_struct_size(lttng_chan->ctx, &client_ctx.packet_context_len, lttng_chan, ctx); + ctx_get_struct_size(event->ctx, &client_ctx.event_context_len, lttng_chan, ctx); + + switch (lttng_chan->header_type) { + case 1: /* compact */ + if (event_id > 30) + ctx->rflags |= LTTNG_RFLAG_EXTENDED; + break; + case 2: /* large */ + if (event_id > 65534) + ctx->rflags |= LTTNG_RFLAG_EXTENDED; + break; + default: + WARN_ON_ONCE(1); + } + + ret = lib_ring_buffer_reserve(&client_config, ctx, &client_ctx); + if (unlikely(ret)) + goto put; + lib_ring_buffer_backend_get_pages(&client_config, ctx, + &ctx->backend_pages); + lttng_write_event_header(&client_config, ctx, event_id); + return 0; +put: + lib_ring_buffer_put_cpu(&client_config); + return ret; +} + +static +void lttng_event_commit(struct lib_ring_buffer_ctx *ctx) +{ + lib_ring_buffer_commit(&client_config, ctx); + lib_ring_buffer_put_cpu(&client_config); +} + +static +void lttng_event_write(struct lib_ring_buffer_ctx *ctx, const void *src, + size_t len) +{ + lib_ring_buffer_write(&client_config, ctx, src, len); +} + +static +void lttng_event_write_from_user(struct lib_ring_buffer_ctx *ctx, + const void __user *src, size_t len) +{ + lib_ring_buffer_copy_from_user_inatomic(&client_config, ctx, src, len); +} + +static +void lttng_event_memset(struct lib_ring_buffer_ctx *ctx, + int c, size_t len) +{ + lib_ring_buffer_memset(&client_config, ctx, c, len); +} + +static +void lttng_event_strcpy(struct lib_ring_buffer_ctx *ctx, const char *src, + size_t len) +{ + lib_ring_buffer_strcpy(&client_config, ctx, src, len, '#'); +} + +static +void lttng_event_strcpy_from_user(struct lib_ring_buffer_ctx *ctx, + const char __user *src, size_t len) +{ + lib_ring_buffer_strcpy_from_user_inatomic(&client_config, ctx, src, + len, '#'); +} + +static +wait_queue_head_t *lttng_get_writer_buf_wait_queue(struct channel *chan, int cpu) +{ + struct lib_ring_buffer *buf = channel_get_ring_buffer(&client_config, + chan, cpu); + return &buf->write_wait; +} + +static +wait_queue_head_t *lttng_get_hp_wait_queue(struct channel *chan) +{ + return &chan->hp_wait; +} + +static +int lttng_is_finalized(struct channel *chan) +{ + return lib_ring_buffer_channel_is_finalized(chan); +} + +static +int lttng_is_disabled(struct channel *chan) +{ + return lib_ring_buffer_channel_is_disabled(chan); +} + +static struct lttng_transport lttng_relay_transport = { + .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING, + .owner = THIS_MODULE, + .ops = { + .channel_create = _channel_create, + .channel_destroy = lttng_channel_destroy, + .buffer_read_open = lttng_buffer_read_open, + .buffer_has_read_closed_stream = + lttng_buffer_has_read_closed_stream, + .buffer_read_close = lttng_buffer_read_close, + .event_reserve = lttng_event_reserve, + .event_commit = lttng_event_commit, + .event_write = lttng_event_write, + .event_write_from_user = lttng_event_write_from_user, + .event_memset = lttng_event_memset, + .event_strcpy = lttng_event_strcpy, + .event_strcpy_from_user = lttng_event_strcpy_from_user, + .packet_avail_size = NULL, /* Would be racy anyway */ + .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue, + .get_hp_wait_queue = lttng_get_hp_wait_queue, + .is_finalized = lttng_is_finalized, + .is_disabled = lttng_is_disabled, + .timestamp_begin = client_timestamp_begin, + .timestamp_end = client_timestamp_end, + .events_discarded = client_events_discarded, + .content_size = client_content_size, + .packet_size = client_packet_size, + .stream_id = client_stream_id, + .current_timestamp = client_current_timestamp, + .sequence_number = client_sequence_number, + .instance_id = client_instance_id, + }, +}; + +static int __init lttng_ring_buffer_client_init(void) +{ + /* + * This vmalloc sync all also takes care of the lib ring buffer + * vmalloc'd module pages when it is built as a module into LTTng. + */ + wrapper_vmalloc_sync_mappings(); + lttng_transport_register(<tng_relay_transport); + return 0; +} + +module_init(lttng_ring_buffer_client_init); + +static void __exit lttng_ring_buffer_client_exit(void) +{ + lttng_transport_unregister(<tng_relay_transport); +} + +module_exit(lttng_ring_buffer_client_exit); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng ring buffer " RING_BUFFER_MODE_TEMPLATE_STRING + " client"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.c b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.c new file mode 100644 index 000000000000..66c4e719c93a --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-metadata-client.c + * + * LTTng lib ring buffer metadta client. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_DISCARD +#define RING_BUFFER_MODE_TEMPLATE_STRING "metadata" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_SPLICE +#include "lttng-ring-buffer-metadata-client.h" diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.h b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.h new file mode 100644 index 000000000000..a098b8d8474f --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-client.h @@ -0,0 +1,452 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-client.h + * + * LTTng lib ring buffer client template. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include + +static struct lttng_transport lttng_relay_transport; + +struct metadata_packet_header { + uint32_t magic; /* 0x75D11D57 */ + uint8_t uuid[16]; /* Unique Universal Identifier */ + uint32_t checksum; /* 0 if unused */ + uint32_t content_size; /* in bits */ + uint32_t packet_size; /* in bits */ + uint8_t compression_scheme; /* 0 if unused */ + uint8_t encryption_scheme; /* 0 if unused */ + uint8_t checksum_scheme; /* 0 if unused */ + uint8_t major; /* CTF spec major version number */ + uint8_t minor; /* CTF spec minor version number */ + uint8_t header_end[0]; +}; + +struct metadata_record_header { + uint8_t header_end[0]; /* End of header */ +}; + +static const struct lib_ring_buffer_config client_config; + +static inline +u64 lib_ring_buffer_clock_read(struct channel *chan) +{ + return 0; +} + +static inline +size_t record_header_size(const struct lib_ring_buffer_config *config, + struct channel *chan, size_t offset, + size_t *pre_header_padding, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + return 0; +} + +#include + +static u64 client_ring_buffer_clock_read(struct channel *chan) +{ + return 0; +} + +static +size_t client_record_header_size(const struct lib_ring_buffer_config *config, + struct channel *chan, size_t offset, + size_t *pre_header_padding, + struct lib_ring_buffer_ctx *ctx, + void *client_ctx) +{ + return 0; +} + +/** + * client_packet_header_size - called on buffer-switch to a new sub-buffer + * + * Return header size without padding after the structure. Don't use packed + * structure because gcc generates inefficient code on some architectures + * (powerpc, mips..) + */ +static size_t client_packet_header_size(void) +{ + return offsetof(struct metadata_packet_header, header_end); +} + +static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx) +{ + struct channel *chan = buf->backend.chan; + struct metadata_packet_header *header = + (struct metadata_packet_header *) + lib_ring_buffer_offset_address(&buf->backend, + subbuf_idx * chan->backend.subbuf_size); + struct lttng_metadata_cache *metadata_cache = + channel_get_private(chan); + + header->magic = TSDL_MAGIC_NUMBER; + memcpy(header->uuid, metadata_cache->uuid.b, + sizeof(metadata_cache->uuid)); + header->checksum = 0; /* 0 if unused */ + header->content_size = 0xFFFFFFFF; /* in bits, for debugging */ + header->packet_size = 0xFFFFFFFF; /* in bits, for debugging */ + header->compression_scheme = 0; /* 0 if unused */ + header->encryption_scheme = 0; /* 0 if unused */ + header->checksum_scheme = 0; /* 0 if unused */ + header->major = CTF_SPEC_MAJOR; + header->minor = CTF_SPEC_MINOR; +} + +/* + * offset is assumed to never be 0 here : never deliver a completely empty + * subbuffer. data_size is between 1 and subbuf_size. + */ +static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc, + unsigned int subbuf_idx, unsigned long data_size) +{ + struct channel *chan = buf->backend.chan; + struct metadata_packet_header *header = + (struct metadata_packet_header *) + lib_ring_buffer_offset_address(&buf->backend, + subbuf_idx * chan->backend.subbuf_size); + unsigned long records_lost = 0; + + header->content_size = data_size * CHAR_BIT; /* in bits */ + header->packet_size = PAGE_ALIGN(data_size) * CHAR_BIT; /* in bits */ + /* + * We do not care about the records lost count, because the metadata + * channel waits and retry. + */ + (void) lib_ring_buffer_get_records_lost_full(&client_config, buf); + records_lost += lib_ring_buffer_get_records_lost_wrap(&client_config, buf); + records_lost += lib_ring_buffer_get_records_lost_big(&client_config, buf); + WARN_ON_ONCE(records_lost != 0); +} + +static int client_buffer_create(struct lib_ring_buffer *buf, void *priv, + int cpu, const char *name) +{ + return 0; +} + +static void client_buffer_finalize(struct lib_ring_buffer *buf, void *priv, int cpu) +{ +} + +static int client_timestamp_begin(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, uint64_t *timestamp_begin) +{ + return -ENOSYS; +} + +static int client_timestamp_end(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *timestamp_end) +{ + return -ENOSYS; +} + +static int client_events_discarded(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *events_discarded) +{ + return -ENOSYS; +} + +static int client_current_timestamp(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *ts) +{ + return -ENOSYS; +} + +static int client_content_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *content_size) +{ + return -ENOSYS; +} + +static int client_packet_size(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *packet_size) +{ + return -ENOSYS; +} + +static int client_stream_id(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *stream_id) +{ + return -ENOSYS; +} + +static int client_sequence_number(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *seq) +{ + return -ENOSYS; +} + +static +int client_instance_id(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *bufb, + uint64_t *id) +{ + return -ENOSYS; +} + +static const struct lib_ring_buffer_config client_config = { + .cb.ring_buffer_clock_read = client_ring_buffer_clock_read, + .cb.record_header_size = client_record_header_size, + .cb.subbuffer_header_size = client_packet_header_size, + .cb.buffer_begin = client_buffer_begin, + .cb.buffer_end = client_buffer_end, + .cb.buffer_create = client_buffer_create, + .cb.buffer_finalize = client_buffer_finalize, + + .tsc_bits = 0, + .alloc = RING_BUFFER_ALLOC_GLOBAL, + .sync = RING_BUFFER_SYNC_GLOBAL, + .mode = RING_BUFFER_MODE_TEMPLATE, + .backend = RING_BUFFER_PAGE, + .output = RING_BUFFER_OUTPUT_TEMPLATE, + .oops = RING_BUFFER_OOPS_CONSISTENCY, + .ipi = RING_BUFFER_IPI_BARRIER, + .wakeup = RING_BUFFER_WAKEUP_BY_TIMER, +}; + +static +void release_priv_ops(void *priv_ops) +{ + module_put(THIS_MODULE); +} + +static +void lttng_channel_destroy(struct channel *chan) +{ + channel_destroy(chan); +} + +static +struct channel *_channel_create(const char *name, + struct lttng_channel *lttng_chan, void *buf_addr, + size_t subbuf_size, size_t num_subbuf, + unsigned int switch_timer_interval, + unsigned int read_timer_interval) +{ + struct channel *chan; + + chan = channel_create(&client_config, name, + lttng_chan->session->metadata_cache, buf_addr, + subbuf_size, num_subbuf, switch_timer_interval, + read_timer_interval); + if (chan) { + /* + * Ensure this module is not unloaded before we finish + * using lttng_relay_transport.ops. + */ + if (!try_module_get(THIS_MODULE)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + goto error; + } + chan->backend.priv_ops = <tng_relay_transport.ops; + chan->backend.release_priv_ops = release_priv_ops; + } + return chan; + +error: + lttng_channel_destroy(chan); + return NULL; +} + +static +struct lib_ring_buffer *lttng_buffer_read_open(struct channel *chan) +{ + struct lib_ring_buffer *buf; + + buf = channel_get_ring_buffer(&client_config, chan, 0); + if (!lib_ring_buffer_open_read(buf)) + return buf; + return NULL; +} + +static +int lttng_buffer_has_read_closed_stream(struct channel *chan) +{ + struct lib_ring_buffer *buf; + int cpu; + + for_each_channel_cpu(cpu, chan) { + buf = channel_get_ring_buffer(&client_config, chan, cpu); + if (!atomic_long_read(&buf->active_readers)) + return 1; + } + return 0; +} + +static +void lttng_buffer_read_close(struct lib_ring_buffer *buf) +{ + lib_ring_buffer_release_read(buf); +} + +static +int lttng_event_reserve(struct lib_ring_buffer_ctx *ctx, uint32_t event_id) +{ + int ret; + + ret = lib_ring_buffer_reserve(&client_config, ctx, NULL); + if (ret) + return ret; + lib_ring_buffer_backend_get_pages(&client_config, ctx, + &ctx->backend_pages); + return 0; + +} + +static +void lttng_event_commit(struct lib_ring_buffer_ctx *ctx) +{ + lib_ring_buffer_commit(&client_config, ctx); +} + +static +void lttng_event_write(struct lib_ring_buffer_ctx *ctx, const void *src, + size_t len) +{ + lib_ring_buffer_write(&client_config, ctx, src, len); +} + +static +void lttng_event_write_from_user(struct lib_ring_buffer_ctx *ctx, + const void __user *src, size_t len) +{ + lib_ring_buffer_copy_from_user_inatomic(&client_config, ctx, src, len); +} + +static +void lttng_event_memset(struct lib_ring_buffer_ctx *ctx, + int c, size_t len) +{ + lib_ring_buffer_memset(&client_config, ctx, c, len); +} + +static +void lttng_event_strcpy(struct lib_ring_buffer_ctx *ctx, const char *src, + size_t len) +{ + lib_ring_buffer_strcpy(&client_config, ctx, src, len, '#'); +} + +static +size_t lttng_packet_avail_size(struct channel *chan) + +{ + unsigned long o_begin; + struct lib_ring_buffer *buf; + + buf = chan->backend.buf; /* Only for global buffer ! */ + o_begin = v_read(&client_config, &buf->offset); + if (subbuf_offset(o_begin, chan) != 0) { + return chan->backend.subbuf_size - subbuf_offset(o_begin, chan); + } else { + return chan->backend.subbuf_size - subbuf_offset(o_begin, chan) + - sizeof(struct metadata_packet_header); + } +} + +static +wait_queue_head_t *lttng_get_writer_buf_wait_queue(struct channel *chan, int cpu) +{ + struct lib_ring_buffer *buf = channel_get_ring_buffer(&client_config, + chan, cpu); + return &buf->write_wait; +} + +static +wait_queue_head_t *lttng_get_hp_wait_queue(struct channel *chan) +{ + return &chan->hp_wait; +} + +static +int lttng_is_finalized(struct channel *chan) +{ + return lib_ring_buffer_channel_is_finalized(chan); +} + +static +int lttng_is_disabled(struct channel *chan) +{ + return lib_ring_buffer_channel_is_disabled(chan); +} + +static struct lttng_transport lttng_relay_transport = { + .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING, + .owner = THIS_MODULE, + .ops = { + .channel_create = _channel_create, + .channel_destroy = lttng_channel_destroy, + .buffer_read_open = lttng_buffer_read_open, + .buffer_has_read_closed_stream = + lttng_buffer_has_read_closed_stream, + .buffer_read_close = lttng_buffer_read_close, + .event_reserve = lttng_event_reserve, + .event_commit = lttng_event_commit, + .event_write_from_user = lttng_event_write_from_user, + .event_memset = lttng_event_memset, + .event_write = lttng_event_write, + .event_strcpy = lttng_event_strcpy, + .packet_avail_size = lttng_packet_avail_size, + .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue, + .get_hp_wait_queue = lttng_get_hp_wait_queue, + .is_finalized = lttng_is_finalized, + .is_disabled = lttng_is_disabled, + .timestamp_begin = client_timestamp_begin, + .timestamp_end = client_timestamp_end, + .events_discarded = client_events_discarded, + .content_size = client_content_size, + .packet_size = client_packet_size, + .stream_id = client_stream_id, + .current_timestamp = client_current_timestamp, + .sequence_number = client_sequence_number, + .instance_id = client_instance_id, + }, +}; + +static int __init lttng_ring_buffer_client_init(void) +{ + /* + * This vmalloc sync all also takes care of the lib ring buffer + * vmalloc'd module pages when it is built as a module into LTTng. + */ + wrapper_vmalloc_sync_mappings(); + lttng_transport_register(<tng_relay_transport); + return 0; +} + +module_init(lttng_ring_buffer_client_init); + +static void __exit lttng_ring_buffer_client_exit(void) +{ + lttng_transport_unregister(<tng_relay_transport); +} + +module_exit(lttng_ring_buffer_client_exit); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng ring buffer " RING_BUFFER_MODE_TEMPLATE_STRING + " client"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-mmap-client.c b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-mmap-client.c new file mode 100644 index 000000000000..0f751ddfc6ee --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-ring-buffer-metadata-mmap-client.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-ring-buffer-metadata-client.c + * + * LTTng lib ring buffer metadta client. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +#define RING_BUFFER_MODE_TEMPLATE RING_BUFFER_DISCARD +#define RING_BUFFER_MODE_TEMPLATE_STRING "metadata-mmap" +#define RING_BUFFER_OUTPUT_TEMPLATE RING_BUFFER_MMAP +#include "lttng-ring-buffer-metadata-client.h" diff --git a/ltt/lttng-2.11.0/lttng-statedump-impl.c b/ltt/lttng-2.11.0/lttng-statedump-impl.c new file mode 100644 index 000000000000..a8c32db5e83e --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-statedump-impl.c @@ -0,0 +1,591 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-statedump.c + * + * Linux Trace Toolkit Next Generation Kernel State Dump + * + * Copyright 2005 Jean-Hugues Deschenes + * Copyright 2006-2012 Mathieu Desnoyers + * + * Changes: + * Eric Clement: Add listing of network IP interface + * 2006, 2007 Mathieu Desnoyers Fix kernel threads + * Various updates + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_LTTNG_HAS_LIST_IRQ +#include +#endif + +/* Define the tracepoints, but do not build the probes */ +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module +#define TRACE_INCLUDE_FILE lttng-statedump +#define LTTNG_INSTRUMENTATION +#include + +LTTNG_DEFINE_TRACE(lttng_statedump_block_device, + TP_PROTO(struct lttng_session *session, + dev_t dev, const char *diskname), + TP_ARGS(session, dev, diskname)); + +LTTNG_DEFINE_TRACE(lttng_statedump_end, + TP_PROTO(struct lttng_session *session), + TP_ARGS(session)); + +LTTNG_DEFINE_TRACE(lttng_statedump_interrupt, + TP_PROTO(struct lttng_session *session, + unsigned int irq, const char *chip_name, + struct irqaction *action), + TP_ARGS(session, irq, chip_name, action)); + +LTTNG_DEFINE_TRACE(lttng_statedump_file_descriptor, + TP_PROTO(struct lttng_session *session, + struct task_struct *p, int fd, const char *filename, + unsigned int flags, fmode_t fmode), + TP_ARGS(session, p, fd, filename, flags, fmode)); + +LTTNG_DEFINE_TRACE(lttng_statedump_start, + TP_PROTO(struct lttng_session *session), + TP_ARGS(session)); + +LTTNG_DEFINE_TRACE(lttng_statedump_process_state, + TP_PROTO(struct lttng_session *session, + struct task_struct *p, + int type, int mode, int submode, int status, + struct pid_namespace *pid_ns), + TP_ARGS(session, p, type, mode, submode, status, pid_ns)); + +LTTNG_DEFINE_TRACE(lttng_statedump_network_interface, + TP_PROTO(struct lttng_session *session, + struct net_device *dev, struct in_ifaddr *ifa), + TP_ARGS(session, dev, ifa)); + +struct lttng_fd_ctx { + char *page; + struct lttng_session *session; + struct task_struct *p; + struct files_struct *files; +}; + +/* + * Protected by the trace lock. + */ +static struct delayed_work cpu_work[NR_CPUS]; +static DECLARE_WAIT_QUEUE_HEAD(statedump_wq); +static atomic_t kernel_threads_to_run; + +enum lttng_thread_type { + LTTNG_USER_THREAD = 0, + LTTNG_KERNEL_THREAD = 1, +}; + +enum lttng_execution_mode { + LTTNG_USER_MODE = 0, + LTTNG_SYSCALL = 1, + LTTNG_TRAP = 2, + LTTNG_IRQ = 3, + LTTNG_SOFTIRQ = 4, + LTTNG_MODE_UNKNOWN = 5, +}; + +enum lttng_execution_submode { + LTTNG_NONE = 0, + LTTNG_UNKNOWN = 1, +}; + +enum lttng_process_status { + LTTNG_UNNAMED = 0, + LTTNG_WAIT_FORK = 1, + LTTNG_WAIT_CPU = 2, + LTTNG_EXIT = 3, + LTTNG_ZOMBIE = 4, + LTTNG_WAIT = 5, + LTTNG_RUN = 6, + LTTNG_DEAD = 7, +}; + +static +int lttng_enumerate_block_devices(struct lttng_session *session) +{ + struct class *ptr_block_class; + struct device_type *ptr_disk_type; + struct class_dev_iter iter; + struct device *dev; + + ptr_block_class = wrapper_get_block_class(); + if (!ptr_block_class) + return -ENOSYS; + ptr_disk_type = wrapper_get_disk_type(); + if (!ptr_disk_type) { + return -ENOSYS; + } + class_dev_iter_init(&iter, ptr_block_class, NULL, ptr_disk_type); + while ((dev = class_dev_iter_next(&iter))) { + struct disk_part_iter piter; + struct gendisk *disk = dev_to_disk(dev); + struct hd_struct *part; + + /* + * Don't show empty devices or things that have been + * suppressed + */ + if (get_capacity(disk) == 0 || + (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) + continue; + + disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); + while ((part = disk_part_iter_next(&piter))) { + struct block_device bdev; + char name_buf[BDEVNAME_SIZE]; + const char *p; + + /* + * Create a partial 'struct blockdevice' to use + * 'bdevname()' which is a simple wrapper over + * 'disk_name()' but has the honor to be EXPORT_SYMBOL. + */ + bdev.bd_disk = disk; + bdev.bd_part = part; + + p = bdevname(&bdev, name_buf); + if (!p) { + disk_part_iter_exit(&piter); + class_dev_iter_exit(&iter); + return -ENOSYS; + } + trace_lttng_statedump_block_device(session, + part_devt(part), name_buf); + } + disk_part_iter_exit(&piter); + } + class_dev_iter_exit(&iter); + return 0; +} + +#ifdef CONFIG_INET + +static +void lttng_enumerate_device(struct lttng_session *session, + struct net_device *dev) +{ + struct in_device *in_dev; + struct in_ifaddr *ifa; + + if (dev->flags & IFF_UP) { + in_dev = in_dev_get(dev); + if (in_dev) { + for (ifa = in_dev->ifa_list; ifa != NULL; + ifa = ifa->ifa_next) { + trace_lttng_statedump_network_interface( + session, dev, ifa); + } + in_dev_put(in_dev); + } + } else { + trace_lttng_statedump_network_interface( + session, dev, NULL); + } +} + +static +int lttng_enumerate_network_ip_interface(struct lttng_session *session) +{ + struct net_device *dev; + + read_lock(&dev_base_lock); + for_each_netdev(&init_net, dev) + lttng_enumerate_device(session, dev); + read_unlock(&dev_base_lock); + + return 0; +} +#else /* CONFIG_INET */ +static inline +int lttng_enumerate_network_ip_interface(struct lttng_session *session) +{ + return 0; +} +#endif /* CONFIG_INET */ + +static +int lttng_dump_one_fd(const void *p, struct file *file, unsigned int fd) +{ + const struct lttng_fd_ctx *ctx = p; + const char *s = d_path(&file->f_path, ctx->page, PAGE_SIZE); + unsigned int flags = file->f_flags; + struct fdtable *fdt; + + /* + * We don't expose kernel internal flags, only userspace-visible + * flags. + */ + flags &= ~FMODE_NONOTIFY; + fdt = files_fdtable(ctx->files); + /* + * We need to check here again whether fd is within the fdt + * max_fds range, because we might be seeing a different + * files_fdtable() than iterate_fd(), assuming only RCU is + * protecting the read. In reality, iterate_fd() holds + * file_lock, which should ensure the fdt does not change while + * the lock is taken, but we are not aware whether this is + * guaranteed or not, so play safe. + */ + if (fd < fdt->max_fds && lttng_close_on_exec(fd, fdt)) + flags |= O_CLOEXEC; + if (IS_ERR(s)) { + struct dentry *dentry = file->f_path.dentry; + + /* Make sure we give at least some info */ + spin_lock(&dentry->d_lock); + trace_lttng_statedump_file_descriptor(ctx->session, ctx->p, fd, + dentry->d_name.name, flags, file->f_mode); + spin_unlock(&dentry->d_lock); + goto end; + } + trace_lttng_statedump_file_descriptor(ctx->session, ctx->p, fd, s, + flags, file->f_mode); +end: + return 0; +} + +static +void lttng_enumerate_task_fd(struct lttng_session *session, + struct task_struct *p, char *tmp) +{ + struct lttng_fd_ctx ctx = { .page = tmp, .session = session, .p = p }; + struct files_struct *files; + + task_lock(p); + files = p->files; + if (!files) + goto end; + ctx.files = files; + lttng_iterate_fd(files, 0, lttng_dump_one_fd, &ctx); +end: + task_unlock(p); +} + +static +int lttng_enumerate_file_descriptors(struct lttng_session *session) +{ + struct task_struct *p; + char *tmp; + + tmp = (char *) __get_free_page(GFP_KERNEL); + if (!tmp) + return -ENOMEM; + + /* Enumerate active file descriptors */ + rcu_read_lock(); + for_each_process(p) + lttng_enumerate_task_fd(session, p, tmp); + rcu_read_unlock(); + free_page((unsigned long) tmp); + return 0; +} + +#if 0 +/* + * FIXME: we cannot take a mmap_sem while in a RCU read-side critical section + * (scheduling in atomic). Normally, the tasklist lock protects this kind of + * iteration, but it is not exported to modules. + */ +static +void lttng_enumerate_task_vm_maps(struct lttng_session *session, + struct task_struct *p) +{ + struct mm_struct *mm; + struct vm_area_struct *map; + unsigned long ino; + + /* get_task_mm does a task_lock... */ + mm = get_task_mm(p); + if (!mm) + return; + + map = mm->mmap; + if (map) { + down_read(&mm->mmap_sem); + while (map) { + if (map->vm_file) + ino = map->vm_file->lttng_f_dentry->d_inode->i_ino; + else + ino = 0; + trace_lttng_statedump_vm_map(session, p, map, ino); + map = map->vm_next; + } + up_read(&mm->mmap_sem); + } + mmput(mm); +} + +static +int lttng_enumerate_vm_maps(struct lttng_session *session) +{ + struct task_struct *p; + + rcu_read_lock(); + for_each_process(p) + lttng_enumerate_task_vm_maps(session, p); + rcu_read_unlock(); + return 0; +} +#endif + +#ifdef CONFIG_LTTNG_HAS_LIST_IRQ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) +#define irq_desc_get_chip(desc) get_irq_desc_chip(desc) +#endif + +static +int lttng_list_interrupts(struct lttng_session *session) +{ + unsigned int irq; + unsigned long flags = 0; + struct irq_desc *desc; + +#define irq_to_desc wrapper_irq_to_desc + /* needs irq_desc */ + for_each_irq_desc(irq, desc) { + struct irqaction *action; + const char *irq_chip_name = + irq_desc_get_chip(desc)->name ? : "unnamed_irq_chip"; + + local_irq_save(flags); + wrapper_desc_spin_lock(&desc->lock); + for (action = desc->action; action; action = action->next) { + trace_lttng_statedump_interrupt(session, + irq, irq_chip_name, action); + } + wrapper_desc_spin_unlock(&desc->lock); + local_irq_restore(flags); + } + return 0; +#undef irq_to_desc +} +#else +static inline +int lttng_list_interrupts(struct lttng_session *session) +{ + return 0; +} +#endif + +/* + * Called with task lock held. + */ +static +void lttng_statedump_process_ns(struct lttng_session *session, + struct task_struct *p, + enum lttng_thread_type type, + enum lttng_execution_mode mode, + enum lttng_execution_submode submode, + enum lttng_process_status status) +{ + struct pid_namespace *pid_ns; + + pid_ns = task_active_pid_ns(p); + do { + trace_lttng_statedump_process_state(session, + p, type, mode, submode, status, pid_ns); + pid_ns = pid_ns ? pid_ns->parent : NULL; + } while (pid_ns); +} + +static +int lttng_enumerate_process_states(struct lttng_session *session) +{ + struct task_struct *g, *p; + + rcu_read_lock(); + for_each_process(g) { + p = g; + do { + enum lttng_execution_mode mode = + LTTNG_MODE_UNKNOWN; + enum lttng_execution_submode submode = + LTTNG_UNKNOWN; + enum lttng_process_status status; + enum lttng_thread_type type; + + task_lock(p); + if (p->exit_state == EXIT_ZOMBIE) + status = LTTNG_ZOMBIE; + else if (p->exit_state == EXIT_DEAD) + status = LTTNG_DEAD; + else if (p->state == TASK_RUNNING) { + /* Is this a forked child that has not run yet? */ + if (list_empty(&p->rt.run_list)) + status = LTTNG_WAIT_FORK; + else + /* + * All tasks are considered as wait_cpu; + * the viewer will sort out if the task + * was really running at this time. + */ + status = LTTNG_WAIT_CPU; + } else if (p->state & + (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)) { + /* Task is waiting for something to complete */ + status = LTTNG_WAIT; + } else + status = LTTNG_UNNAMED; + submode = LTTNG_NONE; + + /* + * Verification of t->mm is to filter out kernel + * threads; Viewer will further filter out if a + * user-space thread was in syscall mode or not. + */ + if (p->mm) + type = LTTNG_USER_THREAD; + else + type = LTTNG_KERNEL_THREAD; + lttng_statedump_process_ns(session, + p, type, mode, submode, status); + task_unlock(p); + } while_each_thread(g, p); + } + rcu_read_unlock(); + + return 0; +} + +static +void lttng_statedump_work_func(struct work_struct *work) +{ + if (atomic_dec_and_test(&kernel_threads_to_run)) + /* If we are the last thread, wake up do_lttng_statedump */ + wake_up(&statedump_wq); +} + +static +int do_lttng_statedump(struct lttng_session *session) +{ + int cpu, ret; + + trace_lttng_statedump_start(session); + ret = lttng_enumerate_process_states(session); + if (ret) + return ret; + ret = lttng_enumerate_file_descriptors(session); + if (ret) + return ret; + /* + * FIXME + * ret = lttng_enumerate_vm_maps(session); + * if (ret) + * return ret; + */ + ret = lttng_list_interrupts(session); + if (ret) + return ret; + ret = lttng_enumerate_network_ip_interface(session); + if (ret) + return ret; + ret = lttng_enumerate_block_devices(session); + switch (ret) { + case 0: + break; + case -ENOSYS: + printk(KERN_WARNING "LTTng: block device enumeration is not supported by kernel\n"); + break; + default: + return ret; + } + + /* TODO lttng_dump_idt_table(session); */ + /* TODO lttng_dump_softirq_vec(session); */ + /* TODO lttng_list_modules(session); */ + /* TODO lttng_dump_swap_files(session); */ + + /* + * Fire off a work queue on each CPU. Their sole purpose in life + * is to guarantee that each CPU has been in a state where is was in + * syscall mode (i.e. not in a trap, an IRQ or a soft IRQ). + */ + get_online_cpus(); + atomic_set(&kernel_threads_to_run, num_online_cpus()); + for_each_online_cpu(cpu) { + INIT_DELAYED_WORK(&cpu_work[cpu], lttng_statedump_work_func); + schedule_delayed_work_on(cpu, &cpu_work[cpu], 0); + } + /* Wait for all threads to run */ + __wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) == 0)); + put_online_cpus(); + /* Our work is done */ + trace_lttng_statedump_end(session); + return 0; +} + +/* + * Called with session mutex held. + */ +int lttng_statedump_start(struct lttng_session *session) +{ + return do_lttng_statedump(session); +} +EXPORT_SYMBOL_GPL(lttng_statedump_start); + +static +int __init lttng_statedump_init(void) +{ + /* + * Allow module to load even if the fixup cannot be done. This + * will allow seemless transition when the underlying issue fix + * is merged into the Linux kernel, and when tracepoint.c + * "tracepoint_module_notify" is turned into a static function. + */ + (void) wrapper_lttng_fixup_sig(THIS_MODULE); + return 0; +} + +module_init(lttng_statedump_init); + +static +void __exit lttng_statedump_exit(void) +{ +} + +module_exit(lttng_statedump_exit); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Jean-Hugues Deschenes"); +MODULE_DESCRIPTION("LTTng statedump provider"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/lttng-string-utils.c b/ltt/lttng-2.11.0/lttng-string-utils.c new file mode 100644 index 000000000000..416896cc0bb2 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-string-utils.c @@ -0,0 +1,356 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * Copyright (C) 2017 Philippe Proulx + */ + +#include + +#include + +enum star_glob_pattern_type_flags { + STAR_GLOB_PATTERN_TYPE_FLAG_NONE = 0, + STAR_GLOB_PATTERN_TYPE_FLAG_PATTERN = (1U << 0), + STAR_GLOB_PATTERN_TYPE_FLAG_END_ONLY = (1U << 1), +}; + +static +enum star_glob_pattern_type_flags strutils_test_glob_pattern(const char *pattern) +{ + enum star_glob_pattern_type_flags ret = + STAR_GLOB_PATTERN_TYPE_FLAG_NONE; + const char *p; + + for (p = pattern; *p != '\0'; p++) { + switch (*p) { + case '*': + ret = STAR_GLOB_PATTERN_TYPE_FLAG_PATTERN; + + if (p[1] == '\0') { + ret |= STAR_GLOB_PATTERN_TYPE_FLAG_END_ONLY; + } + goto end; + case '\\': + p++; + + if (*p == '\0') { + goto end; + } + break; + default: + break; + } + } + +end: + return ret; +} + +/* + * Returns true if `pattern` is a star-only globbing pattern, that is, + * it contains at least one non-escaped `*`. + */ +bool strutils_is_star_glob_pattern(const char *pattern) +{ + return strutils_test_glob_pattern(pattern) & + STAR_GLOB_PATTERN_TYPE_FLAG_PATTERN; +} + +/* + * Returns true if `pattern` is a globbing pattern with a globbing, + * non-escaped star only at its very end. + */ +bool strutils_is_star_at_the_end_only_glob_pattern(const char *pattern) +{ + return strutils_test_glob_pattern(pattern) & + STAR_GLOB_PATTERN_TYPE_FLAG_END_ONLY; +} + +struct string_with_len { + const char *str; + size_t len; +}; + +static +char string_get_char_at_cb(size_t at, void *data) +{ + struct string_with_len *string_with_len = data; + + if (at >= string_with_len->len) { + return '\0'; + } + + return string_with_len->str[at]; +} + +/* + * Globbing matching function with the star feature only (`?` and + * character sets are not supported). This matches `candidate` (plain + * string) against `pattern`. A literal star can be escaped with `\` in + * `pattern`. + * + * `pattern_len` or `candidate_len` can be greater than the actual + * string length of `pattern` or `candidate` if the string is + * null-terminated. + */ +bool strutils_star_glob_match(const char *pattern, size_t pattern_len, + const char *candidate, size_t candidate_len) { + struct string_with_len pattern_with_len = { + pattern, pattern_len + }; + struct string_with_len candidate_with_len = { + candidate, candidate_len + }; + + return strutils_star_glob_match_char_cb(string_get_char_at_cb, + &pattern_with_len, string_get_char_at_cb, + &candidate_with_len); +} + +bool strutils_star_glob_match_char_cb( + strutils_get_char_at_cb pattern_get_char_at_cb, + void *pattern_get_char_at_cb_data, + strutils_get_char_at_cb candidate_get_char_at_cb, + void *candidate_get_char_at_cb_data) +{ + size_t retry_p_at = 0, retry_c_at = 0, c_at, p_at; + char c, p, prev_p; + bool got_a_star = false; + +retry: + c_at = retry_c_at; + c = candidate_get_char_at_cb(c_at, candidate_get_char_at_cb_data); + p_at = retry_p_at; + p = pattern_get_char_at_cb(p_at, pattern_get_char_at_cb_data); + + /* + * The concept here is to retry a match in the specific case + * where we already got a star. The retry position for the + * pattern is just after the most recent star, and the retry + * position for the candidate is the character following the + * last try's first character. + * + * Example: + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^^ + * pattern: hi*every*one + * ^^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^^ + * pattern: hi*every*one + * ^^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^^ + * pattern: hi*every*one + * ^^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ MISMATCH + * + * candidate: hi ev every onyx one + * ^ + * pattern: hi*every*one + * ^ + * + * candidate: hi ev every onyx one + * ^^ + * pattern: hi*every*one + * ^^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ + * + * candidate: hi ev every onyx one + * ^ ^ + * pattern: hi*every*one + * ^ ^ SUCCESS + */ + while (c != '\0') { + if (p == '\0') { + goto end_of_pattern; + } + + switch (p) { + case '*': + { + char retry_p; + got_a_star = true; + + /* + * Our first try starts at the current candidate + * character and after the star in the pattern. + */ + retry_c_at = c_at; + retry_p_at = p_at + 1; + retry_p = pattern_get_char_at_cb(retry_p_at, + pattern_get_char_at_cb_data); + + if (retry_p == '\0') { + /* + * Star at the end of the pattern at + * this point: automatic match. + */ + return true; + } + + goto retry; + } + case '\\': + /* Go to escaped character. */ + p_at++; + p = pattern_get_char_at_cb(p_at, + pattern_get_char_at_cb_data); + + /* Fall-through. */ + default: + /* + * Default case which will compare the escaped + * character now. + */ + if (p == '\0' || c != p) { +end_of_pattern: + /* Character mismatch OR end of pattern. */ + if (!got_a_star) { + /* + * We didn't get any star yet, + * so this first mismatch + * automatically makes the whole + * test fail. + */ + return false; + } + + /* + * Next try: next candidate character, + * original pattern character (following + * the most recent star). + */ + retry_c_at++; + goto retry; + } + break; + } + + /* Next pattern and candidate characters. */ + c_at++; + c = candidate_get_char_at_cb(c_at, + candidate_get_char_at_cb_data); + p_at++; + p = pattern_get_char_at_cb(p_at, pattern_get_char_at_cb_data); + } + + /* + * We checked every candidate character and we're still in a + * success state: the only pattern character allowed to remain + * is a star. + */ + if (p == '\0') { + return true; + } + + prev_p = p; + p_at++; + p = pattern_get_char_at_cb(p_at, pattern_get_char_at_cb_data); + return prev_p == '*' && p == '\0'; +} diff --git a/ltt/lttng-2.11.0/lttng-string-utils.h b/ltt/lttng-2.11.0/lttng-string-utils.h new file mode 100644 index 000000000000..0f8ba793cc15 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-string-utils.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#ifndef _LTTNG_STRING_UTILS_H +#define _LTTNG_STRING_UTILS_H + +/* + * Copyright (C) 2017 Philippe Proulx + */ + +#include + +typedef char (*strutils_get_char_at_cb)(size_t, void *); + +bool strutils_is_star_glob_pattern(const char *pattern); +bool strutils_is_star_at_the_end_only_glob_pattern(const char *pattern); +bool strutils_star_glob_match(const char *pattern, size_t pattern_len, + const char *candidate, size_t candidate_len); +bool strutils_star_glob_match_char_cb( + strutils_get_char_at_cb pattern_get_char_at_cb, + void *pattern_get_char_at_cb_data, + strutils_get_char_at_cb candidate_get_char_at_cb, + void *candidate_get_char_at_cb_data); + +#endif /* _LTTNG_STRING_UTILS_H */ diff --git a/ltt/lttng-2.11.0/lttng-syscalls.c b/ltt/lttng-2.11.0/lttng-syscalls.c new file mode 100644 index 000000000000..b43dd570a029 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-syscalls.c @@ -0,0 +1,1356 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-syscalls.c + * + * LTTng syscall probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifndef CONFIG_COMPAT +# ifndef is_compat_task +# define is_compat_task() (0) +# endif +#endif + +/* in_compat_syscall appears in kernel 4.6. */ +#ifndef in_compat_syscall + #define in_compat_syscall() is_compat_task() +#endif + +enum sc_type { + SC_TYPE_ENTRY, + SC_TYPE_EXIT, + SC_TYPE_COMPAT_ENTRY, + SC_TYPE_COMPAT_EXIT, +}; + +#define SYSCALL_ENTRY_TOK syscall_entry_ +#define COMPAT_SYSCALL_ENTRY_TOK compat_syscall_entry_ +#define SYSCALL_EXIT_TOK syscall_exit_ +#define COMPAT_SYSCALL_EXIT_TOK compat_syscall_exit_ + +#define SYSCALL_ENTRY_STR __stringify(SYSCALL_ENTRY_TOK) +#define COMPAT_SYSCALL_ENTRY_STR __stringify(COMPAT_SYSCALL_ENTRY_TOK) +#define SYSCALL_EXIT_STR __stringify(SYSCALL_EXIT_TOK) +#define COMPAT_SYSCALL_EXIT_STR __stringify(COMPAT_SYSCALL_EXIT_TOK) + +static +void syscall_entry_probe(void *__data, struct pt_regs *regs, long id); +static +void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret); + +/* + * Forward declarations for old kernels. + */ +struct mmsghdr; +struct rlimit64; +struct oldold_utsname; +struct old_utsname; +struct sel_arg_struct; +struct mmap_arg_struct; +struct file_handle; +struct user_msghdr; + +/* + * Forward declaration for kernels >= 5.6 + */ +struct timex; +struct timeval; +struct itimerval; +struct itimerspec; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +typedef __kernel_old_time_t time_t; +#endif + +#ifdef IA32_NR_syscalls +#define NR_compat_syscalls IA32_NR_syscalls +#else +#define NR_compat_syscalls NR_syscalls +#endif + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TP_MODULE_NOINIT +#define TRACE_INCLUDE_PATH instrumentation/syscalls/headers + +#define PARAMS(args...) args + +/* Handle unknown syscalls */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM syscalls_unknown +#include +#undef TRACE_SYSTEM + +#define SC_ENTER + +#undef sc_exit +#define sc_exit(...) +#undef sc_in +#define sc_in(...) __VA_ARGS__ +#undef sc_out +#define sc_out(...) +#undef sc_inout +#define sc_inout(...) __VA_ARGS__ + +/* Hijack probe callback for system call enter */ +#undef TP_PROBE_CB +#define TP_PROBE_CB(_template) &syscall_entry_probe +#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT(syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE(syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_locvar), PARAMS(_code_pre), \ + PARAMS(_fields), PARAMS(_code_post)) +#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscall_entry_##_name, PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscall_entry_##_template, syscall_entry_##_name) +/* Enumerations only defined at first inclusion. */ +#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) \ + LTTNG_TRACEPOINT_ENUM(_name, PARAMS(_values)) +#undef TRACE_SYSTEM +#define TRACE_SYSTEM syscall_entry_integers +#define TRACE_INCLUDE_FILE syscalls_integers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#define TRACE_SYSTEM syscall_entry_pointers +#define TRACE_INCLUDE_FILE syscalls_pointers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#undef SC_LTTNG_TRACEPOINT_ENUM +#undef SC_LTTNG_TRACEPOINT_EVENT_CODE +#undef SC_LTTNG_TRACEPOINT_EVENT +#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef TP_PROBE_CB +#undef _TRACE_SYSCALLS_INTEGERS_H +#undef _TRACE_SYSCALLS_POINTERS_H + +/* Hijack probe callback for compat system call enter */ +#define TP_PROBE_CB(_template) &syscall_entry_probe +#define LTTNG_SC_COMPAT +#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT(compat_syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE(compat_syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) +#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(compat_syscall_entry_##_name, PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(compat_syscall_entry_##_template, \ + compat_syscall_entry_##_name) +/* Enumerations only defined at inital inclusion (not here). */ +#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) +#define TRACE_SYSTEM compat_syscall_entry_integers +#define TRACE_INCLUDE_FILE compat_syscalls_integers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#define TRACE_SYSTEM compat_syscall_entry_pointers +#define TRACE_INCLUDE_FILE compat_syscalls_pointers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#undef SC_LTTNG_TRACEPOINT_ENUM +#undef SC_LTTNG_TRACEPOINT_EVENT_CODE +#undef SC_LTTNG_TRACEPOINT_EVENT +#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef TP_PROBE_CB +#undef _TRACE_SYSCALLS_INTEGERS_H +#undef _TRACE_SYSCALLS_POINTERS_H +#undef LTTNG_SC_COMPAT + +#undef SC_ENTER + +#define SC_EXIT + +#undef sc_exit +#define sc_exit(...) __VA_ARGS__ +#undef sc_in +#define sc_in(...) +#undef sc_out +#define sc_out(...) __VA_ARGS__ +#undef sc_inout +#define sc_inout(...) __VA_ARGS__ + +/* Hijack probe callback for system call exit */ +#define TP_PROBE_CB(_template) &syscall_exit_probe +#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT(syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE(syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) +#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscall_exit_##_name, PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscall_exit_##_template, \ + syscall_exit_##_name) +/* Enumerations only defined at inital inclusion (not here). */ +#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) +#define TRACE_SYSTEM syscall_exit_integers +#define TRACE_INCLUDE_FILE syscalls_integers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#define TRACE_SYSTEM syscall_exit_pointers +#define TRACE_INCLUDE_FILE syscalls_pointers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#undef SC_LTTNG_TRACEPOINT_ENUM +#undef SC_LTTNG_TRACEPOINT_EVENT_CODE +#undef SC_LTTNG_TRACEPOINT_EVENT +#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef TP_PROBE_CB +#undef _TRACE_SYSCALLS_INTEGERS_H +#undef _TRACE_SYSCALLS_POINTERS_H + + +/* Hijack probe callback for compat system call exit */ +#define TP_PROBE_CB(_template) &syscall_exit_probe +#define LTTNG_SC_COMPAT +#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT(compat_syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE(compat_syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ + PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) +#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(compat_syscall_exit_##_name, PARAMS(_fields)) +#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(compat_syscall_exit_##_template, \ + compat_syscall_exit_##_name) +/* Enumerations only defined at inital inclusion (not here). */ +#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) +#define TRACE_SYSTEM compat_syscall_exit_integers +#define TRACE_INCLUDE_FILE compat_syscalls_integers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#define TRACE_SYSTEM compat_syscall_exit_pointers +#define TRACE_INCLUDE_FILE compat_syscalls_pointers +#include +#undef TRACE_INCLUDE_FILE +#undef TRACE_SYSTEM +#undef SC_LTTNG_TRACEPOINT_ENUM +#undef SC_LTTNG_TRACEPOINT_EVENT_CODE +#undef SC_LTTNG_TRACEPOINT_EVENT +#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef TP_PROBE_CB +#undef _TRACE_SYSCALLS_INTEGERS_H +#undef _TRACE_SYSCALLS_POINTERS_H +#undef LTTNG_SC_COMPAT + +#undef SC_EXIT + +#undef TP_MODULE_NOINIT +#undef LTTNG_PACKAGE_BUILD +#undef CREATE_TRACE_POINTS + +struct trace_syscall_entry { + void *func; + const struct lttng_event_desc *desc; + const struct lttng_event_field *fields; + unsigned int nrargs; +}; + +#define CREATE_SYSCALL_TABLE + +#define SC_ENTER + +#undef sc_exit +#define sc_exit(...) + +#undef TRACE_SYSCALL_TABLE +#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ + [ _nr ] = { \ + .func = __event_probe__syscall_entry_##_template, \ + .nrargs = (_nrargs), \ + .fields = __event_fields___syscall_entry_##_template, \ + .desc = &__event_desc___syscall_entry_##_name, \ + }, + +/* Syscall enter tracing table */ +static const struct trace_syscall_entry sc_table[] = { +#include +#include +}; + +#undef TRACE_SYSCALL_TABLE +#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ + [ _nr ] = { \ + .func = __event_probe__compat_syscall_entry_##_template, \ + .nrargs = (_nrargs), \ + .fields = __event_fields___compat_syscall_entry_##_template, \ + .desc = &__event_desc___compat_syscall_entry_##_name, \ + }, + +/* Compat syscall enter table */ +const struct trace_syscall_entry compat_sc_table[] = { +#include +#include +}; + +#undef SC_ENTER + +#define SC_EXIT + +#undef sc_exit +#define sc_exit(...) __VA_ARGS__ + +#undef TRACE_SYSCALL_TABLE +#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ + [ _nr ] = { \ + .func = __event_probe__syscall_exit_##_template, \ + .nrargs = (_nrargs), \ + .fields = __event_fields___syscall_exit_##_template, \ + .desc = &__event_desc___syscall_exit_##_name, \ + }, + +/* Syscall exit table */ +static const struct trace_syscall_entry sc_exit_table[] = { +#include +#include +}; + +#undef TRACE_SYSCALL_TABLE +#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ + [ _nr ] = { \ + .func = __event_probe__compat_syscall_exit_##_template, \ + .nrargs = (_nrargs), \ + .fields = __event_fields___compat_syscall_exit_##_template, \ + .desc = &__event_desc___compat_syscall_exit_##_name, \ + }, + +/* Compat syscall exit table */ +const struct trace_syscall_entry compat_sc_exit_table[] = { +#include +#include +}; + +#undef SC_EXIT + +#undef CREATE_SYSCALL_TABLE + +struct lttng_syscall_filter { + DECLARE_BITMAP(sc_entry, NR_syscalls); + DECLARE_BITMAP(sc_exit, NR_syscalls); + DECLARE_BITMAP(sc_compat_entry, NR_compat_syscalls); + DECLARE_BITMAP(sc_compat_exit, NR_compat_syscalls); +}; + +static void syscall_entry_unknown(struct lttng_event *event, + struct pt_regs *regs, unsigned int id) +{ + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + if (unlikely(in_compat_syscall())) + __event_probe__compat_syscall_entry_unknown(event, id, args); + else + __event_probe__syscall_entry_unknown(event, id, args); +} + +void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) +{ + struct lttng_channel *chan = __data; + struct lttng_event *event, *unknown_event; + const struct trace_syscall_entry *table, *entry; + size_t table_len; + + if (unlikely(in_compat_syscall())) { + struct lttng_syscall_filter *filter = chan->sc_filter; + + if (id < 0 || id >= NR_compat_syscalls + || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_compat_entry))) { + /* System call filtered out. */ + return; + } + table = compat_sc_table; + table_len = ARRAY_SIZE(compat_sc_table); + unknown_event = chan->sc_compat_unknown; + } else { + struct lttng_syscall_filter *filter = chan->sc_filter; + + if (id < 0 || id >= NR_syscalls + || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_entry))) { + /* System call filtered out. */ + return; + } + table = sc_table; + table_len = ARRAY_SIZE(sc_table); + unknown_event = chan->sc_unknown; + } + if (unlikely(id < 0 || id >= table_len)) { + syscall_entry_unknown(unknown_event, regs, id); + return; + } + if (unlikely(in_compat_syscall())) + event = chan->compat_sc_table[id]; + else + event = chan->sc_table[id]; + if (unlikely(!event)) { + syscall_entry_unknown(unknown_event, regs, id); + return; + } + entry = &table[id]; + WARN_ON_ONCE(!entry); + + switch (entry->nrargs) { + case 0: + { + void (*fptr)(void *__data) = entry->func; + + fptr(event); + break; + } + case 1: + { + void (*fptr)(void *__data, unsigned long arg0) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0]); + break; + } + case 2: + { + void (*fptr)(void *__data, + unsigned long arg0, + unsigned long arg1) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0], args[1]); + break; + } + case 3: + { + void (*fptr)(void *__data, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0], args[1], args[2]); + break; + } + case 4: + { + void (*fptr)(void *__data, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0], args[1], args[2], args[3]); + break; + } + case 5: + { + void (*fptr)(void *__data, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3, + unsigned long arg4) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0], args[1], args[2], args[3], args[4]); + break; + } + case 6: + { + void (*fptr)(void *__data, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3, + unsigned long arg4, + unsigned long arg5) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, args[0], args[1], args[2], + args[3], args[4], args[5]); + break; + } + default: + break; + } +} + +static void syscall_exit_unknown(struct lttng_event *event, + struct pt_regs *regs, int id, long ret) +{ + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + if (unlikely(in_compat_syscall())) + __event_probe__compat_syscall_exit_unknown(event, id, ret, + args); + else + __event_probe__syscall_exit_unknown(event, id, ret, args); +} + +void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) +{ + struct lttng_channel *chan = __data; + struct lttng_event *event, *unknown_event; + const struct trace_syscall_entry *table, *entry; + size_t table_len; + long id; + + id = syscall_get_nr(current, regs); + if (unlikely(in_compat_syscall())) { + struct lttng_syscall_filter *filter = chan->sc_filter; + + if (id < 0 || id >= NR_compat_syscalls + || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_compat_exit))) { + /* System call filtered out. */ + return; + } + table = compat_sc_exit_table; + table_len = ARRAY_SIZE(compat_sc_exit_table); + unknown_event = chan->compat_sc_exit_unknown; + } else { + struct lttng_syscall_filter *filter = chan->sc_filter; + + if (id < 0 || id >= NR_syscalls + || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_exit))) { + /* System call filtered out. */ + return; + } + table = sc_exit_table; + table_len = ARRAY_SIZE(sc_exit_table); + unknown_event = chan->sc_exit_unknown; + } + if (unlikely(id < 0 || id >= table_len)) { + syscall_exit_unknown(unknown_event, regs, id, ret); + return; + } + if (unlikely(in_compat_syscall())) + event = chan->compat_sc_exit_table[id]; + else + event = chan->sc_exit_table[id]; + if (unlikely(!event)) { + syscall_exit_unknown(unknown_event, regs, id, ret); + return; + } + entry = &table[id]; + WARN_ON_ONCE(!entry); + + switch (entry->nrargs) { + case 0: + { + void (*fptr)(void *__data, long ret) = entry->func; + + fptr(event, ret); + break; + } + case 1: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0]); + break; + } + case 2: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0, + unsigned long arg1) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0], args[1]); + break; + } + case 3: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0], args[1], args[2]); + break; + } + case 4: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0], args[1], args[2], args[3]); + break; + } + case 5: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3, + unsigned long arg4) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0], args[1], args[2], args[3], args[4]); + break; + } + case 6: + { + void (*fptr)(void *__data, + long ret, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3, + unsigned long arg4, + unsigned long arg5) = entry->func; + unsigned long args[LTTNG_SYSCALL_NR_ARGS]; + + lttng_syscall_get_arguments(current, regs, args); + fptr(event, ret, args[0], args[1], args[2], + args[3], args[4], args[5]); + break; + } + default: + break; + } +} + +/* + * noinline to diminish caller stack size. + * Should be called with sessions lock held. + */ +static +int fill_table(const struct trace_syscall_entry *table, size_t table_len, + struct lttng_event **chan_table, struct lttng_channel *chan, + void *filter, enum sc_type type) +{ + const struct lttng_event_desc *desc; + unsigned int i; + + /* Allocate events for each syscall, insert into table */ + for (i = 0; i < table_len; i++) { + struct lttng_kernel_event ev; + desc = table[i].desc; + + if (!desc) { + /* Unknown syscall */ + continue; + } + /* + * Skip those already populated by previous failed + * register for this channel. + */ + if (chan_table[i]) + continue; + memset(&ev, 0, sizeof(ev)); + switch (type) { + case SC_TYPE_ENTRY: + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE; + break; + case SC_TYPE_EXIT: + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE; + break; + case SC_TYPE_COMPAT_ENTRY: + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT; + break; + case SC_TYPE_COMPAT_EXIT: + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT; + break; + } + strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN - 1); + ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev.instrumentation = LTTNG_KERNEL_SYSCALL; + chan_table[i] = _lttng_event_create(chan, &ev, filter, + desc, ev.instrumentation); + WARN_ON_ONCE(!chan_table[i]); + if (IS_ERR(chan_table[i])) { + /* + * If something goes wrong in event registration + * after the first one, we have no choice but to + * leave the previous events in there, until + * deleted by session teardown. + */ + return PTR_ERR(chan_table[i]); + } + } + return 0; +} + +/* + * Should be called with sessions lock held. + */ +int lttng_syscalls_register(struct lttng_channel *chan, void *filter) +{ + struct lttng_kernel_event ev; + int ret; + + wrapper_vmalloc_sync_mappings(); + + if (!chan->sc_table) { + /* create syscall table mapping syscall to events */ + chan->sc_table = kzalloc(sizeof(struct lttng_event *) + * ARRAY_SIZE(sc_table), GFP_KERNEL); + if (!chan->sc_table) + return -ENOMEM; + } + if (!chan->sc_exit_table) { + /* create syscall table mapping syscall to events */ + chan->sc_exit_table = kzalloc(sizeof(struct lttng_event *) + * ARRAY_SIZE(sc_exit_table), GFP_KERNEL); + if (!chan->sc_exit_table) + return -ENOMEM; + } + + +#ifdef CONFIG_COMPAT + if (!chan->compat_sc_table) { + /* create syscall table mapping compat syscall to events */ + chan->compat_sc_table = kzalloc(sizeof(struct lttng_event *) + * ARRAY_SIZE(compat_sc_table), GFP_KERNEL); + if (!chan->compat_sc_table) + return -ENOMEM; + } + + if (!chan->compat_sc_exit_table) { + /* create syscall table mapping compat syscall to events */ + chan->compat_sc_exit_table = kzalloc(sizeof(struct lttng_event *) + * ARRAY_SIZE(compat_sc_exit_table), GFP_KERNEL); + if (!chan->compat_sc_exit_table) + return -ENOMEM; + } +#endif + if (!chan->sc_unknown) { + const struct lttng_event_desc *desc = + &__event_desc___syscall_entry_unknown; + + memset(&ev, 0, sizeof(ev)); + strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN); + ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev.instrumentation = LTTNG_KERNEL_SYSCALL; + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE; + chan->sc_unknown = _lttng_event_create(chan, &ev, filter, + desc, + ev.instrumentation); + WARN_ON_ONCE(!chan->sc_unknown); + if (IS_ERR(chan->sc_unknown)) { + return PTR_ERR(chan->sc_unknown); + } + } + + if (!chan->sc_compat_unknown) { + const struct lttng_event_desc *desc = + &__event_desc___compat_syscall_entry_unknown; + + memset(&ev, 0, sizeof(ev)); + strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN); + ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev.instrumentation = LTTNG_KERNEL_SYSCALL; + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT; + chan->sc_compat_unknown = _lttng_event_create(chan, &ev, filter, + desc, + ev.instrumentation); + WARN_ON_ONCE(!chan->sc_unknown); + if (IS_ERR(chan->sc_compat_unknown)) { + return PTR_ERR(chan->sc_compat_unknown); + } + } + + if (!chan->compat_sc_exit_unknown) { + const struct lttng_event_desc *desc = + &__event_desc___compat_syscall_exit_unknown; + + memset(&ev, 0, sizeof(ev)); + strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN); + ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev.instrumentation = LTTNG_KERNEL_SYSCALL; + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT; + chan->compat_sc_exit_unknown = _lttng_event_create(chan, &ev, + filter, desc, + ev.instrumentation); + WARN_ON_ONCE(!chan->compat_sc_exit_unknown); + if (IS_ERR(chan->compat_sc_exit_unknown)) { + return PTR_ERR(chan->compat_sc_exit_unknown); + } + } + + if (!chan->sc_exit_unknown) { + const struct lttng_event_desc *desc = + &__event_desc___syscall_exit_unknown; + + memset(&ev, 0, sizeof(ev)); + strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN); + ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev.instrumentation = LTTNG_KERNEL_SYSCALL; + ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT; + ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE; + chan->sc_exit_unknown = _lttng_event_create(chan, &ev, filter, + desc, ev.instrumentation); + WARN_ON_ONCE(!chan->sc_exit_unknown); + if (IS_ERR(chan->sc_exit_unknown)) { + return PTR_ERR(chan->sc_exit_unknown); + } + } + + ret = fill_table(sc_table, ARRAY_SIZE(sc_table), + chan->sc_table, chan, filter, SC_TYPE_ENTRY); + if (ret) + return ret; + ret = fill_table(sc_exit_table, ARRAY_SIZE(sc_exit_table), + chan->sc_exit_table, chan, filter, SC_TYPE_EXIT); + if (ret) + return ret; + +#ifdef CONFIG_COMPAT + ret = fill_table(compat_sc_table, ARRAY_SIZE(compat_sc_table), + chan->compat_sc_table, chan, filter, + SC_TYPE_COMPAT_ENTRY); + if (ret) + return ret; + ret = fill_table(compat_sc_exit_table, ARRAY_SIZE(compat_sc_exit_table), + chan->compat_sc_exit_table, chan, filter, + SC_TYPE_COMPAT_EXIT); + if (ret) + return ret; +#endif + + if (!chan->sc_filter) { + chan->sc_filter = kzalloc(sizeof(struct lttng_syscall_filter), + GFP_KERNEL); + if (!chan->sc_filter) + return -ENOMEM; + } + + if (!chan->sys_enter_registered) { + ret = lttng_wrapper_tracepoint_probe_register("sys_enter", + (void *) syscall_entry_probe, chan); + if (ret) + return ret; + chan->sys_enter_registered = 1; + } + /* + * We change the name of sys_exit tracepoint due to namespace + * conflict with sys_exit syscall entry. + */ + if (!chan->sys_exit_registered) { + ret = lttng_wrapper_tracepoint_probe_register("sys_exit", + (void *) syscall_exit_probe, chan); + if (ret) { + WARN_ON_ONCE(lttng_wrapper_tracepoint_probe_unregister("sys_enter", + (void *) syscall_entry_probe, chan)); + return ret; + } + chan->sys_exit_registered = 1; + } + return ret; +} + +/* + * Only called at session destruction. + */ +int lttng_syscalls_unregister(struct lttng_channel *chan) +{ + int ret; + + if (!chan->sc_table) + return 0; + if (chan->sys_enter_registered) { + ret = lttng_wrapper_tracepoint_probe_unregister("sys_enter", + (void *) syscall_entry_probe, chan); + if (ret) + return ret; + chan->sys_enter_registered = 0; + } + if (chan->sys_exit_registered) { + ret = lttng_wrapper_tracepoint_probe_unregister("sys_exit", + (void *) syscall_exit_probe, chan); + if (ret) + return ret; + chan->sys_exit_registered = 0; + } + return 0; +} + +int lttng_syscalls_destroy(struct lttng_channel *chan) +{ + kfree(chan->sc_table); + kfree(chan->sc_exit_table); +#ifdef CONFIG_COMPAT + kfree(chan->compat_sc_table); + kfree(chan->compat_sc_exit_table); +#endif + kfree(chan->sc_filter); + return 0; +} + +static +int get_syscall_nr(const char *syscall_name) +{ + int syscall_nr = -1; + int i; + + for (i = 0; i < ARRAY_SIZE(sc_table); i++) { + const struct trace_syscall_entry *entry; + const char *it_name; + + entry = &sc_table[i]; + if (!entry->desc) + continue; + it_name = entry->desc->name; + it_name += strlen(SYSCALL_ENTRY_STR); + if (!strcmp(syscall_name, it_name)) { + syscall_nr = i; + break; + } + } + return syscall_nr; +} + +static +int get_compat_syscall_nr(const char *syscall_name) +{ + int syscall_nr = -1; + int i; + + for (i = 0; i < ARRAY_SIZE(compat_sc_table); i++) { + const struct trace_syscall_entry *entry; + const char *it_name; + + entry = &compat_sc_table[i]; + if (!entry->desc) + continue; + it_name = entry->desc->name; + it_name += strlen(COMPAT_SYSCALL_ENTRY_STR); + if (!strcmp(syscall_name, it_name)) { + syscall_nr = i; + break; + } + } + return syscall_nr; +} + +static +uint32_t get_sc_tables_len(void) +{ + return ARRAY_SIZE(sc_table) + ARRAY_SIZE(compat_sc_table); +} + +static +const char *get_syscall_name(struct lttng_event *event) +{ + size_t prefix_len = 0; + + WARN_ON_ONCE(event->instrumentation != LTTNG_KERNEL_SYSCALL); + + switch (event->u.syscall.entryexit) { + case LTTNG_SYSCALL_ENTRY: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + prefix_len = strlen(SYSCALL_ENTRY_STR); + break; + case LTTNG_SYSCALL_ABI_COMPAT: + prefix_len = strlen(COMPAT_SYSCALL_ENTRY_STR); + break; + } + break; + case LTTNG_SYSCALL_EXIT: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + prefix_len = strlen(SYSCALL_EXIT_STR); + break; + case LTTNG_SYSCALL_ABI_COMPAT: + prefix_len = strlen(COMPAT_SYSCALL_EXIT_STR); + break; + } + break; + } + WARN_ON_ONCE(prefix_len == 0); + return event->desc->name + prefix_len; +} + +int lttng_syscall_filter_enable(struct lttng_channel *chan, + struct lttng_event *event) +{ + struct lttng_syscall_filter *filter = chan->sc_filter; + const char *syscall_name; + unsigned long *bitmap; + int syscall_nr; + + WARN_ON_ONCE(!chan->sc_table); + + syscall_name = get_syscall_name(event); + + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + syscall_nr = get_syscall_nr(syscall_name); + break; + case LTTNG_SYSCALL_ABI_COMPAT: + syscall_nr = get_compat_syscall_nr(syscall_name); + break; + default: + return -EINVAL; + } + if (syscall_nr < 0) + return -ENOENT; + + switch (event->u.syscall.entryexit) { + case LTTNG_SYSCALL_ENTRY: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + bitmap = filter->sc_entry; + break; + case LTTNG_SYSCALL_ABI_COMPAT: + bitmap = filter->sc_compat_entry; + break; + default: + return -EINVAL; + } + break; + case LTTNG_SYSCALL_EXIT: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + bitmap = filter->sc_exit; + break; + case LTTNG_SYSCALL_ABI_COMPAT: + bitmap = filter->sc_compat_exit; + break; + default: + return -EINVAL; + } + break; + default: + return -EINVAL; + } + if (test_bit(syscall_nr, bitmap)) + return -EEXIST; + bitmap_set(bitmap, syscall_nr, 1); + return 0; +} + +int lttng_syscall_filter_disable(struct lttng_channel *chan, + struct lttng_event *event) +{ + struct lttng_syscall_filter *filter = chan->sc_filter; + const char *syscall_name; + unsigned long *bitmap; + int syscall_nr; + + WARN_ON_ONCE(!chan->sc_table); + + syscall_name = get_syscall_name(event); + + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + syscall_nr = get_syscall_nr(syscall_name); + break; + case LTTNG_SYSCALL_ABI_COMPAT: + syscall_nr = get_compat_syscall_nr(syscall_name); + break; + default: + return -EINVAL; + } + if (syscall_nr < 0) + return -ENOENT; + + switch (event->u.syscall.entryexit) { + case LTTNG_SYSCALL_ENTRY: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + bitmap = filter->sc_entry; + break; + case LTTNG_SYSCALL_ABI_COMPAT: + bitmap = filter->sc_compat_entry; + break; + default: + return -EINVAL; + } + break; + case LTTNG_SYSCALL_EXIT: + switch (event->u.syscall.abi) { + case LTTNG_SYSCALL_ABI_NATIVE: + bitmap = filter->sc_exit; + break; + case LTTNG_SYSCALL_ABI_COMPAT: + bitmap = filter->sc_compat_exit; + break; + default: + return -EINVAL; + } + break; + default: + return -EINVAL; + } + if (!test_bit(syscall_nr, bitmap)) + return -EEXIST; + bitmap_clear(bitmap, syscall_nr, 1); + + return 0; +} + +static +const struct trace_syscall_entry *syscall_list_get_entry(loff_t *pos) +{ + const struct trace_syscall_entry *entry; + int iter = 0; + + for (entry = sc_table; + entry < sc_table + ARRAY_SIZE(sc_table); + entry++) { + if (iter++ >= *pos) + return entry; + } + for (entry = compat_sc_table; + entry < compat_sc_table + ARRAY_SIZE(compat_sc_table); + entry++) { + if (iter++ >= *pos) + return entry; + } + /* End of list */ + return NULL; +} + +static +void *syscall_list_start(struct seq_file *m, loff_t *pos) +{ + return (void *) syscall_list_get_entry(pos); +} + +static +void *syscall_list_next(struct seq_file *m, void *p, loff_t *ppos) +{ + (*ppos)++; + return (void *) syscall_list_get_entry(ppos); +} + +static +void syscall_list_stop(struct seq_file *m, void *p) +{ +} + +static +int get_sc_table(const struct trace_syscall_entry *entry, + const struct trace_syscall_entry **table, + unsigned int *bitness) +{ + if (entry >= sc_table && entry < sc_table + ARRAY_SIZE(sc_table)) { + if (bitness) + *bitness = BITS_PER_LONG; + if (table) + *table = sc_table; + return 0; + } + if (!(entry >= compat_sc_table + && entry < compat_sc_table + ARRAY_SIZE(compat_sc_table))) { + return -EINVAL; + } + if (bitness) + *bitness = 32; + if (table) + *table = compat_sc_table; + return 0; +} + +static +int syscall_list_show(struct seq_file *m, void *p) +{ + const struct trace_syscall_entry *table, *entry = p; + unsigned int bitness; + unsigned long index; + int ret; + const char *name; + + ret = get_sc_table(entry, &table, &bitness); + if (ret) + return ret; + if (!entry->desc) + return 0; + if (table == sc_table) { + index = entry - table; + name = &entry->desc->name[strlen(SYSCALL_ENTRY_STR)]; + } else { + index = (entry - table) + ARRAY_SIZE(sc_table); + name = &entry->desc->name[strlen(COMPAT_SYSCALL_ENTRY_STR)]; + } + seq_printf(m, "syscall { index = %lu; name = %s; bitness = %u; };\n", + index, name, bitness); + return 0; +} + +static +const struct seq_operations lttng_syscall_list_seq_ops = { + .start = syscall_list_start, + .next = syscall_list_next, + .stop = syscall_list_stop, + .show = syscall_list_show, +}; + +static +int lttng_syscall_list_open(struct inode *inode, struct file *file) +{ + return seq_open(file, <tng_syscall_list_seq_ops); +} + +const struct file_operations lttng_syscall_list_fops = { + .owner = THIS_MODULE, + .open = lttng_syscall_list_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +/* + * A syscall is enabled if it is traced for either entry or exit. + */ +long lttng_channel_syscall_mask(struct lttng_channel *channel, + struct lttng_kernel_syscall_mask __user *usyscall_mask) +{ + uint32_t len, sc_tables_len, bitmask_len; + int ret = 0, bit; + char *tmp_mask; + struct lttng_syscall_filter *filter; + + ret = get_user(len, &usyscall_mask->len); + if (ret) + return ret; + sc_tables_len = get_sc_tables_len(); + bitmask_len = ALIGN(sc_tables_len, 8) >> 3; + if (len < sc_tables_len) { + return put_user(sc_tables_len, &usyscall_mask->len); + } + /* Array is large enough, we can copy array to user-space. */ + tmp_mask = kzalloc(bitmask_len, GFP_KERNEL); + if (!tmp_mask) + return -ENOMEM; + filter = channel->sc_filter; + + for (bit = 0; bit < ARRAY_SIZE(sc_table); bit++) { + char state; + + if (channel->sc_table) { + if (!READ_ONCE(channel->syscall_all) && filter) + state = test_bit(bit, filter->sc_entry) + || test_bit(bit, filter->sc_exit); + else + state = 1; + } else { + state = 0; + } + bt_bitfield_write_be(tmp_mask, char, bit, 1, state); + } + for (; bit < sc_tables_len; bit++) { + char state; + + if (channel->compat_sc_table) { + if (!READ_ONCE(channel->syscall_all) && filter) + state = test_bit(bit - ARRAY_SIZE(sc_table), + filter->sc_compat_entry) + || test_bit(bit - ARRAY_SIZE(sc_table), + filter->sc_compat_exit); + else + state = 1; + } else { + state = 0; + } + bt_bitfield_write_be(tmp_mask, char, bit, 1, state); + } + if (copy_to_user(usyscall_mask->mask, tmp_mask, bitmask_len)) + ret = -EFAULT; + kfree(tmp_mask); + return ret; +} + +int lttng_abi_syscall_list(void) +{ + struct file *syscall_list_file; + int file_fd, ret; + + file_fd = lttng_get_unused_fd(); + if (file_fd < 0) { + ret = file_fd; + goto fd_error; + } + + syscall_list_file = anon_inode_getfile("[lttng_syscall_list]", + <tng_syscall_list_fops, + NULL, O_RDWR); + if (IS_ERR(syscall_list_file)) { + ret = PTR_ERR(syscall_list_file); + goto file_error; + } + ret = lttng_syscall_list_fops.open(NULL, syscall_list_file); + if (ret < 0) + goto open_error; + fd_install(file_fd, syscall_list_file); + return file_fd; + +open_error: + fput(syscall_list_file); +file_error: + put_unused_fd(file_fd); +fd_error: + return ret; +} diff --git a/ltt/lttng-2.11.0/lttng-tp-mempool.c b/ltt/lttng-2.11.0/lttng-tp-mempool.c new file mode 100644 index 000000000000..da476c5ec299 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tp-mempool.c @@ -0,0 +1,152 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tp-mempool.c + * + * Copyright (C) 2018 Julien Desfossez + */ + +#include +#include + +#include + +struct lttng_tp_buf_entry { + int cpu; /* To make sure we return the entry to the right pool. */ + char buf[LTTNG_TP_MEMPOOL_BUF_SIZE]; + struct list_head list; +}; + +/* + * No exclusive access strategy for now, this memory pool is currently only + * used from a non-preemptible context, and the interrupt tracepoint probes do + * not use this facility. + */ +struct per_cpu_buf { + struct list_head free_list; /* Free struct lttng_tp_buf_entry. */ +}; + +static struct per_cpu_buf __percpu *pool; /* Per-cpu buffer. */ + +int lttng_tp_mempool_init(void) +{ + int ret, cpu; + + /* The pool is only supposed to be allocated once. */ + if (pool) { + WARN_ON_ONCE(1); + ret = -1; + goto end; + } + + pool = alloc_percpu(struct per_cpu_buf); + if (!pool) { + ret = -ENOMEM; + goto end; + } + + for_each_possible_cpu(cpu) { + struct per_cpu_buf *cpu_buf = per_cpu_ptr(pool, cpu); + + INIT_LIST_HEAD(&cpu_buf->free_list); + } + + for_each_possible_cpu(cpu) { + int i; + struct per_cpu_buf *cpu_buf = per_cpu_ptr(pool, cpu); + + for (i = 0; i < LTTNG_TP_MEMPOOL_NR_BUF_PER_CPU; i++) { + struct lttng_tp_buf_entry *entry; + + entry = kzalloc_node(sizeof(struct lttng_tp_buf_entry), + GFP_KERNEL, cpu_to_node(cpu)); + if (!entry) { + ret = -ENOMEM; + goto error_free_pool; + } + entry->cpu = cpu; + list_add_tail(&entry->list, &cpu_buf->free_list); + } + } + + ret = 0; + goto end; + +error_free_pool: + lttng_tp_mempool_destroy(); +end: + return ret; +} + +void lttng_tp_mempool_destroy(void) +{ + int cpu; + + if (!pool) { + return; + } + + for_each_possible_cpu(cpu) { + struct per_cpu_buf *cpu_buf = per_cpu_ptr(pool, cpu); + struct lttng_tp_buf_entry *entry, *tmp; + int i = 0; + + list_for_each_entry_safe(entry, tmp, &cpu_buf->free_list, list) { + list_del(&entry->list); + kfree(entry); + i++; + } + if (i < LTTNG_TP_MEMPOOL_NR_BUF_PER_CPU) { + printk(KERN_WARNING "Leak detected in tp-mempool\n"); + } + } + free_percpu(pool); + pool = NULL; +} + +void *lttng_tp_mempool_alloc(size_t size) +{ + void *ret; + struct lttng_tp_buf_entry *entry; + struct per_cpu_buf *cpu_buf; + int cpu = smp_processor_id(); + + if (size > LTTNG_TP_MEMPOOL_BUF_SIZE) { + ret = NULL; + goto end; + } + + cpu_buf = per_cpu_ptr(pool, cpu); + if (list_empty(&cpu_buf->free_list)) { + ret = NULL; + goto end; + } + + entry = list_first_entry(&cpu_buf->free_list, struct lttng_tp_buf_entry, list); + /* Remove the entry from the free list. */ + list_del(&entry->list); + + memset(entry->buf, 0, LTTNG_TP_MEMPOOL_BUF_SIZE); + + ret = (void *) entry->buf; + +end: + return ret; +} + +void lttng_tp_mempool_free(void *ptr) +{ + struct lttng_tp_buf_entry *entry; + struct per_cpu_buf *cpu_buf; + + if (!ptr) + goto end; + entry = container_of(ptr, struct lttng_tp_buf_entry, buf); + cpu_buf = per_cpu_ptr(pool, entry->cpu); + if (!cpu_buf) + goto end; + /* Add it to the free list. */ + list_add_tail(&entry->list, &cpu_buf->free_list); + +end: + return; +} diff --git a/ltt/lttng-2.11.0/lttng-tp-mempool.h b/ltt/lttng-2.11.0/lttng-tp-mempool.h new file mode 100644 index 000000000000..b5d3ec127005 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tp-mempool.h @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tp-mempool.h + * + * Copyright (C) 2018 Julien Desfossez + */ + +#ifndef LTTNG_TP_MEMPOOL_H +#define LTTNG_TP_MEMPOOL_H + +#include + +#define LTTNG_TP_MEMPOOL_NR_BUF_PER_CPU 4 +#define LTTNG_TP_MEMPOOL_BUF_SIZE 4096 + +/* + * Initialize the pool, only performed once. The pool is a set of + * LTTNG_TP_MEMPOOL_NR_BUF_PER_CPU buffers of size LTTNG_TP_MEMPOOL_BUF_SIZE + * per-cpu. + * + * Returns 0 on success, a negative value on error. + */ +int lttng_tp_mempool_init(void); + +/* + * Destroy the pool and free all the memory allocated. + */ +void lttng_tp_mempool_destroy(void); + +/* + * Ask for a buffer on the current cpu. + * + * The pool is per-cpu, but there is no exclusive access guarantee on the + * per-cpu free-list, the caller needs to ensure it cannot get preempted or + * interrupted while performing the allocation. + * + * The maximum size that can be allocated is LTTNG_TP_MEMPOOL_BUF_SIZE, and the + * maximum number of buffers allocated simultaneously on the same CPU is + * LTTNG_TP_MEMPOOL_NR_BUF_PER_CPU. + * + * Return a pointer to a buffer on success, NULL on error. + */ +void *lttng_tp_mempool_alloc(size_t size); + +/* + * Release the memory reserved. Same concurrency limitations as the allocation. + */ +void lttng_tp_mempool_free(void *ptr); + +#endif /* LTTNG_TP_MEMPOOL_H */ diff --git a/ltt/lttng-2.11.0/lttng-tracepoint.c b/ltt/lttng-2.11.0/lttng-tracepoint.c new file mode 100644 index 000000000000..8298b3970b62 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tracepoint.c @@ -0,0 +1,439 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracepoint.c + * + * LTTng adaptation layer for Linux kernel 3.15+ tracepoints. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* + * Protect the tracepoint table. lttng_tracepoint_mutex nests within + * kernel/tracepoint.c tp_modlist_mutex. kernel/tracepoint.c + * tracepoint_mutex nests within lttng_tracepoint_mutex. + */ +static +DEFINE_MUTEX(lttng_tracepoint_mutex); + +#define TRACEPOINT_HASH_BITS 6 +#define TRACEPOINT_TABLE_SIZE (1 << TRACEPOINT_HASH_BITS) +static +struct hlist_head tracepoint_table[TRACEPOINT_TABLE_SIZE]; + +/* + * The tracepoint entry is the node contained within the hash table. It + * is a mapping from the "string" key to the struct tracepoint pointer. + */ +struct tracepoint_entry { + struct hlist_node hlist; + struct tracepoint *tp; + int refcount; + struct list_head probes; + char name[0]; +}; + +struct lttng_tp_probe { + struct tracepoint_func tp_func; + struct list_head list; +}; + +static +int add_probe(struct tracepoint_entry *e, void *probe, void *data) +{ + struct lttng_tp_probe *p; + int found = 0; + + list_for_each_entry(p, &e->probes, list) { + if (p->tp_func.func == probe && p->tp_func.data == data) { + found = 1; + break; + } + } + if (found) + return -EEXIST; + p = kmalloc(sizeof(struct lttng_tp_probe), GFP_KERNEL); + if (!p) + return -ENOMEM; + p->tp_func.func = probe; + p->tp_func.data = data; + list_add(&p->list, &e->probes); + return 0; +} + +static +int remove_probe(struct tracepoint_entry *e, void *probe, void *data) +{ + struct lttng_tp_probe *p; + int found = 0; + + list_for_each_entry(p, &e->probes, list) { + if (p->tp_func.func == probe && p->tp_func.data == data) { + found = 1; + break; + } + } + if (found) { + list_del(&p->list); + kfree(p); + return 0; + } else { + WARN_ON(1); + return -ENOENT; + } +} + +/* + * Get tracepoint if the tracepoint is present in the tracepoint hash table. + * Must be called with lttng_tracepoint_mutex held. + * Returns NULL if not present. + */ +static +struct tracepoint_entry *get_tracepoint(const char *name) +{ + struct hlist_head *head; + struct tracepoint_entry *e; + u32 hash = jhash(name, strlen(name), 0); + + head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry(e, head, hlist) { + if (!strcmp(name, e->name)) + return e; + } + return NULL; +} + +/* + * Add the tracepoint to the tracepoint hash table. Must be called with + * lttng_tracepoint_mutex held. + */ +static +struct tracepoint_entry *add_tracepoint(const char *name) +{ + struct hlist_head *head; + struct tracepoint_entry *e; + size_t name_len = strlen(name) + 1; + u32 hash = jhash(name, name_len - 1, 0); + + head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry(e, head, hlist) { + if (!strcmp(name, e->name)) { + printk(KERN_NOTICE + "tracepoint %s busy\n", name); + return ERR_PTR(-EEXIST); /* Already there */ + } + } + /* + * Using kmalloc here to allocate a variable length element. Could + * cause some memory fragmentation if overused. + */ + e = kmalloc(sizeof(struct tracepoint_entry) + name_len, GFP_KERNEL); + if (!e) + return ERR_PTR(-ENOMEM); + memcpy(&e->name[0], name, name_len); + e->tp = NULL; + e->refcount = 0; + INIT_LIST_HEAD(&e->probes); + hlist_add_head(&e->hlist, head); + return e; +} + +/* + * Remove the tracepoint from the tracepoint hash table. Must be called + * with lttng_tracepoint_mutex held. + */ +static +void remove_tracepoint(struct tracepoint_entry *e) +{ + hlist_del(&e->hlist); + kfree(e); +} + +int lttng_tracepoint_probe_register(const char *name, void *probe, void *data) +{ + struct tracepoint_entry *e; + int ret = 0; + + mutex_lock(<tng_tracepoint_mutex); + e = get_tracepoint(name); + if (!e) { + e = add_tracepoint(name); + if (IS_ERR(e)) { + ret = PTR_ERR(e); + goto end; + } + } + /* add (probe, data) to entry */ + ret = add_probe(e, probe, data); + if (ret) + goto end; + e->refcount++; + if (e->tp) { + ret = tracepoint_probe_register(e->tp, probe, data); + WARN_ON_ONCE(ret); + ret = 0; + } +end: + mutex_unlock(<tng_tracepoint_mutex); + return ret; +} + +int lttng_tracepoint_probe_unregister(const char *name, void *probe, void *data) +{ + struct tracepoint_entry *e; + int ret = 0; + + mutex_lock(<tng_tracepoint_mutex); + e = get_tracepoint(name); + if (!e) { + ret = -ENOENT; + goto end; + } + /* remove (probe, data) from entry */ + ret = remove_probe(e, probe, data); + if (ret) + goto end; + if (e->tp) { + ret = tracepoint_probe_unregister(e->tp, probe, data); + WARN_ON_ONCE(ret); + ret = 0; + } + if (!--e->refcount) + remove_tracepoint(e); +end: + mutex_unlock(<tng_tracepoint_mutex); + return ret; +} + +#ifdef CONFIG_MODULES + +static +int lttng_tracepoint_coming(struct tp_module *tp_mod) +{ + int i; + + mutex_lock(<tng_tracepoint_mutex); + for (i = 0; i < tp_mod->mod->num_tracepoints; i++) { + struct tracepoint *tp; + struct tracepoint_entry *e; + struct lttng_tp_probe *p; + + tp = lttng_tracepoint_ptr_deref(&tp_mod->mod->tracepoints_ptrs[i]); + e = get_tracepoint(tp->name); + if (!e) { + e = add_tracepoint(tp->name); + if (IS_ERR(e)) { + pr_warn("LTTng: error (%ld) adding tracepoint\n", + PTR_ERR(e)); + continue; + } + } + /* If already enabled, just check consistency */ + if (e->tp) { + WARN_ON(e->tp != tp); + continue; + } + e->tp = tp; + e->refcount++; + /* register each (probe, data) */ + list_for_each_entry(p, &e->probes, list) { + int ret; + + ret = tracepoint_probe_register(e->tp, + p->tp_func.func, p->tp_func.data); + WARN_ON_ONCE(ret); + } + } + mutex_unlock(<tng_tracepoint_mutex); + return NOTIFY_OK; +} + +static +int lttng_tracepoint_going(struct tp_module *tp_mod) +{ + int i; + + mutex_lock(<tng_tracepoint_mutex); + for (i = 0; i < tp_mod->mod->num_tracepoints; i++) { + struct tracepoint *tp; + struct tracepoint_entry *e; + struct lttng_tp_probe *p; + + tp = lttng_tracepoint_ptr_deref(&tp_mod->mod->tracepoints_ptrs[i]); + e = get_tracepoint(tp->name); + if (!e || !e->tp) + continue; + /* unregister each (probe, data) */ + list_for_each_entry(p, &e->probes, list) { + int ret; + + ret = tracepoint_probe_unregister(e->tp, + p->tp_func.func, p->tp_func.data); + WARN_ON_ONCE(ret); + } + e->tp = NULL; + if (!--e->refcount) + remove_tracepoint(e); + } + mutex_unlock(<tng_tracepoint_mutex); + return 0; +} + +static +int lttng_tracepoint_notify(struct notifier_block *self, + unsigned long val, void *data) +{ + struct tp_module *tp_mod = data; + int ret = 0; + + switch (val) { + case MODULE_STATE_COMING: + ret = lttng_tracepoint_coming(tp_mod); + break; + case MODULE_STATE_GOING: + ret = lttng_tracepoint_going(tp_mod); + break; + default: + break; + } + return ret; +} + +static +struct notifier_block lttng_tracepoint_notifier = { + .notifier_call = lttng_tracepoint_notify, + .priority = 0, +}; + +static +int lttng_tracepoint_module_init(void) +{ + return register_tracepoint_module_notifier(<tng_tracepoint_notifier); +} + +static +void lttng_tracepoint_module_exit(void) +{ + WARN_ON(unregister_tracepoint_module_notifier(<tng_tracepoint_notifier)); +} + +#else /* #ifdef CONFIG_MODULES */ + +static +int lttng_tracepoint_module_init(void) +{ + return 0; +} + +static +void lttng_tracepoint_module_exit(void) +{ +} + +#endif /* #else #ifdef CONFIG_MODULES */ + +static +void lttng_kernel_tracepoint_add(struct tracepoint *tp, void *priv) +{ + struct tracepoint_entry *e; + struct lttng_tp_probe *p; + int *ret = priv; + + mutex_lock(<tng_tracepoint_mutex); + e = get_tracepoint(tp->name); + if (!e) { + e = add_tracepoint(tp->name); + if (IS_ERR(e)) { + pr_warn("LTTng: error (%ld) adding tracepoint\n", + PTR_ERR(e)); + *ret = (int) PTR_ERR(e); + goto end; + } + } + /* If already enabled, just check consistency */ + if (e->tp) { + WARN_ON(e->tp != tp); + goto end; + } + e->tp = tp; + e->refcount++; + /* register each (probe, data) */ + list_for_each_entry(p, &e->probes, list) { + int ret; + + ret = tracepoint_probe_register(e->tp, + p->tp_func.func, p->tp_func.data); + WARN_ON_ONCE(ret); + } +end: + mutex_unlock(<tng_tracepoint_mutex); +} + +static +void lttng_kernel_tracepoint_remove(struct tracepoint *tp, void *priv) +{ + struct tracepoint_entry *e; + int *ret = priv; + + mutex_lock(<tng_tracepoint_mutex); + e = get_tracepoint(tp->name); + if (!e || e->refcount != 1 || !list_empty(&e->probes)) { + *ret = -EINVAL; + goto end; + } + remove_tracepoint(e); +end: + mutex_unlock(<tng_tracepoint_mutex); +} + +int __init lttng_tracepoint_init(void) +{ + int ret = 0; + + for_each_kernel_tracepoint(lttng_kernel_tracepoint_add, &ret); + if (ret) + goto error; + ret = lttng_tracepoint_module_init(); + if (ret) + goto error_module; + return 0; + +error_module: + { + int error_ret = 0; + + for_each_kernel_tracepoint(lttng_kernel_tracepoint_remove, + &error_ret); + WARN_ON(error_ret); + } +error: + return ret; +} + +void lttng_tracepoint_exit(void) +{ + int i, ret = 0; + + lttng_tracepoint_module_exit(); + for_each_kernel_tracepoint(lttng_kernel_tracepoint_remove, &ret); + WARN_ON(ret); + mutex_lock(<tng_tracepoint_mutex); + for (i = 0; i < TRACEPOINT_TABLE_SIZE; i++) { + struct hlist_head *head = &tracepoint_table[i]; + + /* All tracepoints should be removed */ + WARN_ON(!hlist_empty(head)); + } + mutex_unlock(<tng_tracepoint_mutex); +} diff --git a/ltt/lttng-2.11.0/lttng-tracepoint.h b/ltt/lttng-2.11.0/lttng-tracepoint.h new file mode 100644 index 000000000000..516a03a54fea --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tracepoint.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracepoint.h + * + * LTTng adaptation layer for Linux kernel 3.15+ tracepoints. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_TRACEPOINT_H +#define _LTTNG_TRACEPOINT_H + +int lttng_tracepoint_probe_register(const char *name, void *probe, void *data); +int lttng_tracepoint_probe_unregister(const char *name, void *probe, void *data); +int lttng_tracepoint_init(void); +void lttng_tracepoint_exit(void); + +#endif /* _LTTNG_TRACEPOINT_H */ diff --git a/ltt/lttng-2.11.0/lttng-tracer-core.h b/ltt/lttng-2.11.0/lttng-tracer-core.h new file mode 100644 index 000000000000..a7b1e0a99406 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tracer-core.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracer-core.h + * + * This contains the core definitions for the Linux Trace Toolkit Next + * Generation tracer. + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + */ + +#ifndef LTTNG_TRACER_CORE_H +#define LTTNG_TRACER_CORE_H + +#include +#include + +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS +/* Align data on its natural alignment */ +#define RING_BUFFER_ALIGN +#endif + +#include + +struct lttng_session; +struct lttng_channel; +struct lttng_event; + +#endif /* LTTNG_TRACER_CORE_H */ diff --git a/ltt/lttng-2.11.0/lttng-tracer.h b/ltt/lttng-2.11.0/lttng-tracer.h new file mode 100644 index 000000000000..2ed67f9bad82 --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tracer.h @@ -0,0 +1,69 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#ifndef _LTTNG_TRACER_H +#define _LTTNG_TRACER_H + +/* + * lttng-tracer.h + * + * This contains the definitions for the Linux Trace Toolkit Next + * Generation tracer. + * + * Copyright (C) 2005-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define LTTNG_MODULES_MAJOR_VERSION 2 +#define LTTNG_MODULES_MINOR_VERSION 11 +#define LTTNG_MODULES_PATCHLEVEL_VERSION 7 +#define LTTNG_MODULES_EXTRAVERSION "" + +#define LTTNG_VERSION_NAME "Lafontaine" +#define LTTNG_VERSION_DESCRIPTION "A modern Saison beer from MontrĂ©al's Oshlag microbrewery, Lafontaine is a refreshing, zesty, rice beer with hints of fruit and spices." + +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif + +/* Number of bytes to log with a read/write event */ +#define LTTNG_LOG_RW_SIZE 32L +#define LTTNG_MAX_SMALL_SIZE 0xFFFFU + +#ifdef RING_BUFFER_ALIGN +#define lttng_alignof(type) __alignof__(type) +#else +#define lttng_alignof(type) 1 +#endif + +/* Tracer properties */ +#define CTF_MAGIC_NUMBER 0xC1FC1FC1 +#define TSDL_MAGIC_NUMBER 0x75D11D57 + +/* CTF specification version followed */ +#define CTF_SPEC_MAJOR 1 +#define CTF_SPEC_MINOR 8 + +/* + * Number of milliseconds to retry before failing metadata writes on buffer full + * condition. (10 seconds) + */ +#define LTTNG_METADATA_TIMEOUT_MSEC 10000 + +#define LTTNG_RFLAG_EXTENDED RING_BUFFER_RFLAG_END +#define LTTNG_RFLAG_END (LTTNG_RFLAG_EXTENDED << 1) + +#endif /* _LTTNG_TRACER_H */ diff --git a/ltt/lttng-2.11.0/lttng-tracker-pid.c b/ltt/lttng-2.11.0/lttng-tracker-pid.c new file mode 100644 index 000000000000..747aec20f25a --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-tracker-pid.c @@ -0,0 +1,145 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracker-pid.c + * + * LTTng Process ID tracking. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * Hash table is allocated and freed when there are no possible + * concurrent lookups (ensured by the alloc/free caller). However, + * there can be concurrent RCU lookups vs add/del operations. + * + * Concurrent updates of the PID hash table are forbidden: the caller + * must ensure mutual exclusion. This is currently done by holding the + * sessions_mutex across calls to create, destroy, add, and del + * functions of this API. + */ +int lttng_pid_tracker_get_node_pid(const struct lttng_pid_hash_node *node) +{ + return node->pid; +} + +/* + * Lookup performed from RCU read-side critical section (RCU sched), + * protected by preemption off at the tracepoint call site. + * Return 1 if found, 0 if not found. + */ +bool lttng_pid_tracker_lookup(struct lttng_pid_tracker *lpf, int pid) +{ + struct hlist_head *head; + struct lttng_pid_hash_node *e; + uint32_t hash = hash_32(pid, 32); + + head = &lpf->pid_hash[hash & (LTTNG_PID_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry_rcu(e, head, hlist) { + if (pid == e->pid) + return 1; /* Found */ + } + return 0; +} +EXPORT_SYMBOL_GPL(lttng_pid_tracker_lookup); + +/* + * Tracker add and del operations support concurrent RCU lookups. + */ +int lttng_pid_tracker_add(struct lttng_pid_tracker *lpf, int pid) +{ + struct hlist_head *head; + struct lttng_pid_hash_node *e; + uint32_t hash = hash_32(pid, 32); + + head = &lpf->pid_hash[hash & (LTTNG_PID_TABLE_SIZE - 1)]; + lttng_hlist_for_each_entry(e, head, hlist) { + if (pid == e->pid) + return -EEXIST; + } + e = kmalloc(sizeof(struct lttng_pid_hash_node), GFP_KERNEL); + if (!e) + return -ENOMEM; + e->pid = pid; + hlist_add_head_rcu(&e->hlist, head); + return 0; +} + +static +void pid_tracker_del_node_rcu(struct lttng_pid_hash_node *e) +{ + hlist_del_rcu(&e->hlist); + /* + * We choose to use a heavyweight synchronize on removal here, + * since removal of a PID from the tracker mask is a rare + * operation, and we don't want to use more cache lines than + * what we really need when doing the PID lookups, so we don't + * want to afford adding a rcu_head field to those pid hash + * node. + */ + synchronize_trace(); + kfree(e); +} + +/* + * This removal is only used on destroy, so it does not need to support + * concurrent RCU lookups. + */ +static +void pid_tracker_del_node(struct lttng_pid_hash_node *e) +{ + hlist_del(&e->hlist); + kfree(e); +} + +int lttng_pid_tracker_del(struct lttng_pid_tracker *lpf, int pid) +{ + struct hlist_head *head; + struct lttng_pid_hash_node *e; + uint32_t hash = hash_32(pid, 32); + + head = &lpf->pid_hash[hash & (LTTNG_PID_TABLE_SIZE - 1)]; + /* + * No need of _safe iteration, because we stop traversal as soon + * as we remove the entry. + */ + lttng_hlist_for_each_entry(e, head, hlist) { + if (pid == e->pid) { + pid_tracker_del_node_rcu(e); + return 0; + } + } + return -ENOENT; /* Not found */ +} + +struct lttng_pid_tracker *lttng_pid_tracker_create(void) +{ + return kzalloc(sizeof(struct lttng_pid_tracker), GFP_KERNEL); +} + +void lttng_pid_tracker_destroy(struct lttng_pid_tracker *lpf) +{ + int i; + + for (i = 0; i < LTTNG_PID_TABLE_SIZE; i++) { + struct hlist_head *head = &lpf->pid_hash[i]; + struct lttng_pid_hash_node *e; + struct hlist_node *tmp; + + lttng_hlist_for_each_entry_safe(e, tmp, head, hlist) + pid_tracker_del_node(e); + } + kfree(lpf); +} diff --git a/ltt/lttng-2.11.0/lttng-wrapper-impl.c b/ltt/lttng-2.11.0/lttng-wrapper-impl.c new file mode 100644 index 000000000000..613196994d4d --- /dev/null +++ b/ltt/lttng-2.11.0/lttng-wrapper-impl.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng-wrapper.c + * + * Copyright (C) 2020 Mathieu Desnoyers + */ + +#include +#include + +static int __init lttng_wrapper_init(void) +{ + return 0; +} + +module_init(lttng_wrapper_init); + +static void __exit lttng_exit(void) +{ +} + +module_exit(lttng_exit); + +#include "extra_version/patches.i" +#ifdef LTTNG_EXTRA_VERSION_GIT +MODULE_INFO(extra_version_git, LTTNG_EXTRA_VERSION_GIT); +#endif +#ifdef LTTNG_EXTRA_VERSION_NAME +MODULE_INFO(extra_version_name, LTTNG_EXTRA_VERSION_NAME); +#endif +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng wrapper"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/Kbuild b/ltt/lttng-2.11.0/probes/Kbuild new file mode 100644 index 000000000000..3ae2d39e1162 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/Kbuild @@ -0,0 +1,290 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/.. + +include $(TOP_LTTNG_MODULES_DIR)/Kbuild.common + +ccflags-y += -I$(TOP_LTTNG_MODULES_DIR) + +obj-$(CONFIG_LTTNG) += lttng-probe-sched.o +obj-$(CONFIG_LTTNG) += lttng-probe-irq.o +obj-$(CONFIG_LTTNG) += lttng-probe-timer.o +obj-$(CONFIG_LTTNG) += lttng-probe-kmem.o +obj-$(CONFIG_LTTNG) += lttng-probe-module.o +obj-$(CONFIG_LTTNG) += lttng-probe-power.o +obj-$(CONFIG_LTTNG) += lttng-probe-statedump.o + +ifneq ($(CONFIG_NET_9P),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -eq 10 \) ] ; then \ + echo "lttng-probe-9p.o" ; fi;) +endif # CONFIG_NET_9P + +i2c_dep = $(srctree)/include/trace/events/i2c.h +ifneq ($(wildcard $(i2c_dep)),) + obj-$(CONFIG_LTTNG) += lttng-probe-i2c.o +endif + +ifneq ($(CONFIG_KVM),) + obj-$(CONFIG_LTTNG) += lttng-probe-kvm.o + ifneq ($(CONFIG_X86),) + kvm_dep_lapic = $(srctree)/arch/x86/kvm/lapic.h + kvm_dep_lapic_check = $(wildcard $(kvm_dep_lapic)) + ifneq ($(kvm_dep_lapic_check),) + # search for iodev.h in any of its known locations + kvm_dep_iodev = $(srctree)/virt/kvm/iodev.h $(srctree)/include/kvm/iodev.h + kvm_dep_iodev_check = $(wildcard $(kvm_dep_iodev)) + ifneq ($(kvm_dep_iodev_check),) + kvm_dep_emulate = $(srctree)/arch/x86/kvm/kvm_emulate.h + kvm_dep_emulate_wildcard = $(wildcard $(kvm_dep_emulate)) + kvm_dep_emulate_check = $(shell \ + if [ \( $(VERSION) -ge 6 \ + -o \( $(VERSION) -eq 5 -a $(PATCHLEVEL) -eq 7 \) \) -a \ + -z "$(kvm_dep_emulate_wildcard)" ] ; then \ + echo "warn" ; \ + else \ + echo "ok" ; \ + fi ;) + ifeq ($(kvm_dep_emulate_check),ok) + CFLAGS_lttng-probe-kvm-x86.o += -I$(srctree)/virt/kvm \ + -I$(srctree)/arch/x86/kvm + CFLAGS_lttng-probe-kvm-x86-mmu.o += -I$(srctree)/virt/kvm + obj-$(CONFIG_LTTNG) += lttng-probe-kvm-x86.o + obj-$(CONFIG_LTTNG) += lttng-probe-kvm-x86-mmu.o + else # ($(kvm_dep_emulate_check),ok) + $(warning File $(kvm_dep_emulate) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.) + endif # ($(kvm_dep_emulate_check),ok) + else # $(kvm_dep_iodev_check) + $(warning File $(kvm_dep_iodev) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.) + endif # $(kvm_dep_iodev_check) + else # $(kvm_dep_lapic_check) + $(warning File $(kvm_dep_lapic) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.) + endif # $(kvm_dep_lapic_check) + endif # CONFIG_X86 +endif # CONFIG_KVM + +ifneq ($(CONFIG_X86),) + x86_irq_vectors_dep = $(srctree)/arch/x86/include/asm/trace/irq_vectors.h + + ifneq ($(wildcard $(x86_irq_vectors_dep)),) + obj-$(CONFIG_LTTNG) += lttng-probe-x86-irq-vectors.o + endif # $(wildcard $(x86_irq_vectors_dep)) + + x86_exceptions_dep = $(srctree)/arch/x86/include/asm/trace/exceptions.h + + ifneq ($(wildcard $(x86_exceptions_dep)),) + obj-$(CONFIG_LTTNG) += lttng-probe-x86-exceptions.o + endif # $(wildcard $(x86_exceptions_dep)) +endif # CONFIG_X86 + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 33 \) ] ; then \ + echo "lttng-probe-signal.o" ; fi;) + +ifneq ($(CONFIG_BLOCK),) + # need blk_cmd_buf_len + ifneq ($(CONFIG_EVENT_TRACING),) + obj-$(CONFIG_LTTNG) += lttng-probe-block.o + endif # CONFIG_EVENT_TRACING +endif # CONFIG_BLOCK + +ifneq ($(CONFIG_NET),) + obj-$(CONFIG_LTTNG) += lttng-probe-napi.o + obj-$(CONFIG_LTTNG) += lttng-probe-skb.o + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 37 \) ] ; then \ + echo "lttng-probe-net.o" ; fi;) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 1 \) ] ; then \ + echo "lttng-probe-sock.o" ; fi;) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 1 \) ] ; then \ + echo "lttng-probe-udp.o" ; fi;) +endif # CONFIG_NET + +ifneq ($(CONFIG_SND_SOC),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 38 \) ] ; then \ + echo "lttng-probe-asoc.o" ; fi;) +endif # CONFIG_SND_SOC + +ifneq ($(CONFIG_EXT3_FS),) + ext3_dep = $(srctree)/fs/ext3/*.h + ext3_dep_check = $(wildcard $(ext3_dep)) + ext3 = $(shell \ + if [ $(VERSION) -lt 4 -o \( $(VERSION) -eq 4 -a $(PATCHLEVEL) -lt 3 \) ] ; then \ + if [ $(VERSION) -ge 4 -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 1 \) ] ; then \ + if [ \( $(VERSION) -ge 4 -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 4 \) \) -a \ + -z "$(ext3_dep_check)" ] ; then \ + echo "warn" ; \ + exit ; \ + fi; \ + echo "lttng-probe-ext3.o" ; \ + fi; \ + fi;) + ifeq ($(ext3),warn) + $(warning Files $(ext3_dep) not found. Probe "ext3" is disabled. Use full kernel source tree to enable it.) + ext3 = + endif # $(ext3),warn + obj-$(CONFIG_LTTNG) += $(ext3) +endif # CONFIG_EXT3_FS + +ifneq ($(CONFIG_GPIOLIB),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 ] ; then \ + echo "lttng-probe-gpio.o" ; fi;) +endif # CONFIG_GPIOLIB + +ifneq ($(CONFIG_JBD2),) + obj-$(CONFIG_LTTNG) += lttng-probe-jbd2.o +endif # CONFIG_JBD2 + +ifneq ($(CONFIG_JBD),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 1 \) ] ; then \ + echo "lttng-probe-jbd.o" ; fi;) +endif # CONFIG_JBD + +ifneq ($(CONFIG_REGULATOR),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 38 \) ] ; then \ + echo "lttng-probe-regulator.o" ; fi;) +endif # CONFIG_REGULATOR + +ifneq ($(CONFIG_SCSI),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 35 \) ] ; then \ + echo "lttng-probe-scsi.o" ; fi;) +endif # CONFIG_SCSI + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 36 \) ] ; then \ + echo "lttng-probe-vmscan.o" ; fi;) + +# lock probe does not work, so disabling it for now +#ifneq ($(CONFIG_LOCKDEP),) +# obj-$(CONFIG_LTTNG) += lttng-probe-lock.o +#endif # CONFIG_LOCKDEP + +ifneq ($(CONFIG_BTRFS_FS),) + btrfs_dep = $(srctree)/fs/btrfs/*.h + btrfs = $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 39 \) ] ; then \ + echo "lttng-probe-btrfs.o" ; fi;) + ifneq ($(btrfs),) + ifeq ($(wildcard $(btrfs_dep)),) + $(warning Files $(btrfs_dep) not found. Probe "btrfs" is disabled. Use full kernel source tree to enable it.) + btrfs = + endif # $(wildcard $(btrfs_dep)) + endif # $(btrfs) + obj-$(CONFIG_LTTNG) += $(btrfs) +endif # CONFIG_BTRFS_FS + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 38 \) ] ; then \ + echo "lttng-probe-compaction.o" ; fi;) + +ifneq ($(CONFIG_EXT4_FS),) + ext4_dep = $(srctree)/fs/ext4/*.h + ext4 = lttng-probe-ext4.o + ifeq ($(wildcard $(ext4_dep)),) + $(warning Files $(ext4_dep) not found. Probe "ext4" is disabled. Use full kernel source tree to enable it.) + ext4 = + endif # $(wildcard $(ext4_dep)) + obj-$(CONFIG_LTTNG) += $(ext4) +endif # CONFIG_EXT4_FS + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 4 \) ] ; then \ + echo "lttng-probe-printk.o" ; fi;) + +ifneq ($(CONFIG_FRAME_WARN),0) + CFLAGS_lttng-probe-printk.o += -Wframe-larger-than=2200 +endif + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 6 \) \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -eq 5 -a $(SUBLEVEL) -ge 2 \) \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -eq 4 -a $(SUBLEVEL) -ge 9 \) \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -eq 0 -a $(SUBLEVEL) -ge 41 \) ] ; then \ + echo "lttng-probe-random.o" ; fi;) + +obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 2 \) ] ; then \ + echo "lttng-probe-rcu.o" ; fi;) + +ifneq ($(CONFIG_REGMAP),) + regmap_dep_4_1 = $(srctree)/drivers/base/regmap/trace.h + ifneq ($(wildcard $(regmap_dep_4_1)),) + obj-$(CONFIG_LTTNG) += lttng-probe-regmap.o + else + $(warning File $(regmap_dep_4_1) not found. Probe "regmap" is disabled. Need Linux 4.1+ kernel source tree to enable it.) + endif # $(wildcard $(regmap_dep_4_1)), +endif # CONFIG_REGMAP + +ifneq ($(CONFIG_PM_RUNTIME),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 2 \) ] ; then \ + echo "lttng-probe-rpm.o" ; fi;) +endif # CONFIG_PM_RUNTIME + +ifneq ($(CONFIG_SUNRPC),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 4 \) ] ; then \ + echo "lttng-probe-sunrpc.o" ; fi;) +endif # CONFIG_SUNRPC + +ifneq ($(CONFIG_VIDEO_V4L2),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 4 \ + -o \( $(VERSION) -eq 3 -a $(PATCHLEVEL) -ge 14 \) ] ; then \ + echo "lttng-probe-v4l2.o" ; fi;) +endif # CONFIG_VIDEO_V4L2 + +obj-$(CONFIG_LTTNG) += lttng-probe-workqueue.o + +ifneq ($(CONFIG_KALLSYMS_ALL),) + obj-$(CONFIG_LTTNG) += $(shell \ + if [ $(VERSION) -ge 3 \ + -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 36 \) ] ; then \ + echo "lttng-probe-writeback.o" ; fi;) +else + ifdef CONFIG_LOCALVERSION # Check if dot-config is included. + $(warning CONFIG_KALLSYMS_ALL is disabled, therefore probe "writeback" is disabled. Rebuild your kernel with this configuration option enabled in order to trace this subsystem.) + endif +endif # CONFIG_KALLSYMS_ALL + +ifneq ($(CONFIG_KPROBES),) + obj-$(CONFIG_LTTNG) += lttng-kprobes.o +endif # CONFIG_KPROBES + +ifneq ($(CONFIG_UPROBES),) + obj-$(CONFIG_LTTNG) += lttng-uprobes.o +endif # CONFIG_UPROBES + +ifneq ($(CONFIG_KRETPROBES),) + obj-$(CONFIG_LTTNG) += lttng-kretprobes.o +endif # CONFIG_KRETPROBES + +ifneq ($(CONFIG_PREEMPTIRQ_EVENTS),) + obj-$(CONFIG_LTTNG) += lttng-probe-preemptirq.o +endif # CONFIG_PREEMPTIRQ_EVENTS + +# vim:syntax=make diff --git a/ltt/lttng-2.11.0/probes/define_trace.h b/ltt/lttng-2.11.0/probes/define_trace.h new file mode 100644 index 000000000000..497f11f4c276 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/define_trace.h @@ -0,0 +1,121 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * define_trace.h + * + * Copyright (C) 2009 Steven Rostedt + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* + * Trace files that want to automate creationg of all tracepoints defined + * in their file should include this file. The following are macros that the + * trace file may define: + * + * TRACE_SYSTEM defines the system the tracepoint is for + * + * TRACE_INCLUDE_FILE if the file name is something other than TRACE_SYSTEM.h + * This macro may be defined to tell define_trace.h what file to include. + * Note, leave off the ".h". + * + * TRACE_INCLUDE_PATH if the path is something other than core kernel include/trace + * then this macro can define the path to use. Note, the path is relative to + * define_trace.h, not the file including it. Full path names for out of tree + * modules must be used. + */ + +#ifdef CREATE_TRACE_POINTS + +/* Prevent recursion */ +#undef CREATE_TRACE_POINTS + +#include + +#undef LTTNG_TRACEPOINT_EVENT_MAP +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) + +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, map, proto, args) + +#undef LTTNG_TRACEPOINT_EVENT +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) + +#undef LTTNG_TRACEPOINT_EVENT_CODE +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, map) + +#undef TRACE_INCLUDE +#undef __TRACE_INCLUDE + +#ifndef TRACE_INCLUDE_FILE +# define TRACE_INCLUDE_FILE TRACE_SYSTEM +# define UNDEF_TRACE_INCLUDE_FILE +#endif + +#ifndef TRACE_INCLUDE_PATH +# define __TRACE_INCLUDE(system) +# define UNDEF_TRACE_INCLUDE_PATH +#else +# define __TRACE_INCLUDE(system) __stringify(TRACE_INCLUDE_PATH/system.h) +#endif + +# define TRACE_INCLUDE(system) __TRACE_INCLUDE(system) + +/* Let the trace headers be reread */ +#define TRACE_HEADER_MULTI_READ + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* Make all open coded DECLARE_TRACE nops */ +#undef DECLARE_TRACE +#define DECLARE_TRACE(name, proto, args) + +#ifdef LTTNG_PACKAGE_BUILD +#include +#endif + +#undef LTTNG_TRACEPOINT_EVENT +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#undef LTTNG_TRACEPOINT_EVENT_MAP +#undef LTTNG_TRACEPOINT_EVENT_CLASS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#undef LTTNG_TRACEPOINT_EVENT_CODE +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#undef TRACE_HEADER_MULTI_READ + +/* Only undef what we defined in this file */ +#ifdef UNDEF_TRACE_INCLUDE_FILE +# undef TRACE_INCLUDE_FILE +# undef UNDEF_TRACE_INCLUDE_FILE +#endif + +#ifdef UNDEF_TRACE_INCLUDE_PATH +# undef TRACE_INCLUDE_PATH +# undef UNDEF_TRACE_INCLUDE_PATH +#endif + +/* + * We want to re-include lttng-tracepoint-event.h for a following probe. + */ +#undef LTTNG_TRACEPOINT_EVENT_H + +/* We may be processing more files */ +#define CREATE_TRACE_POINTS + +#endif /* CREATE_TRACE_POINTS */ diff --git a/ltt/lttng-2.11.0/probes/lttng-events-nowrite.h b/ltt/lttng-2.11.0/probes/lttng-events-nowrite.h new file mode 100644 index 000000000000..ea0655686d98 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-events-nowrite.h @@ -0,0 +1,137 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-events-write.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#undef ctf_integer_nowrite +#define ctf_integer_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_integer_hex_nowrite +#define ctf_integer_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 0, 1) + +#undef ctf_integer_oct_nowrite +#define ctf_integer_oct_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 8, 0, 1) + +#undef ctf_integer_network_nowrite +#define ctf_integer_network_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_integer_network_hex_nowrite +#define ctf_integer_network_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 0, 1) + +#undef ctf_array_nowrite +#define ctf_array_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_array_network_nowrite +#define ctf_array_network_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_array_text_nowrite +#define ctf_array_text_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_array_bitfield_nowrite +#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 0, 1) + +#undef ctf_sequence_nowrite +#define ctf_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_sequence_network_nowrite +#define ctf_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_sequence_text_nowrite +#define ctf_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_sequence_bitfield_nowrite +#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 0, 1) + +#undef ctf_string_nowrite +#define ctf_string_nowrite(_item, _user_src) \ + _ctf_string(_item, _user_src, 0, 1) + +#undef ctf_enum_nowrite +#define ctf_enum_nowrite(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 0, 1) + +/* user src */ +#undef ctf_user_integer_nowrite +#define ctf_user_integer_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_integer_hex_nowrite +#define ctf_user_integer_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 1, 1) + +#undef ctf_user_integer_network_nowrite +#define ctf_user_integer_network_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_integer_network_hex_nowrite +#define ctf_user_integer_network_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 1, 1) + +#undef ctf_user_array_nowrite +#define ctf_user_array_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_array_network_nowrite +#define ctf_user_array_network_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_array_text_nowrite +#define ctf_user_array_text_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_array_bitfield_nowrite +#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 1, 1) + +#undef ctf_user_sequence_nowrite +#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_sequence_network_nowrite +#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_sequence_text_nowrite +#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_sequence_bitfield_nowrite +#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 1, 1) + +#undef ctf_user_string_nowrite +#define ctf_user_string_nowrite(_item, _user_src) \ + _ctf_string(_item, _user_src, 1, 1) + +#undef ctf_user_enum_nowrite +#define ctf_user_enum_nowrite(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 1, 1) diff --git a/ltt/lttng-2.11.0/probes/lttng-events-reset.h b/ltt/lttng-2.11.0/probes/lttng-events-reset.h new file mode 100644 index 000000000000..a13d1cccd1a3 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-events-reset.h @@ -0,0 +1,283 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-events-reset.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* Reset macros used within LTTNG_TRACEPOINT_EVENT to "nothing" */ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) + +#undef TP_PROTO +#define TP_PROTO(args...) + +#undef TP_ARGS +#define TP_ARGS(args...) + +#undef TP_locvar +#define TP_locvar(...) + +#undef TP_code_pre +#define TP_code_pre(...) + +#undef TP_code_post +#define TP_code_post(...) + +#undef TP_FIELDS +#define TP_FIELDS(args...) + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, \ + _user, _nowrite) + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, \ + _byte_order, _base, _user, _nowrite) + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, _length_type, \ + _src_length, _byte_order, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _nowrite) + +/* "write" */ +#undef ctf_integer +#define ctf_integer(_type, _item, _src) + +#undef ctf_integer_hex +#define ctf_integer_hex(_type, _item, _src) + +#undef ctf_integer_oct +#define ctf_integer_oct(_type, _item, _src) + +#undef ctf_integer_network +#define ctf_integer_network(_type, _item, _src) + +#undef ctf_integer_network_hex +#define ctf_integer_network_hex(_type, _item, _src) + +#undef ctf_float +#define ctf_float(_type, _item, _src) + +#undef ctf_array +#define ctf_array(_type, _item, _src, _length) + +#undef ctf_array_hex +#define ctf_array_hex(_type, _item, _src, _length) + +#undef ctf_array_network +#define ctf_array_network(_type, _item, _src, _length) + +#undef ctf_array_network_hex +#define ctf_array_network_hex(_type, _item, _src, _length) + +#undef ctf_array_text +#define ctf_array_text(_type, _item, _src, _length) + +#undef ctf_array_bitfield +#define ctf_array_bitfield(_type, _item, _src, _length) + +#undef ctf_sequence +#define ctf_sequence(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_hex +#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network +#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network_hex +#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_text +#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield +#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) + +#undef ctf_string +#define ctf_string(_item, _src) + +#undef ctf_enum +#define ctf_enum(_name, _type, _item, _src) + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) + +#undef ctf_custom_type +#define ctf_custom_type(...) + +#undef ctf_custom_code +#define ctf_custom_code(...) + +#undef ctf_align +#define ctf_align(_type) + +/* "nowrite" */ +#undef ctf_integer_nowrite +#define ctf_integer_nowrite(_type, _item, _src) + +#undef ctf_float_nowrite +#define ctf_float_nowrite(_type, _item, _src) + +#undef ctf_array_nowrite +#define ctf_array_nowrite(_type, _item, _src, _length) + +#undef ctf_array_network_nowrite +#define ctf_array_network_nowrite(_type, _item, _src, _length) + +#undef ctf_array_text_nowrite +#define ctf_array_text_nowrite(_type, _item, _src, _length) + +#undef ctf_array_bitfield_nowrite +#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) + +#undef ctf_sequence_nowrite +#define ctf_sequence_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network_nowrite +#define ctf_sequence_network_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_text_nowrite +#define ctf_sequence_text_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield_nowrite +#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_string_nowrite +#define ctf_string_nowrite(_item, _src) + +#undef ctf_enum_nowrite +#define ctf_enum_nowrite(_name, _type, _item, _src) + +/* "user" - "write" */ +#undef ctf_user_integer +#define ctf_user_integer(_type, _item, _user_src) + +#undef ctf_user_integer_hex +#define ctf_user_integer_hex(_type, _item, _user_src) + +#undef ctf_user_integer_network +#define ctf_user_integer_network(_type, _item, _user_src) + +#undef ctf_user_integer_network_hex +#define ctf_user_integer_network_hex(_type, _item, _user_src) + +#undef ctf_user_float +#define ctf_user_float(_type, _item, _user_src) + +#undef ctf_user_array +#define ctf_user_array(_type, _item, _user_src, _length) + +#undef ctf_user_array_hex +#define ctf_user_array_hex(_type, _item, _user_src, _length) + +#undef ctf_user_array_network +#define ctf_user_array_network(_type, _item, _user_src, _length) + +#undef ctf_user_array_network_hex +#define ctf_user_array_network_hex(_type, _item, _user_src, _length) + +#undef ctf_user_array_text +#define ctf_user_array_text(_type, _item, _user_src, _length) + +#undef ctf_user_array_bitfield +#define ctf_user_array_bitfield(_type, _item, _src, _length) + +#undef ctf_user_sequence +#define ctf_user_sequence(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_hex +#define ctf_user_sequence_hex(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network +#define ctf_user_sequence_network(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network_hex +#define ctf_user_sequence_network_hex(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_text +#define ctf_user_sequence_text(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_bitfield +#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) + +#undef ctf_user_string +#define ctf_user_string(_item, _user_src) + +#undef ctf_user_enum +#define ctf_user_enum(_name, _type, _item, _src) + +/* "user" - "nowrite" */ +#undef ctf_user_integer_nowrite +#define ctf_user_integer_nowrite(_type, _item, _user_src) + +#undef ctf_user_float_nowrite +#define ctf_user_float_nowrite(_type, _item, _user_src) + +#undef ctf_user_array_nowrite +#define ctf_user_array_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_network_nowrite +#define ctf_user_array_network_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_text_nowrite +#define ctf_user_array_text_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_bitfield_nowrite +#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) + +#undef ctf_user_sequence_nowrite +#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network_nowrite +#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_text_nowrite +#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_bitfield_nowrite +#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_user_string_nowrite +#define ctf_user_string_nowrite(_item, _user_src) + +#undef ctf_user_enum_nowrite +#define ctf_user_enum_nowrite(_name, _type, _item, _src) diff --git a/ltt/lttng-2.11.0/probes/lttng-events-write.h b/ltt/lttng-2.11.0/probes/lttng-events-write.h new file mode 100644 index 000000000000..c645c5e37ed1 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-events-write.h @@ -0,0 +1,339 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-events-write.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#undef ctf_integer +#define ctf_integer(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_integer_bitfield +#define ctf_integer_bitfield(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __LITTLE_ENDIAN, 10, 0, 0) + +#undef ctf_integer_hex +#define ctf_integer_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_integer_oct +#define ctf_integer_oct(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 8, 0, 0) + +#undef ctf_integer_network +#define ctf_integer_network(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_integer_network_hex +#define ctf_integer_network_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_array +#define ctf_array(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_array_hex +#define ctf_array_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_array_network +#define ctf_array_network(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_array_network_hex +#define ctf_array_network_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_array_text +#define ctf_array_text(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_array_bitfield +#define ctf_array_bitfield(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 0, 0) + +#undef ctf_sequence +#define ctf_sequence(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_sequence_hex +#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_sequence_network +#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_sequence_network_hex +#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_sequence_text +#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_sequence_bitfield +#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 0, 0) + +#undef ctf_string +#define ctf_string(_item, _src) \ + _ctf_string(_item, _src, 0, 0) + +#undef ctf_enum +#define ctf_enum(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 0, 0) + +/* user src */ +#undef ctf_user_integer +#define ctf_user_integer(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_integer_hex +#define ctf_user_integer_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_integer_network +#define ctf_user_integer_network(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_integer_network_hex +#define ctf_user_integer_network_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_array +#define ctf_user_array(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_array_hex +#define ctf_user_array_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_array_network +#define ctf_user_array_network(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_array_network_hex +#define ctf_user_array_network_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_array_text +#define ctf_user_array_text(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_array_bitfield +#define ctf_user_array_bitfield(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 1, 0) + +#undef ctf_user_sequence +#define ctf_user_sequence(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_sequence_hex +#define ctf_user_sequence_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_sequence_network +#define ctf_user_sequence_network(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_sequence_network_hex +#define ctf_user_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_sequence_text +#define ctf_user_sequence_text(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_sequence_bitfield +#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 1, 0) + +#undef ctf_user_string +#define ctf_user_string(_item, _src) \ + _ctf_string(_item, _src, 1, 0) + +#undef ctf_user_enum +#define ctf_user_enum(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 1, 0) + +/* types */ +#undef ctf_integer_type +#define ctf_integer_type(_type, _src) \ + ctf_integer(_type, unused, _src) + +#undef ctf_integer_bitfield_type +#define ctf_integer_bitfield_type(_type, _src) \ + ctf_integer_bitfield(_type, unused, _src) + +#undef ctf_integer_hex_type +#define ctf_integer_hex_type(_type, _src) \ + ctf_integer_hex(_type, unused, _src) + +#undef ctf_integer_oct_type +#define ctf_integer_oct_type(_type, _item, _src) \ + ctf_integer_oct(_type, unused, _src) + +#undef ctf_integer_network_type +#define ctf_integer_network_type(_type, _src) \ + ctf_integer_network(_type, unused, _src) + +#undef ctf_integer_network_hex_type +#define ctf_integer_network_hex_type(_type, _src) \ + ctf_integer_network_hex(_type, unused, _src) + +#undef ctf_array_type +#define ctf_array_type(_type, _src, _length) \ + ctf_array(_type, unused, _src, _length) + +#undef ctf_array_hex_type +#define ctf_array_hex_type(_type, _src, _length) \ + ctf_array_hex(_type, unused, _src, _length) + +#undef ctf_array_network_type +#define ctf_array_network_type(_type, _src, _length) \ + ctf_array_network(_type, unused, _src, _length) + +#undef ctf_array_network_hex_type +#define ctf_array_network_hex_type(_type, _src, _length) \ + ctf_array_network_hex(_type, unused, _src, _length) + +#undef ctf_array_text_type +#define ctf_array_text_type(_type, _src, _length) \ + ctf_array_text(_type, unused, _src, _length) + +#undef ctf_array_bitfield_type +#define ctf_array_bitfield_type(_type, _src, _length) \ + ctf_array_bitfield(_type, unused, _src, _length) + +#undef ctf_sequence_type +#define ctf_sequence_type(_type, _src, _length_type, _src_length) \ + ctf_sequence(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_hex_type +#define ctf_sequence_hex_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_network_type +#define ctf_sequence_network_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_network(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_network_hex_type +#define ctf_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_network_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_text_type +#define ctf_sequence_text_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_text(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield_type +#define ctf_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_bitfield(_type, unused, _src, _length_type, _src_length) + +#undef ctf_string_type +#define ctf_string_type(_src) \ + ctf_string(unused, _src) + +#undef ctf_enum_type +#define ctf_enum_type(_name, _type, _src) \ + ctf_enum(_name, _type, unused, _src) + +/* user src types */ +#undef ctf_user_integer_type +#define ctf_user_integer_type(_type, _src) \ + ctf_user_integer(_type, unused, _src) + +#undef ctf_user_integer_hex_type +#define ctf_user_integer_hex_type(_type, _src) \ + ctf_user_integer_hex(_type, unused, _src) + +#undef ctf_user_integer_oct_type +#define ctf_user_integer_oct_type(_type, _item, _src) \ + ctf_user_integer_oct(_type, unused, _src) + +#undef ctf_user_integer_network_type +#define ctf_user_integer_network_type(_type, _src) \ + ctf_user_integer_network(_type, unused, _src) + +#undef ctf_user_integer_network_hex_type +#define ctf_user_integer_network_hex_type(_type, _src) \ + ctf_user_integer_network_hex(_type, unused, _src) + +#undef ctf_user_array_type +#define ctf_user_array_type(_type, _src, _length) \ + ctf_user_array(_type, unused, _src, _length) + +#undef ctf_user_array_hex_type +#define ctf_user_array_hex_type(_type, _src, _length) \ + ctf_user_array_hex(_type, unused, _src, _length) + +#undef ctf_user_array_network_type +#define ctf_user_array_network_type(_type, _src, _length) \ + ctf_user_array_network(_type, unused, _src, _length) + +#undef ctf_user_array_network_hex_type +#define ctf_user_array_network_hex_type(_type, _src, _length) \ + ctf_user_array_network_hex(_type, unused, _src, _length) + +#undef ctf_user_array_text_type +#define ctf_user_array_text_type(_type, _src, _length) \ + ctf_user_array_text(_type, unused, _src, _length) + +#undef ctf_user_array_bitfield_type +#define ctf_user_array_bitfield_type(_type, _src, _length) \ + ctf_user_array_bitfield(_type, unused, _src, _length) + +#undef ctf_user_sequence_type +#define ctf_user_sequence_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_hex_type +#define ctf_user_sequence_hex_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_network_type +#define ctf_user_sequence_network_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_network(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_network_hex_type +#define ctf_user_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_network_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_text_type +#define ctf_user_sequence_text_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_text(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_bitfield_type +#define ctf_user_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_bitfield(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_string_type +#define ctf_user_string_type(_src) \ + ctf_user_string(unused, _src) + +#undef ctf_user_enum_type +#define ctf_user_enum_type(_name, _type, _src) \ + ctf_user_enum(_name, _type, unused, _src) diff --git a/ltt/lttng-2.11.0/probes/lttng-kprobes.c b/ltt/lttng-2.11.0/probes/lttng-kprobes.c new file mode 100644 index 000000000000..38fb72e89133 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-kprobes.c @@ -0,0 +1,174 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-kprobes.c + * + * LTTng kprobes integration module. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static +int lttng_kprobes_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct lttng_event *event = + container_of(p, struct lttng_event, u.kprobe.kp); + struct lttng_probe_ctx lttng_probe_ctx = { + .event = event, + .interruptible = !lttng_regs_irqs_disabled(regs), + }; + struct lttng_channel *chan = event->chan; + struct lib_ring_buffer_ctx ctx; + int ret; + unsigned long data = (unsigned long) p->addr; + + if (unlikely(!LTTNG_READ_ONCE(chan->session->active))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(chan->enabled))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(event->enabled))) + return 0; + + lib_ring_buffer_ctx_init(&ctx, chan->chan, <tng_probe_ctx, sizeof(data), + lttng_alignof(data), -1); + ret = chan->ops->event_reserve(&ctx, event->id); + if (ret < 0) + return 0; + lib_ring_buffer_align_ctx(&ctx, lttng_alignof(data)); + chan->ops->event_write(&ctx, &data, sizeof(data)); + chan->ops->event_commit(&ctx); + return 0; +} + +/* + * Create event description + */ +static +int lttng_create_kprobe_event(const char *name, struct lttng_event *event) +{ + struct lttng_event_field *field; + struct lttng_event_desc *desc; + int ret; + + desc = kzalloc(sizeof(*event->desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; + desc->name = kstrdup(name, GFP_KERNEL); + if (!desc->name) { + ret = -ENOMEM; + goto error_str; + } + desc->nr_fields = 1; + desc->fields = field = + kzalloc(1 * sizeof(struct lttng_event_field), GFP_KERNEL); + if (!field) { + ret = -ENOMEM; + goto error_field; + } + field->name = "ip"; + field->type.atype = atype_integer; + field->type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT; + field->type.u.basic.integer.alignment = lttng_alignof(unsigned long) * CHAR_BIT; + field->type.u.basic.integer.signedness = lttng_is_signed_type(unsigned long); + field->type.u.basic.integer.reverse_byte_order = 0; + field->type.u.basic.integer.base = 16; + field->type.u.basic.integer.encoding = lttng_encode_none; + desc->owner = THIS_MODULE; + event->desc = desc; + + return 0; + +error_field: + kfree(desc->name); +error_str: + kfree(desc); + return ret; +} + +int lttng_kprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event) +{ + int ret; + + /* Kprobes expects a NULL symbol name if unused */ + if (symbol_name[0] == '\0') + symbol_name = NULL; + + ret = lttng_create_kprobe_event(name, event); + if (ret) + goto error; + memset(&event->u.kprobe.kp, 0, sizeof(event->u.kprobe.kp)); + event->u.kprobe.kp.pre_handler = lttng_kprobes_handler_pre; + if (symbol_name) { + event->u.kprobe.symbol_name = + kzalloc(LTTNG_KERNEL_SYM_NAME_LEN * sizeof(char), + GFP_KERNEL); + if (!event->u.kprobe.symbol_name) { + ret = -ENOMEM; + goto name_error; + } + memcpy(event->u.kprobe.symbol_name, symbol_name, + LTTNG_KERNEL_SYM_NAME_LEN * sizeof(char)); + event->u.kprobe.kp.symbol_name = + event->u.kprobe.symbol_name; + } + event->u.kprobe.kp.offset = offset; + event->u.kprobe.kp.addr = (void *) (unsigned long) addr; + + /* + * Ensure the memory we just allocated don't trigger page faults. + * Well.. kprobes itself puts the page fault handler on the blacklist, + * but we can never be too careful. + */ + wrapper_vmalloc_sync_mappings(); + + ret = register_kprobe(&event->u.kprobe.kp); + if (ret) + goto register_error; + return 0; + +register_error: + kfree(event->u.kprobe.symbol_name); +name_error: + kfree(event->desc->fields); + kfree(event->desc->name); + kfree(event->desc); +error: + return ret; +} +EXPORT_SYMBOL_GPL(lttng_kprobes_register); + +void lttng_kprobes_unregister(struct lttng_event *event) +{ + unregister_kprobe(&event->u.kprobe.kp); +} +EXPORT_SYMBOL_GPL(lttng_kprobes_unregister); + +void lttng_kprobes_destroy_private(struct lttng_event *event) +{ + kfree(event->u.kprobe.symbol_name); + kfree(event->desc->fields); + kfree(event->desc->name); + kfree(event->desc); +} +EXPORT_SYMBOL_GPL(lttng_kprobes_destroy_private); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng kprobes probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-kretprobes.c b/ltt/lttng-2.11.0/probes/lttng-kretprobes.c new file mode 100644 index 000000000000..a6bcd2188346 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-kretprobes.c @@ -0,0 +1,307 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-kretprobes.c + * + * LTTng kretprobes integration module. + * + * Copyright (C) 2009-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum lttng_kretprobe_type { + EVENT_ENTRY = 0, + EVENT_RETURN = 1, +}; + +struct lttng_krp { + struct kretprobe krp; + struct lttng_event *event[2]; /* ENTRY and RETURN */ + struct kref kref_register; + struct kref kref_alloc; +}; + +static +int _lttng_kretprobes_handler(struct kretprobe_instance *krpi, + struct pt_regs *regs, + enum lttng_kretprobe_type type) +{ + struct lttng_krp *lttng_krp = + container_of(krpi->rp, struct lttng_krp, krp); + struct lttng_event *event = + lttng_krp->event[type]; + struct lttng_probe_ctx lttng_probe_ctx = { + .event = event, + .interruptible = !lttng_regs_irqs_disabled(regs), + }; + struct lttng_channel *chan = event->chan; + struct lib_ring_buffer_ctx ctx; + int ret; + struct { + unsigned long ip; + unsigned long parent_ip; + } payload; + + if (unlikely(!LTTNG_READ_ONCE(chan->session->active))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(chan->enabled))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(event->enabled))) + return 0; + + payload.ip = (unsigned long) krpi->rp->kp.addr; + payload.parent_ip = (unsigned long) krpi->ret_addr; + + lib_ring_buffer_ctx_init(&ctx, chan->chan, <tng_probe_ctx, sizeof(payload), + lttng_alignof(payload), -1); + ret = chan->ops->event_reserve(&ctx, event->id); + if (ret < 0) + return 0; + lib_ring_buffer_align_ctx(&ctx, lttng_alignof(payload)); + chan->ops->event_write(&ctx, &payload, sizeof(payload)); + chan->ops->event_commit(&ctx); + return 0; +} + +static +int lttng_kretprobes_handler_entry(struct kretprobe_instance *krpi, + struct pt_regs *regs) +{ + return _lttng_kretprobes_handler(krpi, regs, EVENT_ENTRY); +} + +static +int lttng_kretprobes_handler_return(struct kretprobe_instance *krpi, + struct pt_regs *regs) +{ + return _lttng_kretprobes_handler(krpi, regs, EVENT_RETURN); +} + +/* + * Create event description + */ +static +int lttng_create_kprobe_event(const char *name, struct lttng_event *event, + enum lttng_kretprobe_type type) +{ + struct lttng_event_field *fields; + struct lttng_event_desc *desc; + int ret; + char *alloc_name; + size_t name_len; + const char *suffix = NULL; + + desc = kzalloc(sizeof(*event->desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; + name_len = strlen(name); + switch (type) { + case EVENT_ENTRY: + suffix = "_entry"; + break; + case EVENT_RETURN: + suffix = "_return"; + break; + } + name_len += strlen(suffix); + alloc_name = kmalloc(name_len + 1, GFP_KERNEL); + if (!alloc_name) { + ret = -ENOMEM; + goto error_str; + } + strcpy(alloc_name, name); + strcat(alloc_name, suffix); + desc->name = alloc_name; + desc->nr_fields = 2; + desc->fields = fields = + kzalloc(2 * sizeof(struct lttng_event_field), GFP_KERNEL); + if (!desc->fields) { + ret = -ENOMEM; + goto error_fields; + } + fields[0].name = "ip"; + fields[0].type.atype = atype_integer; + fields[0].type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT; + fields[0].type.u.basic.integer.alignment = lttng_alignof(unsigned long) * CHAR_BIT; + fields[0].type.u.basic.integer.signedness = lttng_is_signed_type(unsigned long); + fields[0].type.u.basic.integer.reverse_byte_order = 0; + fields[0].type.u.basic.integer.base = 16; + fields[0].type.u.basic.integer.encoding = lttng_encode_none; + + fields[1].name = "parent_ip"; + fields[1].type.atype = atype_integer; + fields[1].type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT; + fields[1].type.u.basic.integer.alignment = lttng_alignof(unsigned long) * CHAR_BIT; + fields[1].type.u.basic.integer.signedness = lttng_is_signed_type(unsigned long); + fields[1].type.u.basic.integer.reverse_byte_order = 0; + fields[1].type.u.basic.integer.base = 16; + fields[1].type.u.basic.integer.encoding = lttng_encode_none; + + desc->owner = THIS_MODULE; + event->desc = desc; + + return 0; + +error_fields: + kfree(desc->name); +error_str: + kfree(desc); + return ret; +} + +int lttng_kretprobes_register(const char *name, + const char *symbol_name, + uint64_t offset, + uint64_t addr, + struct lttng_event *event_entry, + struct lttng_event *event_return) +{ + int ret; + struct lttng_krp *lttng_krp; + + /* Kprobes expects a NULL symbol name if unused */ + if (symbol_name[0] == '\0') + symbol_name = NULL; + + ret = lttng_create_kprobe_event(name, event_entry, EVENT_ENTRY); + if (ret) + goto error; + ret = lttng_create_kprobe_event(name, event_return, EVENT_RETURN); + if (ret) + goto event_return_error; + lttng_krp = kzalloc(sizeof(*lttng_krp), GFP_KERNEL); + if (!lttng_krp) + goto krp_error; + lttng_krp->krp.entry_handler = lttng_kretprobes_handler_entry; + lttng_krp->krp.handler = lttng_kretprobes_handler_return; + if (symbol_name) { + char *alloc_symbol; + + alloc_symbol = kstrdup(symbol_name, GFP_KERNEL); + if (!alloc_symbol) { + ret = -ENOMEM; + goto name_error; + } + lttng_krp->krp.kp.symbol_name = + alloc_symbol; + event_entry->u.kretprobe.symbol_name = + alloc_symbol; + event_return->u.kretprobe.symbol_name = + alloc_symbol; + } + lttng_krp->krp.kp.offset = offset; + lttng_krp->krp.kp.addr = (void *) (unsigned long) addr; + + /* Allow probe handler to find event structures */ + lttng_krp->event[EVENT_ENTRY] = event_entry; + lttng_krp->event[EVENT_RETURN] = event_return; + event_entry->u.kretprobe.lttng_krp = lttng_krp; + event_return->u.kretprobe.lttng_krp = lttng_krp; + + /* + * Both events must be unregistered before the kretprobe is + * unregistered. Same for memory allocation. + */ + kref_init(<tng_krp->kref_alloc); + kref_get(<tng_krp->kref_alloc); /* inc refcount to 2, no overflow. */ + kref_init(<tng_krp->kref_register); + kref_get(<tng_krp->kref_register); /* inc refcount to 2, no overflow. */ + + /* + * Ensure the memory we just allocated don't trigger page faults. + * Well.. kprobes itself puts the page fault handler on the blacklist, + * but we can never be too careful. + */ + wrapper_vmalloc_sync_mappings(); + + ret = register_kretprobe(<tng_krp->krp); + if (ret) + goto register_error; + return 0; + +register_error: + kfree(lttng_krp->krp.kp.symbol_name); +name_error: + kfree(lttng_krp); +krp_error: + kfree(event_return->desc->fields); + kfree(event_return->desc->name); + kfree(event_return->desc); +event_return_error: + kfree(event_entry->desc->fields); + kfree(event_entry->desc->name); + kfree(event_entry->desc); +error: + return ret; +} +EXPORT_SYMBOL_GPL(lttng_kretprobes_register); + +static +void _lttng_kretprobes_unregister_release(struct kref *kref) +{ + struct lttng_krp *lttng_krp = + container_of(kref, struct lttng_krp, kref_register); + unregister_kretprobe(<tng_krp->krp); +} + +void lttng_kretprobes_unregister(struct lttng_event *event) +{ + kref_put(&event->u.kretprobe.lttng_krp->kref_register, + _lttng_kretprobes_unregister_release); +} +EXPORT_SYMBOL_GPL(lttng_kretprobes_unregister); + +static +void _lttng_kretprobes_release(struct kref *kref) +{ + struct lttng_krp *lttng_krp = + container_of(kref, struct lttng_krp, kref_alloc); + kfree(lttng_krp->krp.kp.symbol_name); +} + +void lttng_kretprobes_destroy_private(struct lttng_event *event) +{ + kfree(event->desc->fields); + kfree(event->desc->name); + kfree(event->desc); + kref_put(&event->u.kretprobe.lttng_krp->kref_alloc, + _lttng_kretprobes_release); +} +EXPORT_SYMBOL_GPL(lttng_kretprobes_destroy_private); + +int lttng_kretprobes_event_enable_state(struct lttng_event *event, + int enable) +{ + struct lttng_event *event_return; + struct lttng_krp *lttng_krp; + + if (event->instrumentation != LTTNG_KERNEL_KRETPROBE) { + return -EINVAL; + } + if (event->enabled == enable) { + return -EBUSY; + } + lttng_krp = event->u.kretprobe.lttng_krp; + event_return = lttng_krp->event[EVENT_RETURN]; + WRITE_ONCE(event->enabled, enable); + WRITE_ONCE(event_return->enabled, enable); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_kretprobes_event_enable_state); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng kretprobes probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-9p.c b/ltt/lttng-2.11.0/probes/lttng-probe-9p.c new file mode 100644 index 000000000000..1a6895e71333 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-9p.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-9p.c + * + * LTTng 9p probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2018 Michael Jeanson + */ + +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Michael Jeanson "); +MODULE_DESCRIPTION("LTTng 9p probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-asoc.c b/ltt/lttng-2.11.0/probes/lttng-probe-asoc.c new file mode 100644 index 000000000000..4d0707945553 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-asoc.c @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-asoc.c + * + * LTTng asoc probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Paul Woegerer "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng asoc probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-block.c b/ltt/lttng-2.11.0/probes/lttng-probe-block.c new file mode 100644 index 000000000000..d76dfdfa9611 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-block.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-block.c + * + * LTTng block probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng block probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-btrfs.c b/ltt/lttng-2.11.0/probes/lttng-probe-btrfs.c new file mode 100644 index 000000000000..69e69aaffd6c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-btrfs.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-btrfs.c + * + * LTTng btrfs probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include +#include <../fs/btrfs/ctree.h> +#include <../fs/btrfs/transaction.h> +#include <../fs/btrfs/volumes.h> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0)) +#include <../fs/btrfs/block-group.h> +#endif +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng btrfs probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-compaction.c b/ltt/lttng-2.11.0/probes/lttng-probe-compaction.c new file mode 100644 index 000000000000..2835c8c4a87e --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-compaction.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-compaction.c + * + * LTTng compaction probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng compaction probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-ext3.c b/ltt/lttng-2.11.0/probes/lttng-probe-ext3.c new file mode 100644 index 000000000000..22d4f25f10cb --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-ext3.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-ext3.c + * + * LTTng ext3 probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +#include <../fs/ext3/ext3.h> +#else +#include +#endif + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth , Paul Woegerer , and Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng ext3 probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-ext4.c b/ltt/lttng-2.11.0/probes/lttng-probe-ext4.c new file mode 100644 index 000000000000..e3e9ae111f6e --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-ext4.c @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-ext4.c + * + * LTTng ext4 probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include <../fs/ext4/ext4.h> +#include <../fs/ext4/mballoc.h> +#include <../fs/ext4/ext4_extents.h> +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng ext4 probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-gpio.c b/ltt/lttng-2.11.0/probes/lttng-probe-gpio.c new file mode 100644 index 000000000000..092d95af206c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-gpio.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-gpio.c + * + * LTTng gpio probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng gpio probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-i2c.c b/ltt/lttng-2.11.0/probes/lttng-probe-i2c.c new file mode 100644 index 000000000000..728132b7dab4 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-i2c.c @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-i2c.c + * + * LTTng i2c probes. + * + * Copyright (C) 2012 Mathieu Desnoyers + * Copyright (C) 2016 Simon Marchi + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +static int extract_sensitive_payload; +module_param(extract_sensitive_payload, int, 0644); +MODULE_PARM_DESC(extract_sensitive_payload, + "Whether to extract possibly sensitive data from events (i2c " + "buffer contents) or not (1 or 0, default: 0)."); + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Simon Marchi "); +MODULE_DESCRIPTION("LTTng i2c probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-irq.c b/ltt/lttng-2.11.0/probes/lttng-probe-irq.c new file mode 100644 index 000000000000..af78e7519f78 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-irq.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-irq.c + * + * LTTng irq probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng irq probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-jbd.c b/ltt/lttng-2.11.0/probes/lttng-probe-jbd.c new file mode 100644 index 000000000000..fc0be224b0f8 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-jbd.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-jbd.c + * + * LTTng jbd probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth , Paul Woegerer , and Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng jbd probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-jbd2.c b/ltt/lttng-2.11.0/probes/lttng-probe-jbd2.c new file mode 100644 index 000000000000..1de665393576 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-jbd2.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-jbd2.c + * + * LTTng jbd2 probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng jbd2 probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-kmem.c b/ltt/lttng-2.11.0/probes/lttng-probe-kmem.c new file mode 100644 index 000000000000..d1cc60cf9dac --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-kmem.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-kmem.c + * + * LTTng kmem probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +/* + * This page_alloc.h wrapper needs to be included before gfpflags.h because it + * overrides a function with a define. + */ +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng kmem probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86-mmu.c b/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86-mmu.c new file mode 100644 index 000000000000..5043c776e35c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86-mmu.c @@ -0,0 +1,57 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-kvm.c + * + * LTTng kvm probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) +#include +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) */ +#include <../../virt/kvm/iodev.h> +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) */ + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)) +#include <../../arch/x86/kvm/mmu/mmu_internal.h> +#include <../../arch/x86/kvm/mmu/mmutrace.h> +#else +#include <../../arch/x86/kvm/mmutrace.h> +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +#include <../arch/x86/kvm/mmu.h> +#include <../arch/x86/kvm/mmu/spte.h> +#endif + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS + +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86/kvm +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng kvm mmu probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86.c b/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86.c new file mode 100644 index 000000000000..6dfaa31e08ec --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-kvm-x86.c @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-kvm.c + * + * LTTng kvm probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) +#include +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) +#include +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) */ +#include <../../virt/kvm/iodev.h> +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) */ + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS + +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86/kvm +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng kvm probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-kvm.c b/ltt/lttng-2.11.0/probes/lttng-probe-kvm.c new file mode 100644 index 000000000000..5e471015782c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-kvm.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-kvm.c + * + * LTTng kvm probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng kvm probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-lock.c b/ltt/lttng-2.11.0/probes/lttng-probe-lock.c new file mode 100644 index 000000000000..b3ad230204e7 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-lock.c @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-lock.c + * + * LTTng lock probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +#include +#else +#include +#endif + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth and Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng lock probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-module.c b/ltt/lttng-2.11.0/probes/lttng-probe-module.c new file mode 100644 index 000000000000..03e97f7f2e17 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-module.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-module.c + * + * LTTng module probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng module probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-napi.c b/ltt/lttng-2.11.0/probes/lttng-probe-napi.c new file mode 100644 index 000000000000..412080a498f7 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-napi.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-napi.c + * + * LTTng napi probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng napi probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-net.c b/ltt/lttng-2.11.0/probes/lttng-probe-net.c new file mode 100644 index 000000000000..01c0026bf78e --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-net.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-net.c + * + * LTTng net probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng net probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-power.c b/ltt/lttng-2.11.0/probes/lttng-probe-power.c new file mode 100644 index 000000000000..17eda445ff15 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-power.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-power.c + * + * LTTng power probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng power probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-preemptirq.c b/ltt/lttng-2.11.0/probes/lttng-probe-preemptirq.c new file mode 100644 index 000000000000..9115503608c2 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-preemptirq.c @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-preemptirq.c + * + * LTTng preemptirq probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * 2017 Michael Jeanson + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Michael Jeanson "); +MODULE_DESCRIPTION("LTTng preemptirq probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-printk.c b/ltt/lttng-2.11.0/probes/lttng-probe-printk.c new file mode 100644 index 000000000000..46de679f24cb --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-printk.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-printk.c + * + * LTTng printk probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng printk probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-random.c b/ltt/lttng-2.11.0/probes/lttng-probe-random.c new file mode 100644 index 000000000000..a2d0a29f045c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-random.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-random.c + * + * LTTng random probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng random probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-rcu.c b/ltt/lttng-2.11.0/probes/lttng-probe-rcu.c new file mode 100644 index 000000000000..11a6d0c5f540 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-rcu.c @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-rcu.c + * + * LTTng rcu probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng rcu probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-regmap.c b/ltt/lttng-2.11.0/probes/lttng-probe-regmap.c new file mode 100644 index 000000000000..1d5eefaab9b4 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-regmap.c @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-regmap.c + * + * LTTng regmap probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include <../../drivers/base/regmap/trace.h> + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng regmap probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-regulator.c b/ltt/lttng-2.11.0/probes/lttng-probe-regulator.c new file mode 100644 index 000000000000..bd2ab3f78f71 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-regulator.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-regulator.c + * + * LTTng regulator probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng regulator probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-rpm.c b/ltt/lttng-2.11.0/probes/lttng-probe-rpm.c new file mode 100644 index 000000000000..430396508336 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-rpm.c @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-rpm.c + * + * LTTng rpm probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng rpm probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-sched.c b/ltt/lttng-2.11.0/probes/lttng-probe-sched.c new file mode 100644 index 000000000000..bb1e12dc5e8c --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-sched.c @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-sched.c + * + * LTTng sched probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng sched probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-scsi.c b/ltt/lttng-2.11.0/probes/lttng-probe-scsi.c new file mode 100644 index 000000000000..a100f0a054ac --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-scsi.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-scsi.c + * + * LTTng scsi probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng scsi probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-signal.c b/ltt/lttng-2.11.0/probes/lttng-probe-signal.c new file mode 100644 index 000000000000..4772f2e9c7fd --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-signal.c @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-signal.c + * + * LTTng signal probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng signal probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-skb.c b/ltt/lttng-2.11.0/probes/lttng-probe-skb.c new file mode 100644 index 000000000000..d09ad921956a --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-skb.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-skb.c + * + * LTTng skb probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng skb probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-sock.c b/ltt/lttng-2.11.0/probes/lttng-probe-sock.c new file mode 100644 index 000000000000..92f5112c2a2e --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-sock.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-sock.c + * + * LTTng sock probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng sock probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-statedump.c b/ltt/lttng-2.11.0/probes/lttng-probe-statedump.c new file mode 100644 index 000000000000..7fbf388338bc --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-statedump.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-statedump.c + * + * LTTng statedump probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TP_SESSION_CHECK +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module +#define TRACE_INCLUDE_FILE lttng-statedump + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng statedump probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-sunrpc.c b/ltt/lttng-2.11.0/probes/lttng-probe-sunrpc.c new file mode 100644 index 000000000000..b4db19d2b1d5 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-sunrpc.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-sunrpc.c + * + * LTTng sunrpc probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng sunrpc probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-timer.c b/ltt/lttng-2.11.0/probes/lttng-probe-timer.c new file mode 100644 index 000000000000..a504b1294c25 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-timer.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-timer.c + * + * LTTng timer probes. + * + * Copyright (C) 2012 Mathieu Desnoyers + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ + +#include +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng timer probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-udp.c b/ltt/lttng-2.11.0/probes/lttng-probe-udp.c new file mode 100644 index 000000000000..e2d4554f1611 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-udp.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-udp.c + * + * LTTng udp probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng udp probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-user.c b/ltt/lttng-2.11.0/probes/lttng-probe-user.c new file mode 100644 index 000000000000..c11e1e0f3b92 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-user.c @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-probe-user.c + * + * Copyright (C) 2012 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#define LTTNG_MAX_USER_STRING_LEN 1048576 /* 1MB */ + +/* + * Calculate string length. Include final null terminating character if there is + * one, or ends at first fault. Disabling page faults ensures that we can safely + * call this from pretty much any context, including those where the caller + * holds mmap_sem, or any lock which nests in mmap_sem. + */ +long lttng_strlen_user_inatomic(const char *addr) +{ + long count = 0; + + if (!addr) + return 0; + + pagefault_disable(); + for (;;) { + char v; + unsigned long ret; + + if (unlikely(!lttng_access_ok(VERIFY_READ, + (__force const char __user *) addr, + sizeof(v)))) + break; + ret = __copy_from_user_inatomic(&v, + (__force const char __user *)(addr), + sizeof(v)); + if (unlikely(ret > 0)) + break; + count++; + if (unlikely(count > LTTNG_MAX_USER_STRING_LEN)) + break; + if (unlikely(!v)) + break; + addr++; + } + pagefault_enable(); + return count; +} +EXPORT_SYMBOL_GPL(lttng_strlen_user_inatomic); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-user.h b/ltt/lttng-2.11.0/probes/lttng-probe-user.h new file mode 100644 index 000000000000..0939a1853585 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-user.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-probe-user.h + * + * Copyright (C) 2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_PROBE_USER_H +#define _LTTNG_PROBE_USER_H + +/* + * Calculate string length. Include final null terminating character if there is + * one, or ends at first fault. + */ +long lttng_strlen_user_inatomic(const char *addr); + +#endif /* _LTTNG_PROBE_USER_H */ diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-v4l2.c b/ltt/lttng-2.11.0/probes/lttng-probe-v4l2.c new file mode 100644 index 000000000000..44665ecb83d4 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-v4l2.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-v4l2.c + * + * LTTng v4l2 probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012,2013 Mentor Graphics Corp. + */ + +#include +#include +#include +#include +#include +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_DESCRIPTION("LTTng v4l2 probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-vmscan.c b/ltt/lttng-2.11.0/probes/lttng-probe-vmscan.c new file mode 100644 index 000000000000..385d2efdbad8 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-vmscan.c @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-vmscan.c + * + * LTTng vmscan probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Wade Farnsworth "); +MODULE_AUTHOR("Paul Woegerer "); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng vmscan probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-workqueue.c b/ltt/lttng-2.11.0/probes/lttng-probe-workqueue.c new file mode 100644 index 000000000000..cf59f39eb695 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-workqueue.c @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-workqueue.c + * + * LTTng workqueue probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include + +struct cpu_workqueue_struct; +struct pool_workqueue; + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng workqueue probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-writeback.c b/ltt/lttng-2.11.0/probes/lttng-probe-writeback.c new file mode 100644 index 000000000000..d0a4be6a42ad --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-writeback.c @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-writeback.c + * + * LTTng writeback probes. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * Copyright (C) 2012 Mentor Graphics Corp. + */ + +#include +#include +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include +#include + +/* #if */ + +#define global_dirty_limit wrapper_global_dirty_limit() + +/* #endif */ + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Andrew Gabbasov "); +MODULE_DESCRIPTION("LTTng writeback probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-x86-exceptions.c b/ltt/lttng-2.11.0/probes/lttng-probe-x86-exceptions.c new file mode 100644 index 000000000000..f3794e8d400a --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-x86-exceptions.c @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-x86-exceptions.c + * + * LTTng x86 exceptions probes. + * + * Copyright (C) 2010-2015 Mathieu Desnoyers + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86 + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng x86 exceptions probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-probe-x86-irq-vectors.c b/ltt/lttng-2.11.0/probes/lttng-probe-x86-irq-vectors.c new file mode 100644 index 000000000000..53172d07af1b --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-probe-x86-irq-vectors.c @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-probe-x86-irq-vectors.c + * + * LTTng x86 irq vectors probes. + * + * Copyright (C) 2010-2015 Mathieu Desnoyers + */ + +#include +#include + +/* + * Create the tracepoint static inlines from the kernel to validate that our + * trace event macros match the kernel we run on. + */ +#include + +#include + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE + +/* + * Create LTTng tracepoint probes. + */ +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module/arch/x86 + +#include + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng x86 irq vectors probes"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/probes/lttng-tracepoint-event-impl.h b/ltt/lttng-2.11.0/probes/lttng-tracepoint-event-impl.h new file mode 100644 index 000000000000..9adf2afa61c9 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-tracepoint-event-impl.h @@ -0,0 +1,1377 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracepoint-event-impl.h + * + * Copyright (C) 2009 Steven Rostedt + * Copyright (C) 2009-2014 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include +#include +#include +#include + +#define __LTTNG_NULL_STRING "(null)" + +/* + * Macro declarations used for all stages. + */ + +/* + * LTTng name mapping macros. LTTng remaps some of the kernel events to + * enforce name-spacing. + */ +#undef LTTNG_TRACEPOINT_EVENT_MAP +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS(map, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(fields)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(map, \ + PARAMS(fields)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(map, name, map) + +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE(map, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(_locvar), \ + PARAMS(_code_pre), \ + PARAMS(fields), \ + PARAMS(_code_post)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_CODE +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, name, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(_locvar), \ + PARAMS(_code_pre), \ + PARAMS(fields), \ + PARAMS(_code_post)) + +/* + * LTTNG_TRACEPOINT_EVENT_CLASS can be used to add a generic function + * handlers for events. That is, if all events have the same parameters + * and just have distinct trace points. Each tracepoint can be defined + * with LTTNG_TRACEPOINT_EVENT_INSTANCE and that will map the + * LTTNG_TRACEPOINT_EVENT_CLASS to the tracepoint. + * + * LTTNG_TRACEPOINT_EVENT is a one to one mapping between tracepoint and + * template. + */ + +#undef LTTNG_TRACEPOINT_EVENT +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ + LTTNG_TRACEPOINT_EVENT_MAP(name, name, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(fields)) + +#undef LTTNG_TRACEPOINT_EVENT_NOARGS +#define LTTNG_TRACEPOINT_EVENT_NOARGS(name, fields) \ + LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, name, PARAMS(fields)) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, name, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, name) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS +#define LTTNG_TRACEPOINT_EVENT_CLASS(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, PARAMS(_proto), PARAMS(_args), , , \ + PARAMS(_fields), ) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, , , PARAMS(_fields), ) + + +/* + * Stage 1 of the trace events. + * + * Create dummy trace calls for each events, verifying that the LTTng module + * instrumentation headers match the kernel arguments. Will be optimized + * out by the compiler. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ +void trace_##_name(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +void trace_##_name(void); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 1.1 of the trace events. + * + * Create dummy trace prototypes for each event class, and for each used + * template. This will allow checking whether the prototypes from the + * class and the instance using the class actually match. + */ + +#include /* Reset all macros within TRACE_EVENT */ + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ +void __event_template_proto___##_template(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +void __event_template_proto___##_template(void); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +void __event_template_proto___##_name(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +void __event_template_proto___##_name(void); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 1.2 of tracepoint event generation + * + * Unfolding the enums + */ +#include /* Reset all macros within TRACE_EVENT */ + +/* Enumeration entry (single value) */ +#undef ctf_enum_value +#define ctf_enum_value(_string, _value) \ + { \ + .start = { \ + .signedness = lttng_is_signed_type(__typeof__(_value)), \ + .value = lttng_is_signed_type(__typeof__(_value)) ? \ + (long long) (_value) : (_value), \ + }, \ + .end = { \ + .signedness = lttng_is_signed_type(__typeof__(_value)), \ + .value = lttng_is_signed_type(__typeof__(_value)) ? \ + (long long) (_value) : (_value), \ + }, \ + .string = (_string), \ + }, + +/* Enumeration entry (range) */ +#undef ctf_enum_range +#define ctf_enum_range(_string, _range_start, _range_end) \ + { \ + .start = { \ + .signedness = lttng_is_signed_type(__typeof__(_range_start)), \ + .value = lttng_is_signed_type(__typeof__(_range_start)) ? \ + (long long) (_range_start) : (_range_start), \ + }, \ + .end = { \ + .signedness = lttng_is_signed_type(__typeof__(_range_end)), \ + .value = lttng_is_signed_type(__typeof__(_range_end)) ? \ + (long long) (_range_end) : (_range_end), \ + }, \ + .string = (_string), \ + }, + +/* Enumeration entry (automatic value; follows the rules of CTF) */ +#undef ctf_enum_auto +#define ctf_enum_auto(_string) \ + { \ + .start = { \ + .signedness = -1, \ + .value = -1, \ + }, \ + .end = { \ + .signedness = -1, \ + .value = -1, \ + }, \ + .string = (_string), \ + .options = { \ + .is_auto = 1, \ + } \ + }, + +#undef TP_ENUM_VALUES +#define TP_ENUM_VALUES(...) \ + __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ + const struct lttng_enum_entry __enum_values__##_name[] = { \ + _values \ + }; + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 2 of the trace events. + * + * Create event field type metadata section. + * Each event produce an array of fields. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = __type_integer(_type, 0, 0, -1, _byte_order, _base, none),\ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_array, \ + .u = \ + { \ + .array = \ + { \ + .elem_type = __type_integer(_type, 0, 0, 0, _byte_order, _base, _encoding), \ + .length = _length, \ + } \ + } \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_array_bitfield, \ + .u = \ + { \ + .array = \ + { \ + .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none), \ + .length = (_length) * sizeof(_type) * CHAR_BIT, \ + .elem_alignment = lttng_alignof(_type), \ + } \ + } \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, _encoding, \ + _byte_order, _base, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_sequence, \ + .u = \ + { \ + .sequence = \ + { \ + .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 10, none), \ + .elem_type = __type_integer(_type, 0, 0, -1, _byte_order, _base, _encoding), \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_sequence_bitfield, \ + .u = \ + { \ + .sequence = \ + { \ + .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 10, none), \ + .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none), \ + .elem_alignment = lttng_alignof(_type), \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_string, \ + .u = \ + { \ + .basic = { .string = { .encoding = lttng_encode_UTF8 } } \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = { \ + .atype = atype_enum, \ + .u = { \ + .basic = { \ + .enumeration = { \ + .desc = &__enum_##_name, \ + .container_type = { \ + .size = sizeof(_type) * CHAR_BIT, \ + .alignment = lttng_alignof(_type) * CHAR_BIT, \ + .signedness = lttng_is_signed_type(_type), \ + .reverse_byte_order = 0, \ + .base = 10, \ + .encoding = lttng_encode_none, \ + }, \ + }, \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + }, + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) \ + { \ + .name = #_item, \ + .type = { _type }, \ + .nowrite = 0, \ + .user = 0, \ + }, + +#undef ctf_custom_type +#define ctf_custom_type(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ + static const struct lttng_event_field __event_fields___##_name[] = { \ + _fields \ + }; + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, PARAMS(_fields), _code_post) + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ + static const struct lttng_enum_desc __enum_##_name = { \ + .name = #_name, \ + .entries = __enum_values__##_name, \ + .nr_entries = ARRAY_SIZE(__enum_values__##_name), \ + }; + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 3 of the trace events. + * + * Create probe callback prototypes. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data, _proto); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 4 of the trace events. + * + * Create static inline function that calculates event size. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + __event_len += sizeof(_type); + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + __event_len += sizeof(_type) * (_length); + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_length_type)); \ + __event_len += sizeof(_length_type); \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + { \ + size_t __seqlen = (_src_length); \ + \ + if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ + goto error; \ + barrier(); /* reserve before use. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = __seqlen; \ + __event_len += sizeof(_type) * __seqlen; \ + } + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +/* + * ctf_user_string includes \0. If returns 0, it faulted, so we set size to + * 1 (\0 only). + */ +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ + goto error; \ + barrier(); /* reserve before use. */ \ + if (_user) { \ + __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ + max_t(size_t, lttng_strlen_user_inatomic(_src), 1); \ + } else { \ + __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ + strlen((_src) ? (_src) : __LTTNG_NULL_STRING) + 1; \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) \ + { \ + _code \ + } + +#undef ctf_custom_code +#define ctf_custom_code(...) __VA_ARGS__ + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline ssize_t __event_get_size__##_name(void *__tp_locvar, _proto) \ +{ \ + size_t __event_len = 0; \ + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_len; \ + \ +error: \ + __attribute__((unused)); \ + return -1; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline ssize_t __event_get_size__##_name(void *__tp_locvar) \ +{ \ + size_t __event_len = 0; \ + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_len; \ + \ +error: \ + __attribute__((unused)); \ + return -1; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + + +/* + * Stage 4.1 of tracepoint event generation. + * + * Create static inline function that layout the filter stack data. + * We make both write and nowrite data available to the filter. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include +#include + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ + if (lttng_is_signed_type(_type)) { \ + int64_t __ctf_tmp_int64; \ + switch (sizeof(_type)) { \ + case 1: \ + { \ + union { _type t; int8_t v; } __tmp = { (_type) (_src) }; \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 2: \ + { \ + union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab16s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 4: \ + { \ + union { _type t; int32_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab32s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 8: \ + { \ + union { _type t; int64_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab64s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + default: \ + BUG_ON(1); \ + }; \ + memcpy(__stack_data, &__ctf_tmp_int64, sizeof(int64_t)); \ + } else { \ + uint64_t __ctf_tmp_uint64; \ + switch (sizeof(_type)) { \ + case 1: \ + { \ + union { _type t; uint8_t v; } __tmp = { (_type) (_src) }; \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 2: \ + { \ + union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab16s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 4: \ + { \ + union { _type t; uint32_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab32s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 8: \ + { \ + union { _type t; uint64_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab64s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + default: \ + BUG_ON(1); \ + }; \ + memcpy(__stack_data, &__ctf_tmp_uint64, sizeof(uint64_t)); \ + } \ + __stack_data += sizeof(int64_t); + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ + _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ +{ \ + union { \ + char __array[sizeof(_user_src)]; \ + __typeof__(_user_src) __v; \ + } __tmp_fetch; \ + if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ + &(_user_src), sizeof(_user_src))) \ + memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ + _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ +} + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ + _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + unsigned long __ctf_tmp_ulong = (unsigned long) (_length); \ + const void *__ctf_tmp_ptr = (_src); \ + memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ + __stack_data += sizeof(unsigned long); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + unsigned long __ctf_tmp_ulong = (unsigned long) (_src_length); \ + const void *__ctf_tmp_ptr = (_src); \ + memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ + __stack_data += sizeof(unsigned long); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + { \ + const void *__ctf_tmp_ptr = \ + ((_src) ? (_src) : __LTTNG_NULL_STRING); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline \ +void __event_prepare_filter_stack__##_name(char *__stack_data, \ + void *__tp_locvar) \ +{ \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline \ +void __event_prepare_filter_stack__##_name(char *__stack_data, \ + void *__tp_locvar, _proto) \ +{ \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 5 of the trace events. + * + * Create static inline function that calculates event payload alignment. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_length_type)); \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) _code + +#undef ctf_custom_code +#define ctf_custom_code(...) \ + { \ + __VA_ARGS__ \ + } + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline size_t __event_get_align__##_name(void *__tp_locvar, _proto) \ +{ \ + size_t __event_align = 1; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_align; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline size_t __event_get_align__##_name(void *__tp_locvar) \ +{ \ + size_t __event_align = 1; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_align; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 6 of tracepoint event generation. + * + * Create the probe function. This function calls event size calculation + * and writes event data into the buffer. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ + { \ + _type __tmp = _src; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__tmp));\ + __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp));\ + } + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ + _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ +{ \ + union { \ + char __array[sizeof(_user_src)]; \ + __typeof__(_user_src) __v; \ + } __tmp_fetch; \ + if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ + &(_user_src), sizeof(_user_src))) \ + memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ + _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ +} + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ + _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ + } + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ + } +#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ +/* + * For big endian, we need to byteswap into little endian. + */ +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + { \ + size_t _i; \ + \ + for (_i = 0; _i < (_length); _i++) { \ + _type _tmp; \ + \ + if (_user) { \ + if (get_user(_tmp, (_type *) _src + _i)) \ + _tmp = 0; \ + } else { \ + _tmp = ((_type *) _src)[_i]; \ + } \ + switch (sizeof(_type)) { \ + case 1: \ + break; \ + case 2: \ + _tmp = cpu_to_le16(_tmp); \ + break; \ + case 4: \ + _tmp = cpu_to_le32(_tmp); \ + break; \ + case 8: \ + _tmp = cpu_to_le64(_tmp); \ + break; \ + default: \ + BUG_ON(1); \ + } \ + __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ + } \ + } +#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx]; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } +#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ +/* + * For big endian, we need to byteswap into little endian. + */ +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + { \ + size_t _i, _length; \ + \ + _length = __get_dynamic_len(dest); \ + for (_i = 0; _i < _length; _i++) { \ + _type _tmp; \ + \ + if (_user) { \ + if (get_user(_tmp, (_type *) _src + _i)) \ + _tmp = 0; \ + } else { \ + _tmp = ((_type *) _src)[_i]; \ + } \ + switch (sizeof(_type)) { \ + case 1: \ + break; \ + case 2: \ + _tmp = cpu_to_le16(_tmp); \ + break; \ + case 4: \ + _tmp = cpu_to_le32(_tmp); \ + break; \ + case 8: \ + _tmp = cpu_to_le64(_tmp); \ + break; \ + default: \ + BUG_ON(1); \ + } \ + __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ + } \ + } +#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + if (_user) { \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(*(_src))); \ + __chan->ops->event_strcpy_from_user(&__ctx, _src, \ + __get_dynamic_len(dest)); \ + } else { \ + const char *__ctf_tmp_string = \ + ((_src) ? (_src) : __LTTNG_NULL_STRING); \ + lib_ring_buffer_align_ctx(&__ctx, \ + lttng_alignof(*__ctf_tmp_string)); \ + __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string, \ + __get_dynamic_len(dest)); \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) _code + +#undef ctf_custom_code +#define ctf_custom_code(...) \ + { \ + __VA_ARGS__ \ + } + +/* Beware: this get len actually consumes the len value */ +#undef __get_dynamic_len +#define __get_dynamic_len(field) this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx++] + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef TP_code_pre +#define TP_code_pre(...) __VA_ARGS__ + +#undef TP_code_post +#define TP_code_post(...) __VA_ARGS__ + +/* + * For state dump, check that "session" argument (mandatory) matches the + * session this event belongs to. Ensures that we write state dump data only + * into the started session, not into all sessions. + */ +#ifdef TP_SESSION_CHECK +#define _TP_SESSION_CHECK(session, csession) (session == csession) +#else /* TP_SESSION_CHECK */ +#define _TP_SESSION_CHECK(session, csession) 1 +#endif /* TP_SESSION_CHECK */ + +/* + * Using twice size for filter stack data to hold size and pointer for + * each field (worse case). For integers, max size required is 64-bit. + * Same for double-precision floats. Those fit within + * 2*sizeof(unsigned long) for all supported architectures. + * Perform UNION (||) of filter runtime list. + */ +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data, _proto) \ +{ \ + struct probe_local_vars { _locvar }; \ + struct lttng_event *__event = __data; \ + struct lttng_probe_ctx __lttng_probe_ctx = { \ + .event = __event, \ + .interruptible = !irqs_disabled(), \ + }; \ + struct lttng_channel *__chan = __event->chan; \ + struct lttng_session *__session = __chan->session; \ + struct lib_ring_buffer_ctx __ctx; \ + ssize_t __event_len; \ + size_t __event_align; \ + size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ + union { \ + size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ + char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ + } __stackvar; \ + int __ret; \ + struct probe_local_vars __tp_locvar; \ + struct probe_local_vars *tp_locvar __attribute__((unused)) = \ + &__tp_locvar; \ + struct lttng_pid_tracker *__lpf; \ + \ + if (!_TP_SESSION_CHECK(session, __session)) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__session->active))) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__chan->enabled))) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__event->enabled))) \ + return; \ + __lpf = lttng_rcu_dereference(__session->pid_tracker); \ + if (__lpf && likely(!lttng_pid_tracker_lookup(__lpf, current->tgid))) \ + return; \ + __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ + __dynamic_len_idx = __orig_dynamic_len_offset; \ + _code_pre \ + if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ + struct lttng_bytecode_runtime *bc_runtime; \ + int __filter_record = __event->has_enablers_without_bytecode; \ + \ + __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ + tp_locvar, _args); \ + lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ + if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ + __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) \ + __filter_record = 1; \ + } \ + if (likely(!__filter_record)) \ + goto __post; \ + } \ + __event_len = __event_get_size__##_name(tp_locvar, _args); \ + if (unlikely(__event_len < 0)) { \ + lib_ring_buffer_lost_event_too_big(__chan->chan); \ + goto __post; \ + } \ + __event_align = __event_get_align__##_name(tp_locvar, _args); \ + lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ + __event_align, -1); \ + __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ + if (__ret < 0) \ + goto __post; \ + _fields \ + __chan->ops->event_commit(&__ctx); \ +__post: \ + _code_post \ + barrier(); /* use before un-reserve. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ + return; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data) \ +{ \ + struct probe_local_vars { _locvar }; \ + struct lttng_event *__event = __data; \ + struct lttng_probe_ctx __lttng_probe_ctx = { \ + .event = __event, \ + .interruptible = !irqs_disabled(), \ + }; \ + struct lttng_channel *__chan = __event->chan; \ + struct lttng_session *__session = __chan->session; \ + struct lib_ring_buffer_ctx __ctx; \ + ssize_t __event_len; \ + size_t __event_align; \ + size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ + union { \ + size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ + char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ + } __stackvar; \ + int __ret; \ + struct probe_local_vars __tp_locvar; \ + struct probe_local_vars *tp_locvar __attribute__((unused)) = \ + &__tp_locvar; \ + struct lttng_pid_tracker *__lpf; \ + \ + if (!_TP_SESSION_CHECK(session, __session)) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__session->active))) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__chan->enabled))) \ + return; \ + if (unlikely(!LTTNG_READ_ONCE(__event->enabled))) \ + return; \ + __lpf = lttng_rcu_dereference(__session->pid_tracker); \ + if (__lpf && likely(!lttng_pid_tracker_lookup(__lpf, current->tgid))) \ + return; \ + __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ + __dynamic_len_idx = __orig_dynamic_len_offset; \ + _code_pre \ + if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ + struct lttng_bytecode_runtime *bc_runtime; \ + int __filter_record = __event->has_enablers_without_bytecode; \ + \ + __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ + tp_locvar); \ + lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ + if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ + __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) \ + __filter_record = 1; \ + } \ + if (likely(!__filter_record)) \ + goto __post; \ + } \ + __event_len = __event_get_size__##_name(tp_locvar); \ + if (unlikely(__event_len < 0)) { \ + lib_ring_buffer_lost_event_too_big(__chan->chan); \ + goto __post; \ + } \ + __event_align = __event_get_align__##_name(tp_locvar); \ + lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ + __event_align, -1); \ + __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ + if (__ret < 0) \ + goto __post; \ + _fields \ + __chan->ops->event_commit(&__ctx); \ +__post: \ + _code_post \ + barrier(); /* use before un-reserve. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ + return; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +#undef __get_dynamic_len + +/* + * Stage 7 of the trace events. + * + * Create event descriptions. + */ + +/* Named field types must be defined in lttng-types.h */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#ifndef TP_PROBE_CB +#define TP_PROBE_CB(_template) &__event_probe__##_template +#endif + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +static const struct lttng_event_desc __event_desc___##_map = { \ + .fields = __event_fields___##_template, \ + .name = #_map, \ + .kname = #_name, \ + .probe_callback = (void *) TP_PROBE_CB(_template), \ + .nr_fields = ARRAY_SIZE(__event_fields___##_template), \ + .owner = THIS_MODULE, \ +}; + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 8 of the trace events. + * + * Create an array of event description pointers. + */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ + &__event_desc___##_map, + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) + +static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = { +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) +}; + +#undef TP_ID1 +#undef TP_ID + +/* + * Stage 9 of the trace events. + * + * Create a toplevel descriptor for the whole probe. + */ + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) + +/* non-const because list head will be modified when registered. */ +static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { + .provider = __stringify(TRACE_SYSTEM), + .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM), + .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)), + .head = { NULL, NULL }, + .lazy_init_head = { NULL, NULL }, + .lazy = 0, +}; + +#undef TP_ID1 +#undef TP_ID + +/* + * Stage 10 of the trace events. + * + * Register/unregister probes at module load/unload. + */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) +#define module_init_eval1(_token, _system) module_init(_token##_system) +#define module_init_eval(_token, _system) module_init_eval1(_token, _system) +#define module_exit_eval1(_token, _system) module_exit(_token##_system) +#define module_exit_eval(_token, _system) module_exit_eval1(_token, _system) + +#ifndef TP_MODULE_NOINIT +static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void) +{ + wrapper_vmalloc_sync_mappings(); + return lttng_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM)); +} + +static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void) +{ + lttng_probe_unregister(&TP_ID(__probe_desc___, TRACE_SYSTEM)); +} + +#ifndef TP_MODULE_NOAUTOLOAD +module_init_eval(__lttng_events_init__, TRACE_SYSTEM); +module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM); +#endif + +#endif + +#undef module_init_eval +#undef module_exit_eval +#undef TP_ID1 +#undef TP_ID + +#undef TP_PROTO +#undef TP_ARGS diff --git a/ltt/lttng-2.11.0/probes/lttng-tracepoint-event.h b/ltt/lttng-2.11.0/probes/lttng-tracepoint-event.h new file mode 100644 index 000000000000..537f577ba159 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-tracepoint-event.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-tracepoint-event.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef LTTNG_TRACEPOINT_EVENT_H +#define LTTNG_TRACEPOINT_EVENT_H + +#include + +/* + * If code defines LTTNG_INSTRUMENTATION before including the instrumentation + * header, generate the instrumentation static inlines. Else, it means + * we are a probe for the Linux kernel, and it is the probe responsibility + * to have already included the Linux kernel instrumentation header. + */ +#ifdef LTTNG_INSTRUMENTATION +#define _LTTNG_INSTRUMENTATION(...) __VA_ARGS__ +#else +#define _LTTNG_INSTRUMENTATION(...) +#endif + +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) + +#define LTTNG_TRACEPOINT_EVENT_CLASS(name, proto, args, fields) +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) + +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) + +#define LTTNG_TRACEPOINT_ENUM(_name, _values) + +#endif /* LTTNG_TRACEPOINT_EVENT_H */ diff --git a/ltt/lttng-2.11.0/probes/lttng-types.h b/ltt/lttng-2.11.0/probes/lttng-types.h new file mode 100644 index 000000000000..dcab602f0952 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-types.h @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * probes/lttng-types.h + * + * LTTng types. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* + * Protect against multiple inclusion of structure declarations, but run the + * stages below each time. + */ +#ifndef _LTTNG_PROBES_LTTNG_TYPES_H +#define _LTTNG_PROBES_LTTNG_TYPES_H + +#include +#include +#include +#include +#include + +#endif /* _LTTNG_PROBES_LTTNG_TYPES_H */ + +/* Export enumerations */ + +#ifdef STAGE_EXPORT_ENUMS + +#undef TRACE_EVENT_TYPE +#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) + +#undef TRACE_EVENT_ENUM +#define TRACE_EVENT_ENUM(_name, _entries...) \ + const struct lttng_enum_entry __trace_event_enum_##_name[] = { \ + PARAMS(_entries) \ + }; + +/* Enumeration entry (single value) */ +#undef V +#define V(_string) { _string, _string, #_string} + +/* Enumeration entry (range) */ +#undef R +#define R(_string, _range_start, _range_end) \ + { _range_start, _range_end, #_string } + +#endif /* STAGE_EXPORT_ENUMS */ + + +/* Export named types */ + +#ifdef STAGE_EXPORT_TYPES + +#undef TRACE_EVENT_TYPE___enum +#define TRACE_EVENT_TYPE___enum(_name, _container_type) \ + { \ + .name = #_name, \ + .container_type = __type_integer(_container_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ + .entries = __trace_event_enum_##_name, \ + .len = ARRAY_SIZE(__trace_event_enum_##_name), \ + }, + +/* Local declaration */ +#undef TRACE_EVENT_TYPE +#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) \ + TRACE_EVENT_TYPE___##_abstract_type(_name, args) + +#undef TRACE_EVENT_ENUM +#define TRACE_EVENT_ENUM(_name, _entries...) + +#endif /* STAGE_EXPORT_TYPES */ diff --git a/ltt/lttng-2.11.0/probes/lttng-uprobes.c b/ltt/lttng-2.11.0/probes/lttng-uprobes.c new file mode 100644 index 000000000000..bda1d9b46cbc --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng-uprobes.c @@ -0,0 +1,250 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * probes/lttng-uprobes.c + * + * LTTng uprobes integration module. + * + * Copyright (C) 2013 Yannick Brosseau + * Copyright (C) 2009-2012 Mathieu Desnoyers + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static +int lttng_uprobes_handler_pre(struct uprobe_consumer *uc, struct pt_regs *regs) +{ + struct lttng_uprobe_handler *uprobe_handler = + container_of(uc, struct lttng_uprobe_handler, up_consumer); + struct lttng_event *event = uprobe_handler->event; + struct lttng_probe_ctx lttng_probe_ctx = { + .event = event, + .interruptible = !lttng_regs_irqs_disabled(regs), + }; + struct lttng_channel *chan = event->chan; + struct lib_ring_buffer_ctx ctx; + int ret; + + struct { + unsigned long ip; + } payload; + + if (unlikely(!LTTNG_READ_ONCE(chan->session->active))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(chan->enabled))) + return 0; + if (unlikely(!LTTNG_READ_ONCE(event->enabled))) + return 0; + + lib_ring_buffer_ctx_init(&ctx, chan->chan, <tng_probe_ctx, + sizeof(payload), lttng_alignof(payload), -1); + + ret = chan->ops->event_reserve(&ctx, event->id); + if (ret < 0) + return 0; + + /* Event payload. */ + payload.ip = (unsigned long)instruction_pointer(regs); + + lib_ring_buffer_align_ctx(&ctx, lttng_alignof(payload)); + chan->ops->event_write(&ctx, &payload, sizeof(payload)); + chan->ops->event_commit(&ctx); + return 0; +} + +/* + * Create event description. + */ +static +int lttng_create_uprobe_event(const char *name, struct lttng_event *event) +{ + struct lttng_event_desc *desc; + struct lttng_event_field *fields; + int ret; + + desc = kzalloc(sizeof(*event->desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; + desc->name = kstrdup(name, GFP_KERNEL); + if (!desc->name) { + ret = -ENOMEM; + goto error_str; + } + + desc->nr_fields = 1; + desc->fields = fields = + kzalloc(1 * sizeof(struct lttng_event_field), GFP_KERNEL); + + if (!desc->fields) { + ret = -ENOMEM; + goto error_fields; + } + fields[0].name = "ip"; + fields[0].type.atype = atype_integer; + fields[0].type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT; + fields[0].type.u.basic.integer.alignment = lttng_alignof(unsigned long) * CHAR_BIT; + fields[0].type.u.basic.integer.signedness = lttng_is_signed_type(unsigned long); + fields[0].type.u.basic.integer.reverse_byte_order = 0; + fields[0].type.u.basic.integer.base = 16; + fields[0].type.u.basic.integer.encoding = lttng_encode_none; + + desc->owner = THIS_MODULE; + event->desc = desc; + + return 0; + +error_fields: + kfree(desc->name); +error_str: + kfree(desc); + return ret; +} + +/* + * Returns the inode struct from the current task and an fd. The inode is + * grabbed by this function and must be put once we are done with it using + * iput(). + */ +static struct inode *get_inode_from_fd(int fd) +{ + struct file *file; + struct inode *inode; + + rcu_read_lock(); + /* + * Returns the file backing the given fd. Needs to be done inside an RCU + * critical section. + */ + file = fcheck(fd); + if (file == NULL) { + printk(KERN_WARNING "Cannot access file backing the fd(%d)\n", fd); + inode = NULL; + goto error; + } + + /* Grab a reference on the inode. */ + inode = igrab(file->f_path.dentry->d_inode); + if (inode == NULL) + printk(KERN_WARNING "Cannot grab a reference on the inode.\n"); +error: + rcu_read_unlock(); + return inode; +} + +int lttng_uprobes_add_callsite(struct lttng_event *event, + struct lttng_kernel_event_callsite __user *callsite) +{ + int ret = 0; + struct lttng_uprobe_handler *uprobe_handler; + + if (!event) { + ret = -EINVAL; + goto end; + } + + uprobe_handler = kzalloc(sizeof(struct lttng_uprobe_handler), GFP_KERNEL); + if (!uprobe_handler) { + printk(KERN_WARNING "Error allocating uprobe_uprobe_handlers"); + ret = -ENOMEM; + goto end; + } + + /* Ensure the memory we just allocated don't trigger page faults. */ + wrapper_vmalloc_sync_mappings(); + + uprobe_handler->event = event; + uprobe_handler->up_consumer.handler = lttng_uprobes_handler_pre; + + ret = copy_from_user(&uprobe_handler->offset, &callsite->u.uprobe.offset, sizeof(uint64_t)); + if (ret) { + goto register_error; + } + + ret = wrapper_uprobe_register(event->u.uprobe.inode, + uprobe_handler->offset, &uprobe_handler->up_consumer); + if (ret) { + printk(KERN_WARNING "Error registering probe on inode %lu " + "and offset 0x%llx\n", event->u.uprobe.inode->i_ino, + uprobe_handler->offset); + ret = -1; + goto register_error; + } + + list_add(&uprobe_handler->node, &event->u.uprobe.head); + + return ret; + +register_error: + kfree(uprobe_handler); +end: + return ret; +} +EXPORT_SYMBOL_GPL(lttng_uprobes_add_callsite); + +int lttng_uprobes_register(const char *name, int fd, struct lttng_event *event) +{ + int ret = 0; + struct inode *inode; + + ret = lttng_create_uprobe_event(name, event); + if (ret) + goto error; + + inode = get_inode_from_fd(fd); + if (!inode) { + printk(KERN_WARNING "Cannot get inode from fd\n"); + ret = -EBADF; + goto inode_error; + } + event->u.uprobe.inode = inode; + INIT_LIST_HEAD(&event->u.uprobe.head); + + return 0; + +inode_error: + kfree(event->desc->name); + kfree(event->desc); +error: + return ret; +} +EXPORT_SYMBOL_GPL(lttng_uprobes_register); + +void lttng_uprobes_unregister(struct lttng_event *event) +{ + struct lttng_uprobe_handler *iter, *tmp; + + /* + * Iterate over the list of handler, remove each handler from the list + * and free the struct. + */ + list_for_each_entry_safe(iter, tmp, &event->u.uprobe.head, node) { + wrapper_uprobe_unregister(event->u.uprobe.inode, iter->offset, + &iter->up_consumer); + list_del(&iter->node); + kfree(iter); + } +} +EXPORT_SYMBOL_GPL(lttng_uprobes_unregister); + +void lttng_uprobes_destroy_private(struct lttng_event *event) +{ + iput(event->u.uprobe.inode); + kfree(event->desc->name); + kfree(event->desc); +} +EXPORT_SYMBOL_GPL(lttng_uprobes_destroy_private); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Yannick Brosseau"); +MODULE_DESCRIPTION("Linux Trace Toolkit Uprobes Support"); diff --git a/ltt/lttng-2.11.0/probes/lttng.c b/ltt/lttng-2.11.0/probes/lttng.c new file mode 100644 index 000000000000..7ddaa69f0028 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng.c @@ -0,0 +1,161 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng.c + * + * LTTng logger ABI + * + * Copyright (C) 2008-2014 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TP_MODULE_NOAUTOLOAD +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module +#define TRACE_INCLUDE_FILE lttng +#define LTTNG_INSTRUMENTATION + +#include + +/* Events written through logger are truncated at 1024 bytes */ +#define LTTNG_LOGGER_COUNT_MAX 1024 +#define LTTNG_LOGGER_FILE "lttng-logger" + +LTTNG_DEFINE_TRACE(lttng_logger, + PARAMS(const char __user *text, size_t len), + PARAMS(text, len) +); + +static struct proc_dir_entry *lttng_logger_dentry; + +/** + * lttng_logger_write - write a userspace string into the trace system + * @file: file pointer + * @user_buf: user string + * @count: length to copy + * @ppos: file position + * + * Copy a userspace string into a trace event named "lttng:logger". + * Copies at most @count bytes into the event "msg" dynamic array. + * Truncates the count at LTTNG_LOGGER_COUNT_MAX. Returns the number of + * bytes copied from the source. + * Return -1 on error, with EFAULT errno. + */ +static +ssize_t lttng_logger_write(struct file *file, const char __user *user_buf, + size_t count, loff_t *ppos) +{ + int nr_pages = 1, i; + unsigned long uaddr = (unsigned long) user_buf; + struct page *pages[2]; + ssize_t written; + int ret; + + /* Truncate count */ + if (unlikely(count > LTTNG_LOGGER_COUNT_MAX)) + count = LTTNG_LOGGER_COUNT_MAX; + + /* How many pages are we dealing with ? */ + if (unlikely((uaddr & PAGE_MASK) != ((uaddr + count) & PAGE_MASK))) + nr_pages = 2; + + /* Pin userspace pages */ + ret = get_user_pages_fast(uaddr, nr_pages, 0, pages); + if (unlikely(ret < nr_pages)) { + if (ret > 0) { + BUG_ON(ret != 1); + put_page(pages[0]); + } + written = -EFAULT; + goto end; + } + + /* Trace the event */ + trace_lttng_logger(user_buf, count); + written = count; + *ppos += written; + + for (i = 0; i < nr_pages; i++) + put_page(pages[i]); +end: + return written; +} + +static const struct file_operations lttng_logger_operations = { + .write = lttng_logger_write, +}; + +/* + * Linux 5.6 introduced a separate proc_ops struct for /proc operations + * to decouple it from the vfs. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +static const struct proc_ops lttng_logger_proc_ops = { + .proc_write = lttng_logger_write, +}; +#else +#define lttng_logger_proc_ops lttng_logger_operations +#endif + +static struct miscdevice logger_dev = { + .minor = MISC_DYNAMIC_MINOR, + .name = "lttng-logger", + .mode = 0666, + .fops = <tng_logger_operations +}; + +int __init lttng_logger_init(void) +{ + int ret = 0; + + wrapper_vmalloc_sync_mappings(); + + /* /dev/lttng-logger */ + ret = misc_register(&logger_dev); + if (ret) { + printk(KERN_ERR "Error creating LTTng logger device\n"); + goto error; + } + + /* /proc/lttng-logger */ + lttng_logger_dentry = proc_create_data(LTTNG_LOGGER_FILE, + S_IRUGO | S_IWUGO, NULL, + <tng_logger_proc_ops, NULL); + if (!lttng_logger_dentry) { + printk(KERN_ERR "Error creating LTTng logger proc file\n"); + ret = -ENOMEM; + goto error_proc; + } + + /* Init */ + ret = __lttng_events_init__lttng(); + if (ret) + goto error_events; + return ret; + +error_events: + remove_proc_entry("lttng-logger", NULL); +error_proc: + misc_deregister(&logger_dev); +error: + return ret; +} + +void lttng_logger_exit(void) +{ + __lttng_events_exit__lttng(); + if (lttng_logger_dentry) + remove_proc_entry("lttng-logger", NULL); + misc_deregister(&logger_dev); +} diff --git a/ltt/lttng-2.11.0/probes/lttng.h b/ltt/lttng-2.11.0/probes/lttng.h new file mode 100644 index 000000000000..1dfe7bcbefa8 --- /dev/null +++ b/ltt/lttng-2.11.0/probes/lttng.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_PROBES_LTTNG_H +#define _LTTNG_PROBES_LTTNG_H + +#undef PARAMS +#define PARAMS(args...) args + +#endif /* _LTTNG_PROBES_LTTNG_H */ diff --git a/ltt/lttng-2.11.0/scripts/abi-debian-version.sh b/ltt/lttng-2.11.0/scripts/abi-debian-version.sh new file mode 100755 index 000000000000..ee8dbd80ec20 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/abi-debian-version.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the kernel headers. +KPATH="$1" + +if [ ! -f "${KPATH}/include/generated/package.h" ]; then + echo 0 + exit 0 +fi + +# Debian snippet courtesy of Ben Hutchings + +# Assuming KPATH is the target kernel headers directory +DEB_PACKAGE_VERSION=$(sed -rn 's/^#define LINUX_PACKAGE_ID " Debian (.*)"/\1/p' "${KPATH}/include/generated/package.h") + +# Ignore backports part +DEB_PACKAGE_VERSION=$(echo "${DEB_PACKAGE_VERSION}" | sed -r 's/~(bpo|deb).*//') + +# ckt (Canonical Kernel Team) kernels were used for a while during the jessie +# cycle, their versionning is a bit different. They track the upstream vanilla +# stable updates but they don't update the minor version number and instead add +# an additionnal -cktX. They were all 3.16.7-cktX and after a while the version +# switched back to upstream style at 3.16.36. + +# Get -ckt update number, if present +KERNEL_CKT_UPDATE=$(echo "${DEB_PACKAGE_VERSION}" | sed -rn 's/^[0-9]+\.[0-9]+\.[0-9]+-ckt([0-9]+).*/\1/p') +test -n "${KERNEL_CKT_UPDATE}" || KERNEL_CKT_UPDATE=0 + +# Get package revision +DEB_PACKAGE_REVISION=$(echo "${DEB_PACKAGE_VERSION}" | sed -r 's/.*-([^-]+)$/\1/') +# Get non-sec update number +DEB_PACKAGE_REVISION_BASE=$(echo "${DEB_PACKAGE_REVISION}" | sed -r 's/^([0-9]+).*/\1/') +# Get security update number, if present +DEB_PACKAGE_REVISION_SECURITY=$(echo "${DEB_PACKAGE_REVISION}" | sed -rn 's/.*\+(squeeze|deb[0-9]+)+u([0-9]+)$/\2/p') +test -n "${DEB_PACKAGE_REVISION_SECURITY}" || DEB_PACKAGE_REVISION_SECURITY=0 +# Combine all update numbers into one +DEB_API_VERSION=$((KERNEL_CKT_UPDATE * 10000 + DEB_PACKAGE_REVISION_BASE * 100 + DEB_PACKAGE_REVISION_SECURITY)) + +echo ${DEB_API_VERSION} diff --git a/ltt/lttng-2.11.0/scripts/abi-fedora-version.sh b/ltt/lttng-2.11.0/scripts/abi-fedora-version.sh new file mode 100755 index 000000000000..41534821409b --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/abi-fedora-version.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the kernel headers. +KPATH="$1" + +if [ ! -f "${KPATH}/include/generated/utsrelease.h" ]; then + echo 0 + exit 0 +fi + +# Assuming KPATH is the target kernel headers directory +UTS_RELEASE=$(sed -rn 's/^#define UTS_RELEASE "(.*)"/\1/p' "${KPATH}/include/generated/utsrelease.h") +FEDORA_VERSION=$(echo "${UTS_RELEASE}" | sed -n 's/.*\.fc\([0-9]*\)\..*/\1/p') + +if [ "x${FEDORA_VERSION}" = "x" ]; then + echo 0 + exit 0 +fi + +FEDORA_REVISION_VERSION=$(echo "${UTS_RELEASE}" | sed -n 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\-\([0-9]*\).*/\4/p') +echo "${FEDORA_REVISION_VERSION}" diff --git a/ltt/lttng-2.11.0/scripts/abi-rhel-version.sh b/ltt/lttng-2.11.0/scripts/abi-rhel-version.sh new file mode 100755 index 000000000000..0296d8c8cdcb --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/abi-rhel-version.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the kernel headers. +KPATH="$1" + +if [ ! -f "${KPATH}/include/generated/uapi/linux/version.h" ]; then + echo 0 + exit 0 +fi + +# Assuming KPATH is the target kernel headers directory +RHEL_RELEASE=$(sed -rn 's/^#define RHEL_RELEASE "(.*)"/\1/p' "${KPATH}/include/generated/uapi/linux/version.h") + +RHEL_RELEASE_MAJOR=$(echo "${RHEL_RELEASE}" | sed -r 's/^([0-9]+)\.([0-9]+)\.([0-9]+)/\1/') +RHEL_RELEASE_MINOR=$(echo "${RHEL_RELEASE}" | sed -r 's/^([0-9]+)\.([0-9]+)\.([0-9]+)/\2/') +RHEL_RELEASE_PATCH=$(echo "${RHEL_RELEASE}" | sed -r 's/^([0-9]+)\.([0-9]+)\.([0-9]+)/\3/') + +# Combine all update numbers into one +RHEL_API_VERSION=$((RHEL_RELEASE_MAJOR * 10000 + RHEL_RELEASE_MINOR * 100 + RHEL_RELEASE_PATCH)) + +echo ${RHEL_API_VERSION} diff --git a/ltt/lttng-2.11.0/scripts/abi-sle-version.sh b/ltt/lttng-2.11.0/scripts/abi-sle-version.sh new file mode 100755 index 000000000000..aafed7c14c31 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/abi-sle-version.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the kernel headers. +KPATH=$1 + +if [ ! -f "${KPATH}/include/generated/autoconf.h" ]; then + echo 0 + exit 0 +fi + +# Check if we are building against a Suse kernel +SUSE_KERNEL="$(sed -rn 's/^#define CONFIG_SUSE_KERNEL (.*)/\1/p' "${KPATH}/include/generated/autoconf.h")" + +if [ "$SUSE_KERNEL" != "1" ]; then + echo 0 + exit 0 +fi + + +if [ ! -f "${KPATH}/include/generated/utsrelease.h" ]; then + echo 0 + exit 0 +fi + +SLE_RELEASE="$(sed -rn 's/^#define UTS_RELEASE "(.*)-([0-9a-zA-Z\.]+)-(.*)"/\2/p' "${KPATH}/include/generated/utsrelease.h")" + +SLE_RELEASE_MAJOR="$(echo "${SLE_RELEASE}" | sed -rn 's/^([0-9]+)(.*)$/\1/p')" +SLE_RELEASE_MINOR="$(echo "${SLE_RELEASE}" | sed -rn 's/^([0-9]+)\.([0-9]+)(.*)$/\2/p')" +SLE_RELEASE_PATCH="$(echo "${SLE_RELEASE}" | sed -rn 's/^([0-9]+)\.([0-9]+)\.([0-9]+)(.*)$/\3/p')" + +# Minor and patch versions can be omitted +if [ "x$SLE_RELEASE_MINOR" = "x" ]; then + SLE_RELEASE_MINOR=0 +fi +if [ "x$SLE_RELEASE_PATCH" = "x" ]; then + SLE_RELEASE_PATCH=0 +fi + +# Combine all update numbers into one +SLE_API_VERSION="$((SLE_RELEASE_MAJOR * 10000 + SLE_RELEASE_MINOR * 100 + SLE_RELEASE_PATCH))" + +echo ${SLE_API_VERSION} diff --git a/ltt/lttng-2.11.0/scripts/built-in.sh b/ltt/lttng-2.11.0/scripts/built-in.sh new file mode 100755 index 000000000000..5e57e9341c03 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/built-in.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +set -e + +usage() { + echo "usage: $0 " >&2 + exit 1 +} + +[ "$#" -eq 1 ] || usage +KERNEL_DIR="$(readlink --canonicalize-existing "$1")" + +# Symlink the lttng-modules directory in the kernel source +ln -sf "$(pwd)" "${KERNEL_DIR}/lttng" + +# Graft ourself to the kernel build system +echo 'source "lttng/Kconfig"' >> "${KERNEL_DIR}/Kconfig" +sed -i 's#+= kernel/#+= kernel/ lttng/#' "${KERNEL_DIR}/Makefile" + +echo >&2 +echo " $0: done." >&2 +echo " $0: now you can build the kernel with LTTng support." >&2 +echo " $0: make sure you enable it (CONFIG_LTTNG) before building." >&2 +echo >&2 diff --git a/ltt/lttng-2.11.0/scripts/extra-version-git.sh b/ltt/lttng-2.11.0/scripts/extra-version-git.sh new file mode 100755 index 000000000000..0f1a98577149 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/extra-version-git.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the lttng modules sources. +TOP_LTTNG_MODULES_DIR="$1" + +GIT_VERSION="0" + +if test -x "$(which git 2>&1;true)" && test -r "${TOP_LTTNG_MODULES_DIR}/.git"; then + GIT_VERSION_STR="$(cd "${TOP_LTTNG_MODULES_DIR}" && git describe --tags --dirty 2> /dev/null)" + GIT_CURRENT_TAG="$(cd "${TOP_LTTNG_MODULES_DIR}" && git describe --tags --exact-match --match="v[0-9]*" HEAD 2> /dev/null)" + + GIT_VERSION="${GIT_VERSION_STR}" + + if ! echo "${GIT_VERSION_STR}" | grep -- "-dirty" >/dev/null && test "x$GIT_CURRENT_TAG" != "x"; then + GIT_VERSION="0" + fi +fi + +echo "${GIT_VERSION}" diff --git a/ltt/lttng-2.11.0/scripts/extra-version-name.sh b/ltt/lttng-2.11.0/scripts/extra-version-name.sh new file mode 100755 index 000000000000..f7042567cfe4 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/extra-version-name.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the lttng modules sources. +TOP_LTTNG_MODULES_DIR="$1" + +EXTRA_VERSION_NAME="$(sed -n '1p' "${TOP_LTTNG_MODULES_DIR}/extra_version/name" 2> /dev/null)" + +if [ "x${EXTRA_VERSION_NAME}" != "x" ]; then + echo "${EXTRA_VERSION_NAME}" +else + echo "0" +fi diff --git a/ltt/lttng-2.11.0/scripts/extra-version-patches.sh b/ltt/lttng-2.11.0/scripts/extra-version-patches.sh new file mode 100755 index 000000000000..4e8a1b52a857 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/extra-version-patches.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the lttng modules sources. +TOP_LTTNG_MODULES_DIR="$1" + +if ! test -d "${TOP_LTTNG_MODULES_DIR}"; then + exit 1 +fi + +TMPFILE="$(mktemp)" + +find "${TOP_LTTNG_MODULES_DIR}/extra_version/patches/" -maxdepth 1 ! -name 'README' -type f -printf '%f\n' | sort -r \ + | sed -E 's/[^a-zA-Z0-9 \.]/-/g ; s/(.*)/MODULE_INFO(extra_version_patch, "\1");/g' >"${TMPFILE}" 2>/dev/null + +if test ! -f "${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i" || \ + test x"$(cat "${TMPFILE}")" != x"$(cat "${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i")"; then + mv "${TMPFILE}" "${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i" +fi + +rm -f "${TMPFILE}" diff --git a/ltt/lttng-2.11.0/scripts/maintainer/do-release.sh b/ltt/lttng-2.11.0/scripts/maintainer/do-release.sh new file mode 100755 index 000000000000..5e94e136b904 --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/maintainer/do-release.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +set -eu +set -o pipefail + +# invoke with do-release 2.N.M, or 2.N.M-rcXX + +# Default maintainer values +SRCDIR="${HOME}/git/lttng-modules" +# The output files are created in ${HOME}/stable/ +OUTPUTDIR="${HOME}/stable" +SIGN="yes" +VERBOSE="" + +usage() { + echo "Usage: do-release.sh [OPTION]... RELEASE" + echo + echo "Mandatory arguments to long options are mandatory for short options too." + echo " -s, --srcdir DIR source directory" + echo " -o, --outputdir DIR output directory, must exist" + echo " -n, --no-sign don't GPG sign the output archive" + echo " -v, --verbose verbose command output" +} + +POS_ARGS=() +while [[ $# -gt 0 ]] +do + arg="$1" + + case $arg in + -n|--no-sign) + SIGN="no" + shift 1 + ;; + + -s|--srcdir) + SRCDIR="$2" + shift 2 + ;; + + -o|--outputdir) + OUTPUTDIR="$2" + shift 2 + ;; + + -v|--verbose) + VERBOSE="-v" + shift 1 + ;; + + # Catch unknown arguments + -*) + usage + exit 1 + ;; + + *) + POS_ARGS+=("$1") + shift + ;; + esac +done +set -- "${POS_ARGS[@]}" + +REL=${1:-} + +if [ x"${REL}" = x"" ]; then + usage + exit 1; +fi + +echo "Doing LTTng modules release ${REL}" +echo " Source dir: ${SRCDIR}" +echo " Output dir: ${OUTPUTDIR}" +echo " GPG sign: ${SIGN}" + +# Make sure the output directory exists +if [ ! -d "${OUTPUTDIR}" ]; then + echo "Output directory '${OUTPUTDIR}' doesn't exist." + exit 1 +fi + +# Make sure the source directory is a git repository +if [ ! -r "${SRCDIR}/.git/config" ]; then + echo "Source directory '${SRCDIR}' isn't a git repository." + exit 1 +fi + +# Set the git repo directory for all further git commands +export GIT_DIR="${SRCDIR}/.git/" + +# Check if the release tag exists +if ! git rev-parse "refs/tags/v${REL}" >/dev/null 2>&1; then + echo "Release tag 'v${REL}' doesn't exist." + exit 1 +fi + +# Generate the compressed tar archive, the git attributes from the tag will be used. +git archive $VERBOSE --format=tar --prefix="lttng-modules-${REL}/" "v${REL}" | bzip2 > "${OUTPUTDIR}/lttng-modules-${REL}.tar.bz2" + +pushd "${OUTPUTDIR}" >/dev/null +# Generate the hashes +md5sum "lttng-modules-${REL}.tar.bz2" > "lttng-modules-${REL}.tar.bz2.md5" +sha256sum "lttng-modules-${REL}.tar.bz2" > "lttng-modules-${REL}.tar.bz2.sha256" + +if [ "x${SIGN}" = "xyes" ]; then + # Sign with the default key + gpg --armor -b "lttng-modules-${REL}.tar.bz2" +fi +popd >/dev/null diff --git a/ltt/lttng-2.11.0/scripts/rt-patch-version.sh b/ltt/lttng-2.11.0/scripts/rt-patch-version.sh new file mode 100755 index 000000000000..270496570b4c --- /dev/null +++ b/ltt/lttng-2.11.0/scripts/rt-patch-version.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + +# First argument is the path to the kernel headers. +KPATH="$1" + +VERSIONFILE="" + +if [ -f "${KPATH}/localversion-rt" ]; then + VERSIONFILE="${KPATH}/localversion-rt" + +elif [ -f "${KPATH}/source/localversion-rt" ]; then + VERSIONFILE="${KPATH}/source/localversion-rt" +else + echo 0 + exit 0 +fi + +RT_PATCH_VERSION=$(sed -rn 's/^-rt([0-9]+)$/\1/p' "${VERSIONFILE}") + +if [ "x${RT_PATCH_VERSION}" = "x" ]; then + echo 0 + exit 0 +fi + +echo "${RT_PATCH_VERSION}" diff --git a/ltt/lttng-2.11.0/tests/Kbuild b/ltt/lttng-2.11.0/tests/Kbuild new file mode 100644 index 000000000000..c9391a03b840 --- /dev/null +++ b/ltt/lttng-2.11.0/tests/Kbuild @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/.. + +include $(TOP_LTTNG_MODULES_DIR)/Kbuild.common + +ccflags-y += -I$(TOP_LTTNG_MODULES_DIR) + +obj-$(CONFIG_LTTNG) += lttng-test.o +lttng-test-objs := probes/lttng-test.o + +obj-$(CONFIG_LTTNG_CLOCK_PLUGIN_TEST) += lttng-clock-plugin-test.o +lttng-clock-plugin-test-objs := clock-plugin/lttng-clock-plugin-test.o + +# vim:syntax=make diff --git a/ltt/lttng-2.11.0/tests/Kconfig b/ltt/lttng-2.11.0/tests/Kconfig new file mode 100644 index 000000000000..7ae0dbfff8e0 --- /dev/null +++ b/ltt/lttng-2.11.0/tests/Kconfig @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + +config LTTNG_CLOCK_PLUGIN_TEST + tristate "Use test plugin as trace clock" + depends on LTTNG + help + Use the test clock as trace clock. This plugin freezes the + time with 1 KHz for regression test. + It's recommended to build this as a module to work with the + lttng-tools test suite. diff --git a/ltt/lttng-2.11.0/tests/clock-plugin/lttng-clock-plugin-test.c b/ltt/lttng-2.11.0/tests/clock-plugin/lttng-clock-plugin-test.c new file mode 100644 index 000000000000..539f2e3f0b31 --- /dev/null +++ b/ltt/lttng-2.11.0/tests/clock-plugin/lttng-clock-plugin-test.c @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-clock-plugin-test.c + * + * Copyright (C) 2014, 2016 Mathieu Desnoyers + */ + +#include +#include +#include +#include + +#include +#include /* From lttng-modules */ + +static u64 trace_clock_read64_example(void) +{ + /* Freeze time. */ + return 0; +} + +static u64 trace_clock_freq_example(void) +{ + return 1000; /* 1KHz */ +} + +static int trace_clock_uuid_example(char *uuid) +{ + const char myuuid[] = "83c63deb-7aa4-48fb-abda-946f400d76e6"; + memcpy(uuid, myuuid, LTTNG_MODULES_UUID_STR_LEN); + return 0; +} + +static const char *trace_clock_name_example(void) +{ + return "lttng_test_clock_override"; +} + +static const char *trace_clock_description_example(void) +{ + return "Freeze time with 1KHz for regression test"; +} + +static +struct lttng_trace_clock ltc = { + .read64 = trace_clock_read64_example, + .freq = trace_clock_freq_example, + .uuid = trace_clock_uuid_example, + .name = trace_clock_name_example, + .description = trace_clock_description_example, +}; + +static __init +int lttng_clock_plugin_init(void) +{ + return lttng_clock_register_plugin(<c, THIS_MODULE); +} +fs_initcall(lttng_clock_plugin_init); + +static __exit +void lttng_clock_plugin_exit(void) +{ + lttng_clock_unregister_plugin(<c, THIS_MODULE); +} +module_exit(lttng_clock_plugin_exit); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng Clock Plugin Example"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/tests/probes/lttng-test.c b/ltt/lttng-2.11.0/tests/probes/lttng-test.c new file mode 100644 index 000000000000..8f2d3febe604 --- /dev/null +++ b/ltt/lttng-2.11.0/tests/probes/lttng-test.c @@ -0,0 +1,145 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * lttng-test.c + * + * Linux Trace Toolkit Next Generation Test Module + * + * Copyright 2015 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define TP_MODULE_NOAUTOLOAD +#define LTTNG_PACKAGE_BUILD +#define CREATE_TRACE_POINTS +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module +#define TRACE_INCLUDE_FILE lttng-test +#define LTTNG_INSTRUMENTATION +#include + +LTTNG_DEFINE_TRACE(lttng_test_filter_event, + PARAMS(int anint, int netint, long *values, + char *text, size_t textlen, + char *etext, uint32_t * net_values), + PARAMS(anint, netint, values, text, textlen, etext, net_values) +); + +#define LTTNG_TEST_FILTER_EVENT_FILE "lttng-test-filter-event" + +#define LTTNG_WRITE_COUNT_MAX 64 + +static struct proc_dir_entry *lttng_test_filter_event_dentry; + +static +void trace_test_event(unsigned int nr_iter) +{ + int i, netint; + long values[] = { 1, 2, 3 }; + uint32_t net_values[] = { 1, 2, 3 }; + char text[10] = "test"; + char escape[10] = "\\*"; + + for (i = 0; i < 3; i++) { + net_values[i] = htonl(net_values[i]); + } + for (i = 0; i < nr_iter; i++) { + netint = htonl(i); + trace_lttng_test_filter_event(i, netint, values, text, strlen(text), escape, net_values); + } +} + +/** + * lttng_filter_event_write - trigger a lttng_test_filter_event + * @file: file pointer + * @user_buf: user string + * @count: length to copy + * + * Return -1 on error, with EFAULT errno. Returns count on success. + */ +static +ssize_t lttng_test_filter_event_write(struct file *file, const char __user *user_buf, + size_t count, loff_t *ppos) +{ + unsigned int nr_iter; + ssize_t written; + int ret; + + /* Get the number of iterations */ + ret = lttng_kstrtouint_from_user(user_buf, count, 10, &nr_iter); + if (ret) { + written = ret; + goto end; + } + /* Trace the event */ + trace_test_event(nr_iter); + written = count; + *ppos += written; +end: + return written; +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) +static const struct proc_ops lttng_test_filter_event_proc_ops = { + .proc_write = lttng_test_filter_event_write, +}; +#else +static const struct file_operations lttng_test_filter_event_proc_ops = { + .write = lttng_test_filter_event_write, +}; +#endif + +static +int __init lttng_test_init(void) +{ + int ret = 0; + + (void) wrapper_lttng_fixup_sig(THIS_MODULE); + wrapper_vmalloc_sync_mappings(); + lttng_test_filter_event_dentry = + proc_create_data(LTTNG_TEST_FILTER_EVENT_FILE, + S_IRUGO | S_IWUGO, NULL, + <tng_test_filter_event_proc_ops, NULL); + if (!lttng_test_filter_event_dentry) { + printk(KERN_ERR "Error creating LTTng test filter file\n"); + ret = -ENOMEM; + goto error; + } + ret = __lttng_events_init__lttng_test(); + if (ret) + goto error_events; + return ret; + +error_events: + remove_proc_entry(LTTNG_TEST_FILTER_EVENT_FILE, NULL); +error: + return ret; +} + +module_init(lttng_test_init); + +static +void __exit lttng_test_exit(void) +{ + __lttng_events_exit__lttng_test(); + if (lttng_test_filter_event_dentry) + remove_proc_entry(LTTNG_TEST_FILTER_EVENT_FILE, NULL); +} + +module_exit(lttng_test_exit); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers "); +MODULE_DESCRIPTION("LTTng Test"); +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." + __stringify(LTTNG_MODULES_MINOR_VERSION) "." + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) + LTTNG_MODULES_EXTRAVERSION); diff --git a/ltt/lttng-2.11.0/wrapper/atomic.h b/ltt/lttng-2.11.0/wrapper/atomic.h new file mode 100644 index 000000000000..51920c4a03fe --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/atomic.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * wrapper/atomic.h + * + * wrapper around linux/atomic.h. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_ATOMIC_H +#define _LTTNG_WRAPPER_ATOMIC_H + +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +#include +#else +#include +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) +static inline void lttng_smp_mb__before_atomic(void) +{ + smp_mb__before_atomic(); +} + +static inline void lttng_smp_mb__after_atomic(void) +{ + smp_mb__after_atomic(); +} +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) */ +static inline void lttng_smp_mb__before_atomic(void) +{ + smp_mb__before_atomic_inc(); +} + +static inline void lttng_smp_mb__after_atomic(void) +{ + smp_mb__after_atomic_inc(); +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0)) */ + +#endif /* _LTTNG_WRAPPER_ATOMIC_H */ diff --git a/ltt/lttng-2.11.0/wrapper/compiler.h b/ltt/lttng-2.11.0/wrapper/compiler.h new file mode 100644 index 000000000000..b9f8c51861e7 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/compiler.h @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/compiler.h + * + * Copyright (C) 2013 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_COMPILER_H +#define _LTTNG_WRAPPER_COMPILER_H + +#include +#include + +/* + * Don't allow compiling with buggy compiler. + */ + +#ifdef GCC_VERSION + +/* + * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 + */ +# ifdef __ARMEL__ +# if GCC_VERSION >= 40800 && GCC_VERSION <= 40802 +# error Your gcc version produces clobbered frame accesses +# endif +# endif +#endif + +/* + * READ/WRITE_ONCE were introduced in kernel 3.19 and ACCESS_ONCE + * was removed in 4.15. Prefer READ/WRITE but fallback to ACCESS + * when they are not available. + */ +#ifndef READ_ONCE +# define READ_ONCE(x) ACCESS_ONCE(x) +#endif + +#ifndef WRITE_ONCE +# define WRITE_ONCE(x, val) ({ ACCESS_ONCE(x) = val; }) +#endif + +/* + * In v4.15 a smp read barrier was added to READ_ONCE to replace + * lockless_dereference(), replicate this behavior on prior kernels + * and remove calls to smp_read_barrier_depends which was dropped + * in v5.9. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) +#define LTTNG_READ_ONCE(x) READ_ONCE(x) +#else +#define LTTNG_READ_ONCE(x) \ +({ \ + typeof(x) __val = READ_ONCE(x); \ + smp_read_barrier_depends(); \ + __val; \ +}) +#endif + +#endif /* _LTTNG_WRAPPER_COMPILER_H */ diff --git a/ltt/lttng-2.11.0/wrapper/fdtable.c b/ltt/lttng-2.11.0/wrapper/fdtable.c new file mode 100644 index 000000000000..89fd9c46ac0c --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/fdtable.c @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * wrapper/fdtable.c + * + * Copyright (C) 2013 Mathieu Desnoyers + */ + +#include +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) + +/* + * Reimplementation of iterate_fd() for kernels between 2.6.32 and 3.6 + * (inclusive). + */ +int lttng_iterate_fd(struct files_struct *files, + unsigned int first, + int (*cb)(const void *, struct file *, unsigned int), + const void *ctx) +{ + struct fdtable *fdt; + struct file *filp; + unsigned int i; + int res = 0; + + if (!files) + return 0; + spin_lock(&files->file_lock); + fdt = files_fdtable(files); + for (i = 0; i < fdt->max_fds; i++) { + filp = fcheck_files(files, i); + if (!filp) + continue; + res = cb(ctx, filp, i); + if (res) + break; + } + spin_unlock(&files->file_lock); + return res; +} + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/fdtable.h b/ltt/lttng-2.11.0/wrapper/fdtable.h new file mode 100644 index 000000000000..8f73559796a0 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/fdtable.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/fdtable.h + * + * Copyright (C) 2013 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_FDTABLE_H +#define _LTTNG_WRAPPER_FDTABLE_H + +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) + +int lttng_iterate_fd(struct files_struct *files, + unsigned int first, + int (*cb)(const void *, struct file *, unsigned int), + const void *ctx); + +#else + +/* + * iterate_fd() appeared at commit + * c3c073f808b22dfae15ef8412b6f7b998644139a in the Linux kernel (first + * released kernel: v3.7). + */ +#define lttng_iterate_fd iterate_fd + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) + +static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) +{ + return close_on_exec(fd, fdt); +} + +#else + +static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) +{ + return FD_ISSET(fd, fdt->close_on_exec); +} + +#endif + +#endif /* _LTTNG_WRAPPER_FDTABLE_H */ diff --git a/ltt/lttng-2.11.0/wrapper/file.h b/ltt/lttng-2.11.0/wrapper/file.h new file mode 100644 index 000000000000..fd77aa7bdd84 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/file.h @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/file.h + * + * wrapper around linux/file.h. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_FILE_H +#define _LTTNG_WRAPPER_FILE_H + +#include +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) + +static +inline int lttng_get_unused_fd(void) +{ + return get_unused_fd_flags(0); +} + +#define lttng_f_dentry f_path.dentry + +#else /* #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) */ + +static +inline int lttng_get_unused_fd(void) +{ + return get_unused_fd(); +} + +#define lttng_f_dentry f_dentry + +#endif /* #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) */ + +#endif /* _LTTNG_WRAPPER_FILE_H */ diff --git a/ltt/lttng-2.11.0/wrapper/fs.h b/ltt/lttng-2.11.0/wrapper/fs.h new file mode 100644 index 000000000000..99697f8791bb --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/fs.h @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * wrapper/fs.h + * + * Copyright (C) 2020 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_FS_H +#define _LTTNG_WRAPPER_FS_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + +static inline +ssize_t lttng_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos) +{ + return kernel_read(file, buf, count, pos); +} + +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) */ + +static inline +ssize_t lttng_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos) +{ + ssize_t len; + + len = kernel_read(file, *pos, buf, count); + + /* + * Move 'pos' forward since it's passed by value in this + * implementation of 'kernel_read'. + */ + if (len > 0) + (*pos) += len; + + return len; +} + +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) */ + +#endif /* _LTTNG_WRAPPER_FS_H */ diff --git a/ltt/lttng-2.11.0/wrapper/genhd.h b/ltt/lttng-2.11.0/wrapper/genhd.h new file mode 100644 index 000000000000..98feb57bebde --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/genhd.h @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/genhd.h + * + * wrapper around block layer functions and data structures. Using + * KALLSYMS to get its address when available, else we need to have a + * kernel that exports this function to GPL modules. + * + * Copyright (C) 2011-2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_GENHD_H +#define _LTTNG_WRAPPER_GENHD_H + +#include + +#ifdef CONFIG_KALLSYMS_ALL + +#include +#include + +static inline +struct class *wrapper_get_block_class(void) +{ + struct class *ptr_block_class; + + ptr_block_class = (struct class *) kallsyms_lookup_dataptr("block_class"); + if (!ptr_block_class) { + printk_once(KERN_WARNING "LTTng: block_class symbol lookup failed.\n"); + return NULL; + } + return ptr_block_class; +} + +/* + * Canary function to check for 'block_class' at compile time. + * + * From 'include/linux/genhd.h': + * + * extern struct class block_class; + */ +static inline +struct class *__canary__get_block_class(void) +{ + return &block_class; +} + +static inline +struct device_type *wrapper_get_disk_type(void) +{ + struct device_type *ptr_disk_type; + + ptr_disk_type = (struct device_type *) kallsyms_lookup_dataptr("disk_type"); + if (!ptr_disk_type) { + printk_once(KERN_WARNING "LTTng: disk_type symbol lookup failed.\n"); + return NULL; + } + return ptr_disk_type; +} + +/* + * No canary for 'disk_type', it's only defined in 'block/genhd.c'. + * + * static inline + * struct device_type *__canary__get_disk_type(void) + * { + * return &disk_type; + * } + */ + +#else + +static inline +struct class *wrapper_get_block_class(void) +{ + /* + * Symbol block_class is not exported. + * TODO: return &block_class; + */ + /* Feature currently unavailable without KALLSYMS_ALL */ + return NULL; +} + +static inline +struct device_type *wrapper_get_disk_type(void) +{ + /* + * Symbol disk_type is not exported. + * TODO: return &disk_type; + */ + /* Feature currently unavailable without KALLSYMS_ALL */ + return NULL; +} + +#endif + +#endif /* _LTTNG_WRAPPER_GENHD_H */ diff --git a/ltt/lttng-2.11.0/wrapper/inline_memcpy.h b/ltt/lttng-2.11.0/wrapper/inline_memcpy.h new file mode 100644 index 000000000000..35cc504408ca --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/inline_memcpy.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/inline_memcpy.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#if !defined(__HAVE_ARCH_INLINE_MEMCPY) && !defined(inline_memcpy) +#define inline_memcpy memcpy +#endif diff --git a/ltt/lttng-2.11.0/wrapper/irq.h b/ltt/lttng-2.11.0/wrapper/irq.h new file mode 100644 index 000000000000..14db8ac7e5d8 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/irq.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/irq.h + * + * wrapper around linux/irq.h. + * + * Copyright (C) 2013 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_IRQ_H +#define _LTTNG_WRAPPER_IRQ_H + +#include + +/* + * Starting from the 3.12 Linux kernel, all architectures use the + * generic hard irqs system. More details can be seen at commit + * 0244ad004a54e39308d495fee0a2e637f8b5c317 in the Linux kernel GIT. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0) \ + || defined(CONFIG_GENERIC_HARDIRQS)) +# define CONFIG_LTTNG_HAS_LIST_IRQ +#endif + +#endif /* _LTTNG_WRAPPER_IRQ_H */ diff --git a/ltt/lttng-2.11.0/wrapper/irqdesc.c b/ltt/lttng-2.11.0/wrapper/irqdesc.c new file mode 100644 index 000000000000..02c44c8001ab --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/irqdesc.c @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * wrapper/irqdesc.c + * + * wrapper around irq_to_desc. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. This export was added to the 3.4 kernels. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#include +#include + +#if (defined(CONFIG_KALLSYMS) \ + && (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))) + +#include +#include +#include +#include +#include + +static +struct irq_desc *(*irq_to_desc_sym)(unsigned int irq); + +struct irq_desc *wrapper_irq_to_desc(unsigned int irq) +{ + if (!irq_to_desc_sym) + irq_to_desc_sym = (void *) kallsyms_lookup_funcptr("irq_to_desc"); + if (irq_to_desc_sym) { + return irq_to_desc_sym(irq); + } else { + printk_once(KERN_WARNING "LTTng: irq_to_desc symbol lookup failed.\n"); + return NULL; + } +} +EXPORT_SYMBOL_GPL(wrapper_irq_to_desc); + +#else + +#include +#include + +struct irq_desc *wrapper_irq_to_desc(unsigned int irq) +{ + return irq_to_desc(irq); +} +EXPORT_SYMBOL_GPL(wrapper_irq_to_desc); + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/irqdesc.h b/ltt/lttng-2.11.0/wrapper/irqdesc.h new file mode 100644 index 000000000000..ce7da2b481f3 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/irqdesc.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/irqdesc.h + * + * wrapper around irq_to_desc. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_IRQDESC_H +#define _LTTNG_WRAPPER_IRQDESC_H + +#include +#include + +struct irq_desc *wrapper_irq_to_desc(unsigned int irq); + +/* + * Canary function to check for 'irq_to_desc()' at compile time. + * + * From 'include/linux/irqnr.h': + * + * extern struct irq_desc *irq_to_desc(unsigned int irq); + */ +static inline +struct irq_desc *__canary__irq_to_desc(unsigned int irq) +{ + return irq_to_desc(irq); +} + +#endif /* _LTTNG_WRAPPER_IRQDESC_H */ diff --git a/ltt/lttng-2.11.0/wrapper/irqflags.h b/ltt/lttng-2.11.0/wrapper/irqflags.h new file mode 100644 index 000000000000..7c33c137dd17 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/irqflags.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/irqflags.h + * + * wrapper around IRQ flags. + * + * Copyright (C) 2015 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_IRQFLAGS_H +#define _LTTNG_WRAPPER_IRQFLAGS_H + +#include +#include + +#ifdef CONFIG_X86 + +static inline +int lttng_regs_irqs_disabled(struct pt_regs *regs) +{ + unsigned long flags = regs->flags; + + return raw_irqs_disabled_flags(flags); +} + +#else +/* + * lttng_regs_irqs_disabled() returns -1 if irqoff state is unknown. + * TODO: should implement lttng_regs_irqs_disabled for each architecture + * to add interruptible context for kprobes and kretprobes. + */ + +static inline +int lttng_regs_irqs_disabled(struct pt_regs *regs) +{ + return -1; +} +#endif + +#endif /* _LTTNG_WRAPPER_IRQFLAGS_H */ diff --git a/ltt/lttng-2.11.0/wrapper/kallsyms.c b/ltt/lttng-2.11.0/wrapper/kallsyms.c new file mode 100644 index 000000000000..6af77f538950 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/kallsyms.c @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR LGPL-2.1-only) + * + * wrapper/kallsyms.c + * + * Wrapper around kallsyms. Using kprobes to get its address when available. + * + * Can we mainline LTTng already so we don't have to waste our time doing this + * kind of hack ? + * + * Copyright (C) 2020 Mathieu Desnoyers + */ + +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) + +#ifndef CONFIG_KPROBES +# error "LTTng-modules requires CONFIG_KPROBES on kernels >= 5.7.0" +#endif + +static +unsigned long (*kallsyms_lookup_name_sym)(const char *name); + +static +int dummy_kprobe_handler(struct kprobe *p, struct pt_regs *regs) +{ + return 0; +} + +static +unsigned long do_get_kallsyms(void) +{ + struct kprobe probe; + int ret; + unsigned long addr; + + memset(&probe, 0, sizeof(probe)); + probe.pre_handler = dummy_kprobe_handler; + probe.symbol_name = "kallsyms_lookup_name"; + ret = register_kprobe(&probe); + if (ret) + return 0; + addr = (unsigned long)probe.addr; +#ifdef CONFIG_ARM +#ifdef CONFIG_THUMB2_KERNEL + if (addr) + addr |= 1; /* set bit 0 in address for thumb mode */ +#endif +#endif + unregister_kprobe(&probe); + return addr; +} + +unsigned long wrapper_kallsyms_lookup_name(const char *name) +{ + if (!kallsyms_lookup_name_sym) { + kallsyms_lookup_name_sym = (void *)do_get_kallsyms(); + } + if (kallsyms_lookup_name_sym) + return kallsyms_lookup_name_sym(name); + else { + printk_once(KERN_WARNING "LTTng requires kallsyms_lookup_name\n"); + return 0; + } +} +EXPORT_SYMBOL_GPL(wrapper_kallsyms_lookup_name); + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/kallsyms.h b/ltt/lttng-2.11.0/wrapper/kallsyms.h new file mode 100644 index 000000000000..5f48847fb22a --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/kallsyms.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/kallsyms.h + * + * wrapper around kallsyms_lookup_name. Implements arch-dependent code for + * arches where the address of the start of the function body is different + * from the pointer which can be used to call the function, e.g. ARM THUMB2. + * + * Copyright (C) 2011 Avik Sil (avik.sil@linaro.org) + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_KALLSYMS_H +#define _LTTNG_WRAPPER_KALLSYMS_H + +#include +#include + +/* + * PowerPC ABIv1 needs KALLSYMS_ALL to get the function descriptor, + * which is needed to perform the function call. + */ +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF < 2) +# ifndef CONFIG_KALLSYMS_ALL +# error "LTTng-modules requires CONFIG_KALLSYMS_ALL on PowerPC ABIv1" +# endif +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) + +unsigned long wrapper_kallsyms_lookup_name(const char *name); + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) */ + +static inline +unsigned long wrapper_kallsyms_lookup_name(const char *name) +{ + return kallsyms_lookup_name(name); +} + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) */ + +static inline +unsigned long kallsyms_lookup_funcptr(const char *name) +{ + unsigned long addr; + + addr = wrapper_kallsyms_lookup_name(name); +#ifdef CONFIG_ARM +#ifdef CONFIG_THUMB2_KERNEL + if (addr) + addr |= 1; /* set bit 0 in address for thumb mode */ +#endif +#endif + return addr; +} + +static inline +unsigned long kallsyms_lookup_dataptr(const char *name) +{ + return wrapper_kallsyms_lookup_name(name); +} + +#endif /* _LTTNG_WRAPPER_KALLSYMS_H */ diff --git a/ltt/lttng-2.11.0/wrapper/kref.h b/ltt/lttng-2.11.0/wrapper/kref.h new file mode 100644 index 000000000000..f220ddbfaaea --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/kref.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * wrapper/kref.h + * + * wrapper around linux/kref.h. + * + * Copyright (C) 2016 Mathieu Desnoyers + * + * This wrapper code is derived from Linux 3.19.2 include/linux/list.h + * and include/linux/rculist.h, hence the GPLv2 license applied to this + * file. + */ + +#ifndef _LTTNG_WRAPPER_KREF_H +#define _LTTNG_WRAPPER_KREF_H + +#include +#include +#include + +/* + * lttng_kref_get: get reference count, checking for overflow. + * + * Return 1 if reference is taken, 0 otherwise (overflow). + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) +static inline int lttng_kref_get(struct kref *kref) +{ + kref_get(kref); + return 1; +} +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ +static inline int lttng_kref_get(struct kref *kref) +{ + return atomic_add_unless(&kref->refcount, 1, INT_MAX); +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0)) */ + +#endif /* _LTTNG_WRAPPER_KREF_H */ diff --git a/ltt/lttng-2.11.0/wrapper/kstrtox.h b/ltt/lttng-2.11.0/wrapper/kstrtox.h new file mode 100644 index 000000000000..b0c6cf8f99e4 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/kstrtox.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/kstrtox.h + * + * Copyright (C) 2015 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_KSTRTOX_H +#define _LTTNG_WRAPPER_KSTRTOX_H + +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) + +#include + +/* Excludes final \0. */ +#define LTTNG_MAX_UINT_CHAR 10 + +static inline +int __must_check lttng_kstrtouint_from_user(const char __user *ubuf, + size_t count, unsigned int base, unsigned int *res) +{ + unsigned int _res; + char kbuf[LTTNG_MAX_UINT_CHAR + 1], *endptr; + + memset(kbuf, 0, sizeof(kbuf)); + if (copy_from_user(kbuf, ubuf, min_t(size_t, LTTNG_MAX_UINT_CHAR, count))) + return -EFAULT; + + _res = simple_strtoul(kbuf, &endptr, base); + if (!endptr) + return -EINVAL; + + *res = _res; + return 0; +} +#else +static inline +int __must_check lttng_kstrtouint_from_user(const char __user *ubuf, + size_t count, unsigned int base, unsigned int *res) +{ + return kstrtouint_from_user(ubuf, count, base, res); +} +#endif + +#endif /* _LTTNG_WRAPPER_KSTRTOX_H */ diff --git a/ltt/lttng-2.11.0/wrapper/list.h b/ltt/lttng-2.11.0/wrapper/list.h new file mode 100644 index 000000000000..4e167862f1b0 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/list.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * wrapper/list.h + * + * wrapper around linux/list.h. + * + * Copyright (C) 2015 Mathieu Desnoyers + * + * This wrapper code is derived from Linux 3.19.2 include/linux/list.h + * and include/linux/rculist.h, hence the GPLv2 license applied to this + * file. + */ + +#ifndef _LTTNG_WRAPPER_LIST_H +#define _LTTNG_WRAPPER_LIST_H + +#include +#include + +/* + * return the first or the next element in an RCU protected hlist + */ +#define lttng_hlist_first_rcu(head) (*((struct hlist_node __rcu **)(&(head)->first))) +#define lttng_hlist_next_rcu(node) (*((struct hlist_node __rcu **)(&(node)->next))) +#define lttng_hlist_pprev_rcu(node) (*((struct hlist_node __rcu **)((node)->pprev))) + +#define lttng_hlist_entry_safe(ptr, type, member) \ + ({ typeof(ptr) ____ptr = (ptr); \ + ____ptr ? hlist_entry(____ptr, type, member) : NULL; \ + }) + +/** + * lttng_hlist_for_each_entry - iterate over list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define lttng_hlist_for_each_entry(pos, head, member) \ + for (pos = lttng_hlist_entry_safe((head)->first, typeof(*(pos)), member);\ + pos; \ + pos = lttng_hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) + +/** + * lttng_hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @pos: the type * to use as a loop cursor. + * @n: another &struct hlist_node to use as temporary storage + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define lttng_hlist_for_each_entry_safe(pos, n, head, member) \ + for (pos = lttng_hlist_entry_safe((head)->first, typeof(*pos), member);\ + pos && ({ n = pos->member.next; 1; }); \ + pos = lttng_hlist_entry_safe(n, typeof(*pos), member)) + +#endif /* _LTTNG_WRAPPER_LIST_H */ diff --git a/ltt/lttng-2.11.0/wrapper/mm.h b/ltt/lttng-2.11.0/wrapper/mm.h new file mode 100644 index 000000000000..405248a9a48a --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/mm.h @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/mm.h + * + * Copyright (C) 2018 Francis Deslauriers + */ + +#ifndef _LTTNG_WRAPPER_MM_H +#define _LTTNG_WRAPPER_MM_H + +#include +#include + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(4,4,25,44, 4,5,0,0)) + +/* + * Returns true if the current estimation of the number of page available is + * larger than the number of pages passed as parameter. + */ +static inline +bool wrapper_check_enough_free_pages(unsigned long num_pages) +{ + return num_pages < si_mem_available(); +} + +#else + +static inline +bool wrapper_check_enough_free_pages(unsigned long num_pages) +{ + /* + * The si_mem_available function is not available on this kernel. Since + * we can't reliably know if there is enough memory available, so we + * return true. + */ + return true; +} +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) +static inline +void wrapper_set_current_oom_origin(void) +{ + return set_current_oom_origin(); +} + +static inline +void wrapper_clear_current_oom_origin(void) +{ + return clear_current_oom_origin(); +} + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ + +static inline +void wrapper_set_current_oom_origin(void) +{ + return; +} + +static inline +void wrapper_clear_current_oom_origin(void) +{ + return; +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) */ +#endif /* _LTTNG_WRAPPER_MM_H */ diff --git a/ltt/lttng-2.11.0/wrapper/objtool.h b/ltt/lttng-2.11.0/wrapper/objtool.h new file mode 100644 index 000000000000..3b997cae56d7 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/objtool.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * wrapper/objtool.h + * + * Copyright (C) 2016 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_OBJTOOL_H +#define _LTTNG_WRAPPER_OBJTOOL_H + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +#include +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) +#include +#endif + + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) + +#define LTTNG_STACK_FRAME_NON_STANDARD(func) \ + STACK_FRAME_NON_STANDARD(func) + +#else + +#define LTTNG_STACK_FRAME_NON_STANDARD(func) + +#endif + +#endif /* _LTTNG_WRAPPER_OBJTOOL_H */ diff --git a/ltt/lttng-2.11.0/wrapper/page_alloc.c b/ltt/lttng-2.11.0/wrapper/page_alloc.c new file mode 100644 index 000000000000..2de24f9e07ed --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/page_alloc.c @@ -0,0 +1,123 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * wrapper/page_alloc.c + * + * wrapper around get_pfnblock_flags_mask and Ubuntu + * get_pageblock_flags_mask. Using KALLSYMS to get their address when + * available, else we need to have a kernel that exports this function + * to GPL modules. + * + * Copyright (C) 2015 Mathieu Desnoyers + */ + +#include + +#if (defined(CONFIG_KALLSYMS) \ + && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,2) \ + || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \ + || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))) + +#include +#include +#include +#include +#include + +static +unsigned long (*get_pfnblock_flags_mask_sym)(struct page *page, + unsigned long pfn, + unsigned long end_bitidx, + unsigned long mask); + +unsigned long wrapper_get_pfnblock_flags_mask(struct page *page, + unsigned long pfn, + unsigned long end_bitidx, + unsigned long mask) +{ + WARN_ON_ONCE(!get_pfnblock_flags_mask_sym); + if (get_pfnblock_flags_mask_sym) { + return get_pfnblock_flags_mask_sym(page, pfn, end_bitidx, mask); + } else { + return -ENOSYS; + } +} +EXPORT_SYMBOL_GPL(wrapper_get_pfnblock_flags_mask); + +int wrapper_get_pfnblock_flags_mask_init(void) +{ + get_pfnblock_flags_mask_sym = + (void *) kallsyms_lookup_funcptr("get_pfnblock_flags_mask"); + if (!get_pfnblock_flags_mask_sym) + return -1; + return 0; +} +EXPORT_SYMBOL_GPL(wrapper_get_pfnblock_flags_mask_init); + +/* + * Canary function to check for 'get_pfnblock_flags_mask()' at compile time. + * + * From 'include/linux/pageblock-flags.h': + * + * unsigned long get_pfnblock_flags_mask(struct page *page, + * unsigned long pfn, + * unsigned long end_bitidx, + * unsigned long mask); + */ +__attribute__((unused)) static +unsigned long __canary__get_pfnblock_flags_mask(struct page *page, + unsigned long pfn, + unsigned long end_bitidx, + unsigned long mask) +{ + return get_pfnblock_flags_mask(page, pfn, end_bitidx, mask); +} + +#else + +#include + +#endif + +#if (defined(CONFIG_KALLSYMS) \ + && LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0)) + +#include +#include +#include +#include +#include + +static +unsigned long (*get_pageblock_flags_mask_sym)(struct page *page, + unsigned long end_bitidx, + unsigned long mask); + +unsigned long wrapper_get_pageblock_flags_mask(struct page *page, + unsigned long end_bitidx, + unsigned long mask) +{ + WARN_ON_ONCE(!get_pageblock_flags_mask_sym); + if (get_pageblock_flags_mask_sym) { + return get_pageblock_flags_mask_sym(page, end_bitidx, mask); + } else { + return -ENOSYS; + } +} +EXPORT_SYMBOL_GPL(wrapper_get_pageblock_flags_mask); + +int wrapper_get_pageblock_flags_mask_init(void) +{ + get_pageblock_flags_mask_sym = + (void *) kallsyms_lookup_funcptr("get_pageblock_flags_mask"); + if (!get_pageblock_flags_mask_sym) + return -1; + return 0; +} +EXPORT_SYMBOL_GPL(wrapper_get_pfnblock_flags_mask_init); + +#else + +#include + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/page_alloc.h b/ltt/lttng-2.11.0/wrapper/page_alloc.h new file mode 100644 index 000000000000..45462ac83dcc --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/page_alloc.h @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/page_alloc.h + * + * wrapper around get_pfnblock_flags_mask. Using KALLSYMS to get its address + * when available, else we need to have a kernel that exports this function to + * GPL modules. + * + * Copyright (C) 2015 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_PAGE_ALLOC_H +#define _LTTNG_WRAPPER_PAGE_ALLOC_H + +#include + +/* + * We need to redefine get_pfnblock_flags_mask to our wrapper, because + * the get_pageblock_migratetype() macro uses it. + */ +#if (defined(CONFIG_KALLSYMS) \ + && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,2) \ + || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \ + || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))) + +#define get_pfnblock_flags_mask wrapper_get_pfnblock_flags_mask + +#include + +int wrapper_get_pfnblock_flags_mask_init(void); + +#else + +#include + +static inline +int wrapper_get_pfnblock_flags_mask_init(void) +{ + return 0; +} + +#endif + +/* + * For a specific range of Ubuntu 3.13 kernels, we need to redefine + * get_pageblock_flags_mask to our wrapper, because the + * get_pageblock_migratetype() macro uses it. This function has been + * introduced into mainline within commit + * e58469bafd0524e848c3733bc3918d854595e20f, but never actually showed + * up in a stable kernel version, since it has been changed by commit + * dc4b0caff24d9b2918e9f27bc65499ee63187eba. Since Ubuntu chose to only + * backport the former commit but not the latter, we need to do a + * special case to cover this. + */ +#if (defined(CONFIG_KALLSYMS) \ + && LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0)) + +#define get_pageblock_flags_mask wrapper_get_pageblock_flags_mask + +#include + +int wrapper_get_pageblock_flags_mask_init(void); + +#else + +#include + +static inline +int wrapper_get_pageblock_flags_mask_init(void) +{ + return 0; +} + +#endif + +#endif /* _LTTNG_WRAPPER_PAGE_ALLOC_H */ diff --git a/ltt/lttng-2.11.0/wrapper/percpu-defs.h b/ltt/lttng-2.11.0/wrapper/percpu-defs.h new file mode 100644 index 000000000000..53868adafd92 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/percpu-defs.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/percpu-defs.h + * + * wrapper around linux/percpu-defs.h. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_PERCPU_DEFS_H +#define _LTTNG_WRAPPER_PERCPU_DEFS_H + +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) + +#include + +#define lttng_this_cpu_ptr(ptr) this_cpu_ptr(ptr) + +#else /* #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) */ + +#include + +#define lttng_this_cpu_ptr(ptr) (&__get_cpu_var(*(ptr))) + +#endif /* #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) */ + +#endif /* _LTTNG_WRAPPER_PERCPU_DEFS_H */ diff --git a/ltt/lttng-2.11.0/wrapper/perf.h b/ltt/lttng-2.11.0/wrapper/perf.h new file mode 100644 index 000000000000..48e256c86b49 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/perf.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/perf.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_PERF_H +#define _LTTNG_WRAPPER_PERF_H + +#include + +#ifdef CONFIG_PERF_EVENTS + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) +static inline struct perf_event * +wrapper_perf_event_create_kernel_counter(struct perf_event_attr *attr, + int cpu, + struct task_struct *task, + perf_overflow_handler_t callback) +{ + return perf_event_create_kernel_counter(attr, cpu, task, callback, NULL); +} +#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +static inline struct perf_event * +wrapper_perf_event_create_kernel_counter(struct perf_event_attr *attr, + int cpu, + struct task_struct *task, + perf_overflow_handler_t callback) +{ + return perf_event_create_kernel_counter(attr, cpu, task, callback); +} +#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) */ +static inline struct perf_event * +wrapper_perf_event_create_kernel_counter(struct perf_event_attr *attr, + int cpu, + struct task_struct *task, + perf_overflow_handler_t callback) +{ + pid_t pid; + + if (!task) + pid = -1; + else + pid = task->pid; + + return perf_event_create_kernel_counter(attr, cpu, pid, callback); +} + +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) +#define local64_read(l) atomic64_read(l) +#endif + +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) */ + +#endif /* CONFIG_PERF_EVENTS */ + +#endif /* _LTTNG_WRAPPER_PERF_H */ diff --git a/ltt/lttng-2.11.0/wrapper/poll.h b/ltt/lttng-2.11.0/wrapper/poll.h new file mode 100644 index 000000000000..dde5c55b9562 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/poll.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/poll.h + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_POLL_H +#define _LTTNG_WRAPPER_POLL_H + +#include + +/* + * Note: poll_wait_set_exclusive() is defined as no-op. Thundering herd + * effect can be noticed with large number of consumer threads. + */ + +#define poll_wait_set_exclusive(poll_table) + +#endif /* _LTTNG_WRAPPER_POLL_H */ diff --git a/ltt/lttng-2.11.0/wrapper/random.c b/ltt/lttng-2.11.0/wrapper/random.c new file mode 100644 index 000000000000..f67d0f0c997d --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/random.c @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/random.c + * + * wrapper around bootid read. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#include + +/* boot_id depends on sysctl */ +#if defined(CONFIG_SYSCTL) + +#include +#include +#include +#include +#include + +/* + * Returns string boot id. + */ +int wrapper_get_bootid(char *bootid) +{ + struct file *file; + int ret; + ssize_t len; + + file = filp_open("/proc/sys/kernel/random/boot_id", O_RDONLY, 0); + if (IS_ERR(file)) + return PTR_ERR(file); + + len = lttng_kernel_read(file, bootid, BOOT_ID_LEN - 1, &file->f_pos); + if (len != BOOT_ID_LEN - 1) { + ret = -EINVAL; + goto end; + } + + bootid[BOOT_ID_LEN - 1] = '\0'; + ret = 0; +end: + filp_close(file, current->files); + return ret; +} +EXPORT_SYMBOL_GPL(wrapper_get_bootid); + +#else + +int wrapper_get_bootid(char *bootid) +{ + return -ENOSYS; +} +EXPORT_SYMBOL_GPL(wrapper_get_bootid); + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/random.h b/ltt/lttng-2.11.0/wrapper/random.h new file mode 100644 index 000000000000..35539e43844a --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/random.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1) + * + * wrapper/random.h + * + * wrapper around bootid read. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_RANDOM_H +#define _LTTNG_WRAPPER_RANDOM_H + +#include + +#define BOOT_ID_LEN LTTNG_MODULES_UUID_STR_LEN + +int wrapper_get_bootid(char *bootid); + +#endif /* _LTTNG_WRAPPER_RANDOM_H */ diff --git a/ltt/lttng-2.11.0/wrapper/rcu.h b/ltt/lttng-2.11.0/wrapper/rcu.h new file mode 100644 index 000000000000..c2f2115eddfc --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/rcu.h @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/rcu.h + * + * wrapper around linux/rcupdate.h and linux/rculist.h. + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_RCU_H +#define _LTTNG_WRAPPER_RCU_H + +#include +#include +#include +#include + +#ifndef rcu_dereference_raw_notrace +#define rcu_dereference_raw_notrace(p) rcu_dereference_raw(p) +#endif + +#define lttng_rcu_dereference(p) rcu_dereference_raw_notrace(p) + +/** + * lttng_list_entry_rcu - get the struct for this entry + * @ptr: the &struct list_head pointer. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_head within the struct. + * + * This primitive may safely run concurrently with the _rcu list-mutation + * primitives such as list_add_rcu() as long as it's guarded by + * rcu_read_lock_sched(). + * Can be used while tracing RCU. + */ +#define lttng_list_entry_rcu(ptr, type, member) \ +({ \ + typeof(*ptr) __rcu *__ptr = (typeof(*ptr) __rcu __force *)ptr; \ + container_of((typeof(ptr))lttng_rcu_dereference(__ptr), type, member); \ +}) + +/** + * lttng_list_for_each_entry_rcu - iterate over rcu list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_head within the struct. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock_sched(). + * Can be used while tracing RCU. + */ +#define lttng_list_for_each_entry_rcu(pos, head, member) \ + for (pos = lttng_list_entry_rcu((head)->next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = lttng_list_entry_rcu(pos->member.next, typeof(*pos), member)) + +/** + * lttng_hlist_for_each_entry_rcu - iterate over rcu list of given type (for tracing) + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as hlist_add_head_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + * + * This is the same as hlist_for_each_entry_rcu() except that it does + * not do any RCU debugging or tracing. + */ +#define lttng_hlist_for_each_entry_rcu(pos, head, member) \ + for (pos = lttng_hlist_entry_safe (lttng_rcu_dereference(lttng_hlist_first_rcu(head)), \ + typeof(*(pos)), member); \ + pos; \ + pos = lttng_hlist_entry_safe(lttng_rcu_dereference(lttng_hlist_next_rcu( \ + &(pos)->member)), typeof(*(pos)), member)) + +#endif /* _LTTNG_WRAPPER_RCU_H */ diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/api.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/api.h new file mode 100644 index 000000000000..2f128e3dd4b2 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/api.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/backend.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend.h new file mode 100644 index 000000000000..9e3449397c27 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_internal.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_internal.h new file mode 100644 index 000000000000..9926eec761b0 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_internal.h @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_types.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_types.h new file mode 100644 index 000000000000..8d7e3d82f33a --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/backend_types.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/config.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/config.h new file mode 100644 index 000000000000..9268d70987be --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/config.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend.h new file mode 100644 index 000000000000..a1b092dc0c25 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_api.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_api.h new file mode 100644 index 000000000000..4a0d8db1da6e --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_api.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_internal.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_internal.h new file mode 100644 index 000000000000..ba23f0dfc09b --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_internal.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_types.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_types.h new file mode 100644 index 000000000000..d501b861e426 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/frontend_types.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/iterator.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/iterator.h new file mode 100644 index 000000000000..2b2a553931cd --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/iterator.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/nohz.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/nohz.h new file mode 100644 index 000000000000..7d1d259e1e65 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/nohz.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/vatomic.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/vatomic.h new file mode 100644 index 000000000000..ee0db7ef484b --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/vatomic.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/ringbuffer/vfs.h b/ltt/lttng-2.11.0/wrapper/ringbuffer/vfs.h new file mode 100644 index 000000000000..5cd24e348fb6 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/ringbuffer/vfs.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */ +#include diff --git a/ltt/lttng-2.11.0/wrapper/spinlock.h b/ltt/lttng-2.11.0/wrapper/spinlock.h new file mode 100644 index 000000000000..b3570d4080b0 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/spinlock.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/spinlock.h + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_SPINLOCK_H +#define _LTTNG_WRAPPER_SPINLOCK_H + +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) + +#include + +#define raw_spin_lock_init(lock) \ + do { \ + raw_spinlock_t __lock = __RAW_SPIN_LOCK_UNLOCKED; \ + memcpy(lock, &__lock, sizeof(lock)); \ + } while (0) + +#define raw_spin_is_locked(lock) __raw_spin_is_locked(lock) + +#define wrapper_desc_spin_lock(lock) spin_lock(lock) +#define wrapper_desc_spin_unlock(lock) spin_unlock(lock) + +#else + +#define wrapper_desc_spin_lock(lock) raw_spin_lock(lock) +#define wrapper_desc_spin_unlock(lock) raw_spin_unlock(lock) + +#endif +#endif /* _LTTNG_WRAPPER_SPINLOCK_H */ diff --git a/ltt/lttng-2.11.0/wrapper/splice.c b/ltt/lttng-2.11.0/wrapper/splice.c new file mode 100644 index 000000000000..282bd863e2cb --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/splice.c @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/splice.c + * + * wrapper around splice_to_pipe. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. The export was introduced in kernel 4.2. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#include + +#if (defined(CONFIG_KALLSYMS) \ + && (LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0))) + +#include +#include +#include +#include + +static +ssize_t (*splice_to_pipe_sym)(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd); + +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + if (!splice_to_pipe_sym) + splice_to_pipe_sym = (void *) kallsyms_lookup_funcptr("splice_to_pipe"); + if (splice_to_pipe_sym) { + return splice_to_pipe_sym(pipe, spd); + } else { + printk_once(KERN_WARNING "LTTng: splice_to_pipe symbol lookup failed.\n"); + return -ENOSYS; + } +} + +/* + * Canary function to check for 'splice_to_pipe()' at compile time. + * + * From 'include/linux/splice.h': + * + * extern ssize_t splice_to_pipe(struct pipe_inode_info *, + * struct splice_pipe_desc *spd); + */ +__attribute__((unused)) static +ssize_t __canary__splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + return splice_to_pipe(pipe, spd); +} + +#else + +#include +#include + +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + return splice_to_pipe(pipe, spd); +} + +#endif diff --git a/ltt/lttng-2.11.0/wrapper/splice.h b/ltt/lttng-2.11.0/wrapper/splice.h new file mode 100644 index 000000000000..a0e2b5f0144e --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/splice.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/splice.h + * + * wrapper around splice_to_pipe. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_SPLICE_H +#define _LTTNG_WRAPPER_SPLICE_H + +#include + +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd); + +#ifndef PIPE_DEF_BUFFERS +#define PIPE_DEF_BUFFERS 16 +#endif + +#endif /* _LTTNG_WRAPPER_SPLICE_H */ diff --git a/ltt/lttng-2.11.0/wrapper/syscall.h b/ltt/lttng-2.11.0/wrapper/syscall.h new file mode 100644 index 000000000000..8715f0c54c59 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/syscall.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/syscall.h + * + * wrapper around asm/syscall.h. + * + * Copyright (C) 2019 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_SYSCALL_H +#define _LTTNG_WRAPPER_SYSCALL_H + +#include +#include + +#define LTTNG_SYSCALL_NR_ARGS 6 + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0)) + +#define lttng_syscall_get_arguments(task, regs, args) \ + syscall_get_arguments(task, regs, args) + +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0) */ + +static inline +void lttng_syscall_get_arguments(struct task_struct *task, + struct pt_regs *regs, unsigned long *args) +{ + syscall_get_arguments(task, regs, 0, LTTNG_SYSCALL_NR_ARGS, args); +} + +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0) */ + +#endif /* _LTTNG_WRAPPER_SYSCALL_H */ diff --git a/ltt/lttng-2.11.0/wrapper/time.h b/ltt/lttng-2.11.0/wrapper/time.h new file mode 100644 index 000000000000..362f314ac75d --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/time.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/time.h + * + * Copyright (C) 2020 Michael Jeanson + * Copyright (C) 2020 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_TIME_H +#define _LTTNG_WRAPPER_TIME_H + +#include + +/* + * Use 64bit timespec on kernels that have it, this makes 32bit arch + * y2038 compliant. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)) +# define LTTNG_KERNEL_HAS_TIMESPEC64 +#endif + +#endif /* _LTTNG_WRAPPER_TIME_H */ diff --git a/ltt/lttng-2.11.0/wrapper/timer.h b/ltt/lttng-2.11.0/wrapper/timer.h new file mode 100644 index 000000000000..a115cf301fd5 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/timer.h @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/timer.h + * + * wrapper around linux/timer.h. + * + * Copyright (C) 2016 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_TIMER_H +#define _LTTNG_WRAPPER_TIMER_H + +#include +#include +#include + +/* + * In the olden days, pinned timers were initialized normaly with init_timer() + * and then modified with mod_timer_pinned(). + * + * Then came kernel 4.8.0 and they had to be initilized as pinned with + * init_timer_pinned() and then modified as regular timers with mod_timer(). + * + * Then came kernel 4.15.0 with a new timer API where init_timer() is no more. + * It's replaced by timer_setup() where pinned is now part of timer flags. + */ + + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) + +#define LTTNG_TIMER_PINNED TIMER_PINNED +#define LTTNG_TIMER_FUNC_ARG_TYPE struct timer_list * + +#define lttng_mod_timer_pinned(timer, expires) \ + mod_timer(timer, expires) + +#define lttng_from_timer(var, callback_timer, timer_fieldname) \ + from_timer(var, callback_timer, timer_fieldname) + +#define lttng_timer_setup(timer, callback, flags, unused) \ + timer_setup(timer, callback, flags) + + +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) */ + + +# if (LTTNG_RT_VERSION_CODE >= LTTNG_RT_KERNEL_VERSION(4,6,4,8) \ + || LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + +#define lttng_init_timer_pinned(timer) \ + init_timer_pinned(timer) + +#define lttng_mod_timer_pinned(timer, expires) \ + mod_timer(timer, expires) + +# else /* LTTNG_RT_VERSION_CODE >= LTTNG_RT_KERNEL_VERSION(4,6,4,8) */ + +#define lttng_init_timer_pinned(timer) \ + init_timer(timer) + +#define lttng_mod_timer_pinned(timer, expires) \ + mod_timer_pinned(timer, expires) + +# endif /* LTTNG_RT_VERSION_CODE >= LTTNG_RT_KERNEL_VERSION(4,6,4,8) */ + + +#define LTTNG_TIMER_PINNED TIMER_PINNED +#define LTTNG_TIMER_FUNC_ARG_TYPE unsigned long + +/* timer_fieldname is unused prior to 4.15. */ +#define lttng_from_timer(var, timer_data, timer_fieldname) \ + ((typeof(var))timer_data) + +static inline void lttng_timer_setup(struct timer_list *timer, + void (*function)(LTTNG_TIMER_FUNC_ARG_TYPE), + unsigned int flags, void *data) +{ + if (flags & LTTNG_TIMER_PINNED) + lttng_init_timer_pinned(timer); + else + init_timer(timer); + + timer->function = function; + timer->data = (unsigned long)data; +} + +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) */ + +#endif /* _LTTNG_WRAPPER_TIMER_H */ diff --git a/ltt/lttng-2.11.0/wrapper/trace-clock.c b/ltt/lttng-2.11.0/wrapper/trace-clock.c new file mode 100644 index 000000000000..10e7da01672c --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/trace-clock.c @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/trace-clock.c + * + * Contains LTTng trace clock mapping to LTTng trace clock or mainline monotonic + * clock. This wrapper depends on CONFIG_HIGH_RES_TIMERS=y. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#include + +#ifdef LTTNG_USE_NMI_SAFE_CLOCK +DEFINE_PER_CPU(u64, lttng_last_tsc); +EXPORT_PER_CPU_SYMBOL(lttng_last_tsc); +#endif /* #ifdef LTTNG_USE_NMI_SAFE_CLOCK */ + +#ifdef LTTNG_CLOCK_NMI_SAFE_BROKEN +#warning "Your kernel implements a bogus nmi-safe clock source. Falling back to the non-nmi-safe clock source, which discards events traced from NMI context. Upgrade your kernel to resolve this situation." +#endif diff --git a/ltt/lttng-2.11.0/wrapper/trace-clock.h b/ltt/lttng-2.11.0/wrapper/trace-clock.h new file mode 100644 index 000000000000..187fc82b650d --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/trace-clock.h @@ -0,0 +1,219 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/trace-clock.h + * + * Contains LTTng trace clock mapping to LTTng trace clock or mainline monotonic + * clock. This wrapper depends on CONFIG_HIGH_RES_TIMERS=y. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_TRACE_CLOCK_H +#define _LTTNG_TRACE_CLOCK_H + +#ifdef CONFIG_HAVE_TRACE_CLOCK +#include +#else /* CONFIG_HAVE_TRACE_CLOCK */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern struct lttng_trace_clock *lttng_trace_clock; + +/* + * Upstream Linux commit 27727df240c7 ("Avoid taking lock in NMI path with + * CONFIG_DEBUG_TIMEKEEPING") introduces a buggy ktime_get_mono_fast_ns(). + * This is fixed by patch "timekeeping: Fix __ktime_get_fast_ns() regression". + */ +#if (LTTNG_KERNEL_RANGE(4,8,0, 4,8,2) \ + || LTTNG_KERNEL_RANGE(4,7,4, 4,7,8) \ + || LTTNG_KERNEL_RANGE(4,4,20, 4,4,25) \ + || LTTNG_KERNEL_RANGE(4,1,32, 4,1,35)) +#define LTTNG_CLOCK_NMI_SAFE_BROKEN +#endif + +/* + * We need clock values to be monotonically increasing per-cpu, which is + * not strictly guaranteed by ktime_get_mono_fast_ns(). It is + * straightforward to do on architectures with a 64-bit cmpxchg(), but + * not so on architectures without 64-bit cmpxchg. For now, only enable + * this feature on 64-bit architectures. + */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) \ + && BITS_PER_LONG == 64 \ + && !defined(LTTNG_CLOCK_NMI_SAFE_BROKEN)) +#define LTTNG_USE_NMI_SAFE_CLOCK +#endif + +#ifdef LTTNG_USE_NMI_SAFE_CLOCK + +DECLARE_PER_CPU(u64, lttng_last_tsc); + +/* + * Sometimes called with preemption enabled. Can be interrupted. + */ +static inline u64 trace_clock_monotonic_wrapper(void) +{ + u64 now, last, result; + u64 *last_tsc_ptr; + + /* Use fast nmi-safe monotonic clock provided by the Linux kernel. */ + preempt_disable(); + last_tsc_ptr = lttng_this_cpu_ptr(<tng_last_tsc); + last = *last_tsc_ptr; + /* + * Read "last" before "now". It is not strictly required, but it ensures + * that an interrupt coming in won't artificially trigger a case where + * "now" < "last". This kind of situation should only happen if the + * mono_fast time source goes slightly backwards. + */ + barrier(); + now = ktime_get_mono_fast_ns(); + if (U64_MAX / 2 < now - last) + now = last; + result = cmpxchg64_local(last_tsc_ptr, last, now); + preempt_enable(); + if (result == last) { + /* Update done. */ + return now; + } else { + /* + * Update not done, due to concurrent update. We can use + * "result", since it has been sampled concurrently with our + * time read, so it should not be far from "now". + */ + return result; + } +} + +#else /* #ifdef LTTNG_USE_NMI_SAFE_CLOCK */ +static inline u64 trace_clock_monotonic_wrapper(void) +{ + ktime_t ktime; + + /* + * Refuse to trace from NMIs with this wrapper, because an NMI could + * nest over the xtime write seqlock and deadlock. + */ + if (in_nmi()) + return (u64) -EIO; + + ktime = ktime_get(); + return ktime_to_ns(ktime); +} +#endif /* #else #ifdef LTTNG_USE_NMI_SAFE_CLOCK */ + +static inline u64 trace_clock_read64_monotonic(void) +{ + return (u64) trace_clock_monotonic_wrapper(); +} + +static inline u64 trace_clock_freq_monotonic(void) +{ + return (u64) NSEC_PER_SEC; +} + +static inline int trace_clock_uuid_monotonic(char *uuid) +{ + return wrapper_get_bootid(uuid); +} + +static inline const char *trace_clock_name_monotonic(void) +{ + return "monotonic"; +} + +static inline const char *trace_clock_description_monotonic(void) +{ + return "Monotonic Clock"; +} + +#ifdef LTTNG_USE_NMI_SAFE_CLOCK +static inline int get_trace_clock(void) +{ + printk_once(KERN_WARNING "LTTng: Using mainline kernel monotonic fast clock, which is NMI-safe.\n"); + return 0; +} +#else /* #ifdef LTTNG_USE_NMI_SAFE_CLOCK */ +static inline int get_trace_clock(void) +{ + printk_once(KERN_WARNING "LTTng: Using mainline kernel monotonic clock. NMIs will not be traced.\n"); + return 0; +} +#endif /* #else #ifdef LTTNG_USE_NMI_SAFE_CLOCK */ + +static inline void put_trace_clock(void) +{ +} + +static inline u64 trace_clock_read64(void) +{ + struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock); + + if (likely(!ltc)) { + return trace_clock_read64_monotonic(); + } else { + return ltc->read64(); + } +} + +static inline u64 trace_clock_freq(void) +{ + struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock); + + if (!ltc) { + return trace_clock_freq_monotonic(); + } else { + return ltc->freq(); + } +} + +static inline int trace_clock_uuid(char *uuid) +{ + struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock); + + /* Use default UUID cb when NULL */ + if (!ltc || !ltc->uuid) { + return trace_clock_uuid_monotonic(uuid); + } else { + return ltc->uuid(uuid); + } +} + +static inline const char *trace_clock_name(void) +{ + struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock); + + if (!ltc) { + return trace_clock_name_monotonic(); + } else { + return ltc->name(); + } +} + +static inline const char *trace_clock_description(void) +{ + struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock); + + if (!ltc) { + return trace_clock_description_monotonic(); + } else { + return ltc->description(); + } +} + +#endif /* CONFIG_HAVE_TRACE_CLOCK */ + +#endif /* _LTTNG_TRACE_CLOCK_H */ diff --git a/ltt/lttng-2.11.0/wrapper/tracepoint.h b/ltt/lttng-2.11.0/wrapper/tracepoint.h new file mode 100644 index 000000000000..758038b68f08 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/tracepoint.h @@ -0,0 +1,141 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/tracepoint.h + * + * wrapper around DECLARE_EVENT_CLASS. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_TRACEPOINT_H +#define _LTTNG_WRAPPER_TRACEPOINT_H + +#include +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) + +#define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print) + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) +#define LTTNG_DEFINE_TRACE(name, proto, args) \ + DEFINE_TRACE(name, PARAMS(proto), PARAMS(args)) +#else +#define LTTNG_DEFINE_TRACE(name, proto, args) \ + DEFINE_TRACE(name) +#endif + +#ifndef HAVE_KABI_2635_TRACEPOINT + +#define kabi_2635_tracepoint_probe_register tracepoint_probe_register +#define kabi_2635_tracepoint_probe_unregister tracepoint_probe_unregister + +#endif /* HAVE_KABI_2635_TRACEPOINT */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) + +#include + +#define lttng_wrapper_tracepoint_probe_register lttng_tracepoint_probe_register +#define lttng_wrapper_tracepoint_probe_unregister lttng_tracepoint_probe_unregister + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +#define lttng_wrapper_tracepoint_probe_register kabi_2635_tracepoint_probe_register +#define lttng_wrapper_tracepoint_probe_unregister kabi_2635_tracepoint_probe_unregister + +static inline +int lttng_tracepoint_init(void) +{ + return 0; +} + +static inline +void lttng_tracepoint_exit(void) +{ +} + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)) */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) && defined(CONFIG_MODULE_SIG)) + +#include +#include + +static inline +int wrapper_tracepoint_module_notify(struct notifier_block *nb, + unsigned long val, struct module *mod) +{ + int (*tracepoint_module_notify_sym)(struct notifier_block *nb, + unsigned long val, struct module *mod); + + tracepoint_module_notify_sym = + (void *) kallsyms_lookup_funcptr("tracepoint_module_notify"); + if (tracepoint_module_notify_sym) { + return tracepoint_module_notify_sym(nb, val, mod); + } else { + printk_once(KERN_WARNING "LTTng: tracepoint_module_notify symbol lookup failed. It probably means you kernel don't need this work-around. Please consider upgrading LTTng modules to make this warning go away.\n"); + return -ENOSYS; + } +} + +/* + * No canary for 'tracepoint_module_notify()', it's only defined in 'kernel/tracepoint.c'. + * + * static inline + * int __canary__tracepoint_module_notify(struct notifier_block *nb, + * unsigned long val, struct module *mod) + * { + * return tracepoint_module_notify(nb, val, mod); + * } + */ + +#endif /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) && defined(CONFIG_MODULE_SIG)) */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) && defined(CONFIG_MODULE_SIG) && defined(MODULE)) + +static inline +int wrapper_lttng_fixup_sig(struct module *mod) +{ + int ret = 0; + + /* + * This is for module.c confusing force loaded modules with + * unsigned modules. + */ + if (!THIS_MODULE->sig_ok && + THIS_MODULE->taints & (1U << TAINT_FORCED_MODULE)) { + THIS_MODULE->taints &= ~(1U << TAINT_FORCED_MODULE); + ret = wrapper_tracepoint_module_notify(NULL, + MODULE_STATE_COMING, mod); + THIS_MODULE->taints |= (1U << TAINT_FORCED_MODULE); + } + return ret; +} + +#else /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) && defined(CONFIG_MODULE_SIG) && defined(MODULE)) */ + +static inline +int wrapper_lttng_fixup_sig(struct module *mod) +{ + return 0; +} + +#endif /* #else #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) && defined(CONFIG_MODULE_SIG) && defined(MODULE)) */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) +static inline struct tracepoint *lttng_tracepoint_ptr_deref(tracepoint_ptr_t *p) +{ + return tracepoint_ptr_deref(p); +} +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) */ +static inline struct tracepoint *lttng_tracepoint_ptr_deref(struct tracepoint * const *p) +{ + return *p; +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) */ + +#endif /* _LTTNG_WRAPPER_TRACEPOINT_H */ diff --git a/ltt/lttng-2.11.0/wrapper/types.h b/ltt/lttng-2.11.0/wrapper/types.h new file mode 100644 index 000000000000..b98e68137df7 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/types.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/types.h + * + * Copyright (C) 2017 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_TYPES_H +#define _LTTNG_WRAPPER_TYPES_H + +#define LTTNG_SIZE_MAX (~(size_t)0) + +#endif /* _LTTNG_WRAPPER_TYPES_H */ diff --git a/ltt/lttng-2.11.0/wrapper/uaccess.h b/ltt/lttng-2.11.0/wrapper/uaccess.h new file mode 100644 index 000000000000..c562e3496485 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/uaccess.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/uaccess.h + * + * wrapper around linux/uaccess.h. + * + * Copyright (C) 2019 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_UACCESS_H +#define _LTTNG_WRAPPER_UACCESS_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,147,0,0, 4,19,0,0,0,0)) + +#define VERIFY_READ 0 +#define VERIFY_WRITE 1 +#define lttng_access_ok(type, addr, size) access_ok(addr, size) + +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) */ + +#define lttng_access_ok(type, addr, size) access_ok(type, addr, size) + +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) */ + +#endif /* _LTTNG_WRAPPER_UACCESS_H */ diff --git a/ltt/lttng-2.11.0/wrapper/uprobes.h b/ltt/lttng-2.11.0/wrapper/uprobes.h new file mode 100644 index 000000000000..d180e1a93ac9 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/uprobes.h @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/uprobes.h + * + * wrapper around uprobes. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2013 Yannick Brosseau + * Copyright (C) 2017 Francis Deslauriers + * + */ + +#ifndef _LTTNG_WRAPPER_UPROBES_H +#define _LTTNG_WRAPPER_UPROBES_H + +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)) +#include + +/* Use kallsym lookup for version before 3.9. */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + +static inline +int wrapper_uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + return uprobe_register(inode, offset, uc); +} + +static inline +void wrapper_uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + uprobe_unregister(inode, offset, uc); +} + +#else /* Version < 3.9, use kallsym lookup. */ +#include "kallsyms.h" + +static inline +int wrapper_uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + int (*uprobe_register_sym)(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); + + uprobe_register_sym = (void *) kallsyms_lookup_funcptr("uprobe_register"); + + if (uprobe_register_sym) { + return uprobe_register_sym(inode, offset, uc); + } else { + printk(KERN_WARNING "LTTng: uprobe_register symbol lookup failed.\n"); + return -EINVAL; + } +} + +/* + * Canary function to check for 'uprobe_register()' at compile time. + * + * From 'include/linux/uprobes.h': + * + * extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); + */ +static inline +int __canary__uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + return uprobe_register(inode, offset, uc); +} + +static inline +void wrapper_uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + int (*uprobe_unregister_sym)(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); + + uprobe_unregister_sym = (void *) kallsyms_lookup_funcptr("uprobe_unregister"); + + if (uprobe_unregister_sym) { + uprobe_unregister_sym(inode, offset, uc); + } else { + printk(KERN_WARNING "LTTng: uprobe_unregister symbol lookup failed.\n"); + WARN_ON(1); + } +} + +/* + * Canary function to check for 'uprobe_unregister()' at compile time. + * + * From 'include/linux/uprobes.h': + * + * extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); + */ +static inline +void __canary__uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) +{ + uprobe_unregister(inode, offset, uc); +} + +#endif +#else +/* Version < 3.5, before uprobe was added. */ +struct uprobe_consumer {}; + +#endif +#endif diff --git a/ltt/lttng-2.11.0/wrapper/uuid.h b/ltt/lttng-2.11.0/wrapper/uuid.h new file mode 100644 index 000000000000..d8ac53d33134 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/uuid.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * wrapper/uuid.h + * + * Copyright (C) 2020 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_UUID_H +#define _LTTNG_WRAPPER_UUID_H + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) +static inline +void lttng_guid_gen(guid_t *u) +{ + return guid_gen(u); +} +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) */ + +typedef uuid_le guid_t; + +static inline +void lttng_guid_gen(guid_t *u) +{ + return uuid_le_gen(u); +} +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0)) */ + +#endif /* _LTTNG_WRAPPER_UUID_H */ diff --git a/ltt/lttng-2.11.0/wrapper/vmalloc.h b/ltt/lttng-2.11.0/wrapper/vmalloc.h new file mode 100644 index 000000000000..1f0d0c4e6504 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/vmalloc.h @@ -0,0 +1,454 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/vmalloc.h + * + * wrapper around vmalloc_sync_all. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Copyright (C) 2011-2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_VMALLOC_H +#define _LTTNG_WRAPPER_VMALLOC_H + +#include +#include +#include + +#ifdef CONFIG_KALLSYMS + +#include +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) + +/* + * wrapper_vmalloc_sync_mappings was removed in v5.8, the vmalloc mappings + * are now synchronized when they are created or torn down. + */ +static inline +void wrapper_vmalloc_sync_mappings(void) +{} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) \ + || LTTNG_KERNEL_RANGE(5,5,12, 5,6,0) \ + || LTTNG_KERNEL_RANGE(5,4,28, 5,5,0) \ + || LTTNG_KERNEL_RANGE(5,2,37, 5,3,0) \ + || LTTNG_KERNEL_RANGE(4,19,113, 4,20,0) \ + || LTTNG_KERNEL_RANGE(4,14,175, 4,15,0) \ + || LTTNG_KERNEL_RANGE(4,9,218, 4,10,0) \ + || LTTNG_KERNEL_RANGE(4,4,218, 4,5,0)) \ + || LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,97, 4,16,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,48, 5,1,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,52, 5,4,0,0) + +static inline +void wrapper_vmalloc_sync_mappings(void) +{ + void (*vmalloc_sync_mappings_sym)(void); + + vmalloc_sync_mappings_sym = (void *) kallsyms_lookup_funcptr("vmalloc_sync_mappings"); + if (vmalloc_sync_mappings_sym) { + vmalloc_sync_mappings_sym(); + } else { +#ifdef CONFIG_X86 + /* + * Only x86 needs vmalloc_sync_mappings to make sure LTTng does not + * trigger recursive page faults. + */ + printk_once(KERN_WARNING "LTTng: vmalloc_sync_mappings symbol lookup failed.\n"); + printk_once(KERN_WARNING "Page fault handler and NMI tracing might trigger faults.\n"); +#endif + } +} + +/* + * Canary function to check for 'vmalloc_sync_mappings()' at compile time. + * + * From 'include/linux/vmalloc.h': + * + * void vmalloc_sync_mappings(void); + */ +static inline +void __canary__vmalloc_sync_mappings(void) +{ + vmalloc_sync_mappings(); +} + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ + +/* + * Map vmalloc_sync_mappings to vmalloc_sync_all() on kernels before 5.6. + */ +static inline +void wrapper_vmalloc_sync_mappings(void) +{ + void (*vmalloc_sync_all_sym)(void); + + vmalloc_sync_all_sym = (void *) kallsyms_lookup_funcptr("vmalloc_sync_all"); + if (vmalloc_sync_all_sym) { + vmalloc_sync_all_sym(); + } else { +#ifdef CONFIG_X86 + /* + * Only x86 needs vmalloc_sync_all to make sure LTTng does not + * trigger recursive page faults. + */ + printk_once(KERN_WARNING "LTTng: vmalloc_sync_all symbol lookup failed.\n"); + printk_once(KERN_WARNING "Page fault handler and NMI tracing might trigger faults.\n"); +#endif + } +} + +/* + * Canary function to check for 'vmalloc_sync_all()' at compile time. + * + * From 'include/linux/vmalloc.h': + * + * void vmalloc_sync_all(void); + */ +static inline +void __canary__vmalloc_sync_all(void) +{ + vmalloc_sync_all(); +} + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ + +#else /* CONFIG_KALLSYMS */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) + +/* + * wrapper_vmalloc_sync_mappings was removed in v5.8, the vmalloc mappings + * are now synchronized when they are created or torn down. + */ +static inline +void wrapper_vmalloc_sync_mappings(void) +{} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) \ + || LTTNG_KERNEL_RANGE(5,5,12, 5,6,0) \ + || LTTNG_KERNEL_RANGE(5,4,28, 5,5,0) \ + || LTTNG_KERNEL_RANGE(5,2,37, 5,3,0) \ + || LTTNG_KERNEL_RANGE(4,19,113, 4,20,0) \ + || LTTNG_KERNEL_RANGE(4,14,175, 4,15,0) \ + || LTTNG_KERNEL_RANGE(4,9,218, 4,10,0) \ + || LTTNG_KERNEL_RANGE(4,4,218, 4,5,0)) \ + || LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,97, 4,18,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,48, 5,1,0,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,52, 5,4,0,0) + +static inline +void wrapper_vmalloc_sync_mappings(void) +{ + return vmalloc_sync_mappings(); +} + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ + +static inline +void wrapper_vmalloc_sync_mappings(void) +{ + return vmalloc_sync_all(); +} + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ + +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +static inline +void *lttng_kvmalloc_node(unsigned long size, gfp_t flags, int node) +{ + void *ret; + + ret = kvmalloc_node(size, flags, node); + if (is_vmalloc_addr(ret)) { + /* + * Make sure we don't trigger recursive page faults in the + * tracing fast path. + */ + wrapper_vmalloc_sync_mappings(); + } + return ret; +} + +static inline +void *lttng_kvzalloc_node(unsigned long size, gfp_t flags, int node) +{ + return lttng_kvmalloc_node(size, flags | __GFP_ZERO, node); +} + +static inline +void *lttng_kvmalloc(unsigned long size, gfp_t flags) +{ + return lttng_kvmalloc_node(size, flags, NUMA_NO_NODE); +} + +static inline +void *lttng_kvzalloc(unsigned long size, gfp_t flags) +{ + return lttng_kvzalloc_node(size, flags, NUMA_NO_NODE); +} + +static inline +void lttng_kvfree(const void *addr) +{ + kvfree(addr); +} + +#else + +#include + +static inline +void print_vmalloc_node_range_warning(void) +{ + printk_once(KERN_WARNING "LTTng: __vmalloc_node_range symbol lookup failed.\n"); + printk_once(KERN_WARNING "Tracer performance will be degraded on NUMA systems.\n"); + printk_once(KERN_WARNING "Please rebuild your kernel with CONFIG_KALLSYMS enabled.\n"); +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) + +/* + * kallsyms wrapper of __vmalloc_node with a fallback to kmalloc_node. + */ +static inline +void *__lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller) +{ +#ifdef CONFIG_KALLSYMS + /* + * If we have KALLSYMS, get * __vmalloc_node_range which is not exported. + */ + void *(*lttng__vmalloc_node_range)(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller); + + lttng__vmalloc_node_range = (void *) kallsyms_lookup_funcptr("__vmalloc_node_range"); + if (lttng__vmalloc_node_range) + return lttng__vmalloc_node_range(size, align, start, end, gfp_mask, prot, + vm_flags, node, caller); +#endif + if (node != NUMA_NO_NODE) + print_vmalloc_node_range_warning(); + return __vmalloc(size, gfp_mask, prot); +} + +/* + * Canary function to check for '__vmalloc_node_range()' at compile time. + * + * From 'include/linux/vmalloc.h': + * + * extern void *__vmalloc_node_range(unsigned long size, unsigned long align, + * unsigned long start, unsigned long end, gfp_t gfp_mask, + * pgprot_t prot, unsigned long vm_flags, int node, + * const void *caller); + */ +static inline +void *__canary____lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller) +{ + return __vmalloc_node_range(size, align, start, end, gfp_mask, prot, + vm_flags, node, caller); +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + +/* + * kallsyms wrapper of __vmalloc_node with a fallback to kmalloc_node. + */ +static inline +void *__lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller) +{ +#ifdef CONFIG_KALLSYMS + /* + * If we have KALLSYMS, get * __vmalloc_node_range which is not exported. + */ + void *(*lttng__vmalloc_node_range)(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, int node, const void *caller); + + lttng__vmalloc_node_range = (void *) kallsyms_lookup_funcptr("__vmalloc_node_range"); + if (lttng__vmalloc_node_range) + return lttng__vmalloc_node_range(size, align, start, end, gfp_mask, prot, + node, caller); +#endif + if (node != NUMA_NO_NODE) + print_vmalloc_node_range_warning(); + return __vmalloc(size, gfp_mask, prot); +} + +/* + * Canary function to check for '__vmalloc_node_range()' at compile time. + * + * From 'include/linux/vmalloc.h': + * + * extern void *__vmalloc_node_range(unsigned long size, unsigned long align, + * unsigned long start, unsigned long end, gfp_t gfp_mask, + * pgprot_t prot, unsigned long vm_flags, int node, + * const void *caller); + */ +static inline +void *__canary____lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, int node, const void *caller) +{ + return __vmalloc_node_range(size, align, start, end, gfp_mask, prot, + node, caller); +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) + +/* + * kallsyms wrapper of __vmalloc_node with a fallback to kmalloc_node. + */ +static inline +void *__lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + void *caller) +{ +#ifdef CONFIG_KALLSYMS + /* + * If we have KALLSYMS, get * __vmalloc_node_range which is not exported. + */ + void *(*lttng__vmalloc_node_range)(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, int node, void *caller); + + lttng__vmalloc_node_range = (void *) kallsyms_lookup_funcptr("__vmalloc_node_range"); + if (lttng__vmalloc_node_range) + return lttng__vmalloc_node_range(size, align, start, end, gfp_mask, prot, + node, caller); +#endif + if (node != NUMA_NO_NODE) + print_vmalloc_node_range_warning(); + return __vmalloc(size, gfp_mask, prot); +} + +/* + * Canary function to check for '__vmalloc_node_range()' at compile time. + * + * From 'include/linux/vmalloc.h': + * + * extern void *__vmalloc_node_range(unsigned long size, unsigned long align, + * unsigned long start, unsigned long end, gfp_t gfp_mask, + * pgprot_t prot, unsigned long vm_flags, int node, + * void *caller); + */ +static inline +void *__canary____lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, int node, void *caller) +{ + return __vmalloc_node_range(size, align, start, end, gfp_mask, prot, + node, caller); +} + +#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) */ + +/* + * Basic fallback for kernel prior to 2.6.38 without __vmalloc_node_range() + */ +static inline +void *__lttng_vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + void *caller) +{ + return __vmalloc(size, gfp_mask, prot); +} + +#endif + +/** + * lttng_kvmalloc_node - attempt to allocate physically contiguous memory, but upon + * failure, fall back to non-contiguous (vmalloc) allocation. + * @size: size of the request. + * @flags: gfp mask for the allocation - must be compatible with GFP_KERNEL. + * + * Uses kmalloc to get the memory but if the allocation fails then falls back + * to the vmalloc allocator. Use lttng_kvfree to free the memory. + * + * Reclaim modifiers - __GFP_NORETRY, __GFP_REPEAT and __GFP_NOFAIL are not supported + */ +static inline +void *lttng_kvmalloc_node(unsigned long size, gfp_t flags, int node) +{ + void *ret; + + /* + * vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables) + * so the given set of flags has to be compatible. + */ + WARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL); + + /* + * If the allocation fits in a single page, do not fallback. + */ + if (size <= PAGE_SIZE) { + return kmalloc_node(size, flags, node); + } + + /* + * Make sure that larger requests are not too disruptive - no OOM + * killer and no allocation failure warnings as we have a fallback + */ + ret = kmalloc_node(size, flags | __GFP_NOWARN | __GFP_NORETRY, node); + if (!ret) { + ret = __lttng_vmalloc_node_range(size, 1, + VMALLOC_START, VMALLOC_END, + flags | __GFP_HIGHMEM, PAGE_KERNEL, 0, + node, __builtin_return_address(0)); + /* + * Make sure we don't trigger recursive page faults in the + * tracing fast path. + */ + wrapper_vmalloc_sync_mappings(); + } + return ret; +} + +static inline +void *lttng_kvzalloc_node(unsigned long size, gfp_t flags, int node) +{ + return lttng_kvmalloc_node(size, flags | __GFP_ZERO, node); +} + +static inline +void *lttng_kvmalloc(unsigned long size, gfp_t flags) +{ + return lttng_kvmalloc_node(size, flags, NUMA_NO_NODE); +} + +static inline +void *lttng_kvzalloc(unsigned long size, gfp_t flags) +{ + return lttng_kvzalloc_node(size, flags, NUMA_NO_NODE); +} + +static inline +void lttng_kvfree(const void *addr) +{ + if (is_vmalloc_addr(addr)) { + vfree(addr); + } else { + kfree(addr); + } +} +#endif + +#endif /* _LTTNG_WRAPPER_VMALLOC_H */ diff --git a/ltt/lttng-2.11.0/wrapper/vzalloc.h b/ltt/lttng-2.11.0/wrapper/vzalloc.h new file mode 100644 index 000000000000..eedaf8da5717 --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/vzalloc.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/vzalloc.h + * + * Copyright (C) 2015 Michael Jeanson + */ + +#ifndef _LTTNG_WRAPPER_VZALLOC_H +#define _LTTNG_WRAPPER_VZALLOC_H + +#include +#include + +#if LTTNG_KERNEL_RANGE(2,6,36, 2,6,37) +static inline +void *lttng_vzalloc(unsigned long size) +{ + void *ret; + ret = vmalloc(size); + if (!ret) + return NULL; + memset(ret, 0, size); + return ret; +} +#else +static inline +void *lttng_vzalloc(unsigned long size) +{ + return vzalloc(size); +} +#endif + + +#endif /* _LTTNG_WRAPPER_VZALLOC_H */ diff --git a/ltt/lttng-2.11.0/wrapper/writeback.h b/ltt/lttng-2.11.0/wrapper/writeback.h new file mode 100644 index 000000000000..328c9323549e --- /dev/null +++ b/ltt/lttng-2.11.0/wrapper/writeback.h @@ -0,0 +1,101 @@ +/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) + * + * wrapper/writeback.h + * + * wrapper around global_dirty_limit read. Using KALLSYMS with KALLSYMS_ALL + * to get its address when available, else we need to have a kernel that + * exports this variable to GPL modules. + * + * Copyright (C) 2013 Mentor Graphics Corp. + */ + +#ifndef _LTTNG_WRAPPER_WRITEBACK_H +#define _LTTNG_WRAPPER_WRITEBACK_H + +#include + +#ifdef CONFIG_KALLSYMS_ALL +#include +#include + + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) + +static struct wb_domain *global_wb_domain_sym; + +static inline +unsigned long wrapper_global_dirty_limit(void) +{ + if (!global_wb_domain_sym) + global_wb_domain_sym = + (void *) kallsyms_lookup_dataptr("global_wb_domain"); + if (global_wb_domain_sym) { + return global_wb_domain_sym->dirty_limit; + } else { + printk_once(KERN_WARNING "LTTng: global_wb_domain symbol lookup failed.\n"); + return 0; + } +} + +/* + * Canary function to check for 'global_wb_domain' at compile time. + * + * From 'include/linux/writeback.h': + * + * extern struct wb_domain global_wb_domain; + */ +static inline +unsigned long __canary__global_wb_domain(void) +{ + return global_wb_domain.dirty_limit; +} + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) + +static unsigned long *global_dirty_limit_sym; + +static inline +unsigned long wrapper_global_dirty_limit(void) +{ + if (!global_dirty_limit_sym) + global_dirty_limit_sym = + (void *) kallsyms_lookup_dataptr("global_dirty_limit"); + if (global_dirty_limit_sym) { + return *global_dirty_limit_sym; + } else { + printk_once(KERN_WARNING "LTTng: global_dirty_limit symbol lookup failed.\n"); + return 0; + } +} + +/* + * Canary function to check for 'global_dirty_limit' at compile time. + * + * From 'include/linux/writeback.h': + * + * extern unsigned long global_dirty_limit; + */ +static inline +unsigned long __canary__global_dirty_limit(void) +{ + return global_dirty_limit; +} + +#endif + +#else /* CONFIG_KALLSYMS_ALL */ + +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) +static inline +unsigned long wrapper_global_dirty_limit(void) +{ + return global_dirty_limit; +} +#endif + +#endif + +#endif /* _LTTNG_WRAPPER_WRITEBACK_H */