Skip to content

Instantly share code, notes, and snippets.

@bcantrill
Created January 7, 2022 14:53
Show Gist options
  • Select an option

  • Save bcantrill/849a8b358c345be4a3c78a4119922425 to your computer and use it in GitHub Desktop.

Select an option

Save bcantrill/849a8b358c345be4a3c78a4119922425 to your computer and use it in GitHub Desktop.

Revisions

  1. bcantrill created this gist Jan 7, 2022.
    30 changes: 30 additions & 0 deletions libusb.d
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@

    #pragma D option nspec=100
    #pragma D option flowindent

    pid$target::libusb_submit_transfer:entry
    {
    self->spec = speculation();
    }

    pid$target:*libusb*::entry,
    pid$target:*libusb*::return
    /self->spec/
    {
    speculate(self->spec);
    printf("%x %x", arg0, arg1);
    }

    pid$target::libusb_submit_transfer:return
    /self->spec && arg1 == 0/
    {
    discard(self->spec);
    self->spec = 0;
    }

    pid$target::libusb_submit_transfer:return
    /self->spec/
    {
    commit(self->spec);
    self->spec = 0;
    }
    362 changes: 362 additions & 0 deletions libusb.out
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,362 @@
    dtrace: pid 100867 has exited
    CPU FUNCTION
    0 -> libusb_submit_transfer 2ebdef8 2ebac50
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 -> add_to_flying_list 2ebde90 0
    0 -> calculate_timeout 2ebde90 0
    0 <- calculate_timeout ef 144009dd
    0 -> usbi_using_timer 2e83e10 2e83ea8
    0 -> usbi_timer_valid 2e83e24 2e83ea8
    0 <- usbi_timer_valid 17 1
    0 <- usbi_using_timer 1d 1
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 -> usbi_arm_timer 2e83e24 2ebdeb8
    0 <- usbi_arm_timer 95 0
    0 <- add_to_flying_list 23d 0
    0 -> sunos_submit_transfer 2ebde90 0
    0 -> sunos_check_device_and_status_open 2ebac50 0
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 -> usbi_get_device_handle_priv 2ebac50 4
    0 <- usbi_get_device_handle_priv 11 2ebac90
    0 -> sunos_usb_ep_index 0 4
    0 <- sunos_usb_ep_index 1f 0
    0 -> sunos_find_interface 2ebac50 0
    0 -> libusb_get_active_config_descriptor 2e805c0 fffffc7fffdf84b0
    0 -> get_active_config_descriptor 2e805c0 fffffc7fffdf8466
    0 -> sunos_get_active_config_descriptor 2e805c0 fffffc7fffdf8466
    0 -> usbi_get_device_priv 2e805c0 fffffc7fffdf8466
    0 <- usbi_get_device_priv 11 2e80628
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 <- sunos_get_active_config_descriptor 1fc 9
    0 <- get_active_config_descriptor ca 9
    0 -> libusb_cpu_to_le16 65 4
    0 <- libusb_cpu_to_le16 21 65
    0 -> get_active_config_descriptor 2e805c0 2ebce50
    0 -> sunos_get_active_config_descriptor 2e805c0 2ebce50
    0 -> usbi_get_device_priv 2e805c0 2ebce50
    0 <- usbi_get_device_priv 11 2e80628
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 <- sunos_get_active_config_descriptor 1fc 65
    0 <- get_active_config_descriptor ca 65
    0 -> raw_desc_to_config 2e83e10 2ebce50
    0 -> parse_configuration 2e83e10 2e7ef90
    0 -> parse_descriptor 2ebce50 fffffc7fef2591cb
    0 <- parse_descriptor 16e 0
    0 -> parse_interface 2e83e10 2ea2990
    0 -> parse_descriptor 2ebce59 fffffc7fef2590e8
    0 <- parse_descriptor 16e 0
    0 -> parse_endpoint 2e83e10 2ea2670
    0 -> parse_descriptor 2ebce62 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 -> parse_endpoint 2e83e10 2ea2690
    0 -> parse_descriptor 2ebce69 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 <- parse_interface 4d4 17
    0 -> parse_interface 2e83e10 2ea29a0
    0 -> parse_descriptor 2ebce70 fffffc7fef2590e8
    0 <- parse_descriptor 16e 0
    0 -> parse_endpoint 2e83e10 2ea29e0
    0 -> parse_descriptor 2ebce79 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 -> parse_endpoint 2e83e10 2ea2a00
    0 -> parse_descriptor 2ebce80 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 <- parse_interface 4d4 17
    0 -> parse_interface 2e83e10 2ea29b0
    0 -> parse_descriptor 2ebce87 fffffc7fef2590e8
    0 <- parse_descriptor 16e 0
    0 -> parse_endpoint 2e83e10 2ea2a30
    0 -> parse_descriptor 2ebce90 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 -> parse_endpoint 2e83e10 2ea2a50
    0 -> parse_descriptor 2ebce97 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 <- parse_interface 4d4 17
    0 -> parse_interface 2e83e10 2ea29c0
    0 -> parse_descriptor 2ebce9e fffffc7fef2590e8
    0 <- parse_descriptor 16e 0
    0 -> parse_endpoint 2e83e10 2ea2a80
    0 -> parse_descriptor 2ebcea7 fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 -> parse_endpoint 2e83e10 2ea2aa0
    0 -> parse_descriptor 2ebceae fffffc7fef259086
    0 <- parse_descriptor 16e 0
    0 <- parse_endpoint 350 7
    0 <- parse_interface 4d4 17
    0 <- parse_configuration 443 0
    0 <- raw_desc_to_config d7 0
    0 <- libusb_get_active_config_descriptor b4 0
    0 -> libusb_free_config_descriptor 2e7ef90 75
    0 -> clear_configuration 2e7ef90 75
    0 -> clear_interface 2ea2990 75
    0 -> clear_endpoint 2ea2670 75
    0 <- clear_endpoint 1e 0
    0 -> clear_endpoint 2ea2690 75
    0 <- clear_endpoint 1e 0
    0 <- clear_interface df 2ea2990
    0 -> clear_interface 2ea29a0 38
    0 -> clear_endpoint 2ea29e0 38
    0 <- clear_endpoint 1e 0
    0 -> clear_endpoint 2ea2a00 38
    0 <- clear_endpoint 1e 0
    0 <- clear_interface df 2ea29a0
    0 -> clear_interface 2ea29b0 38
    0 -> clear_endpoint 2ea2a30 38
    0 <- clear_endpoint 1e 0
    0 -> clear_endpoint 2ea2a50 38
    0 <- clear_endpoint 1e 0
    0 <- clear_interface df 2ea29b0
    0 -> clear_interface 2ea29c0 38
    0 -> clear_endpoint 2ea2a80 38
    0 <- clear_endpoint 1e 0
    0 -> clear_endpoint 2ea2aa0 38
    0 <- clear_endpoint 1e 0
    0 <- clear_interface df 2ea29c0
    0 <- clear_configuration 73 0
    0 <- libusb_free_config_descriptor 2f 2e7ef80
    0 <- sunos_find_interface 12f fffffffe
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 <- sunos_check_device_and_status_open 643 d
    0 -> _errno_to_libusb d 4
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 <- _errno_to_libusb 9f fffffffd
    0 <- sunos_submit_transfer 1cc fffffffd
    0 -> remove_from_flying_list 2ebde90 0
    0 -> arm_timer_for_next_timeout 2e83e10 0
    0 -> usbi_using_timer 2e83e10 0
    0 -> usbi_timer_valid 2e83e24 0
    0 <- usbi_timer_valid 17 1
    0 <- usbi_using_timer 1d 1
    0 -> usbi_log 0 4
    0 -> log_v 0 4
    0 -> usbi_get_context 0 4
    0 <- usbi_get_context 1d 2e83e10
    0 <- log_v 354 0
    0 <- usbi_log b4 0
    0 -> usbi_disarm_timer 2e83e24 4
    0 <- usbi_disarm_timer 8a 0
    0 <- arm_timer_for_next_timeout 11f 0
    0 <- remove_from_flying_list b5 0
    0 <- libusb_submit_transfer 18b fffffffd
    1 -> libusb_submit_transfer 2ebdef8 2ebac50
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 -> add_to_flying_list 2ebde90 0
    1 -> calculate_timeout 2ebde90 0
    1 <- calculate_timeout ef 17b6a76d
    1 -> usbi_using_timer 2e83c50 2e83ce8
    1 -> usbi_timer_valid 2e83c64 2e83ce8
    1 <- usbi_timer_valid 17 1
    1 <- usbi_using_timer 1d 1
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 -> usbi_arm_timer 2e83c64 2ebdeb8
    1 <- usbi_arm_timer 95 0
    1 <- add_to_flying_list 23d 0
    1 -> sunos_submit_transfer 2ebde90 0
    1 -> sunos_check_device_and_status_open 2ebac50 0
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 -> usbi_get_device_handle_priv 2ebac50 4
    1 <- usbi_get_device_handle_priv 11 2ebac90
    1 -> sunos_usb_ep_index 0 4
    1 <- sunos_usb_ep_index 1f 0
    1 -> sunos_find_interface 2ebac50 0
    1 -> libusb_get_active_config_descriptor 2e80480 fffffc7fffdf8520
    1 -> get_active_config_descriptor 2e80480 fffffc7fffdf84d6
    1 -> sunos_get_active_config_descriptor 2e80480 fffffc7fffdf84d6
    1 -> usbi_get_device_priv 2e80480 fffffc7fffdf84d6
    1 <- usbi_get_device_priv 11 2e804e8
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 <- sunos_get_active_config_descriptor 1fc 9
    1 <- get_active_config_descriptor ca 9
    1 -> libusb_cpu_to_le16 65 4
    1 <- libusb_cpu_to_le16 21 65
    1 -> get_active_config_descriptor 2e80480 2ebce50
    1 -> sunos_get_active_config_descriptor 2e80480 2ebce50
    1 -> usbi_get_device_priv 2e80480 2ebce50
    1 <- usbi_get_device_priv 11 2e804e8
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 <- sunos_get_active_config_descriptor 1fc 65
    1 <- get_active_config_descriptor ca 65
    1 -> raw_desc_to_config 2e83c50 2ebce50
    1 -> parse_configuration 2e83c50 2e7e9d0
    1 -> parse_descriptor 2ebce50 fffffc7fef2591cb
    1 <- parse_descriptor 16e 0
    1 -> parse_interface 2e83c50 2e74160
    1 -> parse_descriptor 2ebce59 fffffc7fef2590e8
    1 <- parse_descriptor 16e 0
    1 -> parse_endpoint 2e83c50 2ea2ee0
    1 -> parse_descriptor 2ebce62 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 -> parse_endpoint 2e83c50 2ea2f00
    1 -> parse_descriptor 2ebce69 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 <- parse_interface 4d4 17
    1 -> parse_interface 2e83c50 2e74170
    1 -> parse_descriptor 2ebce70 fffffc7fef2590e8
    1 <- parse_descriptor 16e 0
    1 -> parse_endpoint 2e83c50 2e741b0
    1 -> parse_descriptor 2ebce79 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 -> parse_endpoint 2e83c50 2e741d0
    1 -> parse_descriptor 2ebce80 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 <- parse_interface 4d4 17
    1 -> parse_interface 2e83c50 2e74180
    1 -> parse_descriptor 2ebce87 fffffc7fef2590e8
    1 <- parse_descriptor 16e 0
    1 -> parse_endpoint 2e83c50 2e74200
    1 -> parse_descriptor 2ebce90 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 -> parse_endpoint 2e83c50 2e74220
    1 -> parse_descriptor 2ebce97 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 <- parse_interface 4d4 17
    1 -> parse_interface 2e83c50 2e74190
    1 -> parse_descriptor 2ebce9e fffffc7fef2590e8
    1 <- parse_descriptor 16e 0
    1 -> parse_endpoint 2e83c50 2e74250
    1 -> parse_descriptor 2ebcea7 fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 -> parse_endpoint 2e83c50 2e74270
    1 -> parse_descriptor 2ebceae fffffc7fef259086
    1 <- parse_descriptor 16e 0
    1 <- parse_endpoint 350 7
    1 <- parse_interface 4d4 17
    1 <- parse_configuration 443 0
    1 <- raw_desc_to_config d7 0
    1 <- libusb_get_active_config_descriptor b4 0
    1 -> libusb_free_config_descriptor 2e7e9d0 75
    1 -> clear_configuration 2e7e9d0 75
    1 -> clear_interface 2e74160 75
    1 -> clear_endpoint 2ea2ee0 75
    1 <- clear_endpoint 1e 0
    1 -> clear_endpoint 2ea2f00 75
    1 <- clear_endpoint 1e 0
    1 <- clear_interface df 2e74160
    1 -> clear_interface 2e74170 38
    1 -> clear_endpoint 2e741b0 38
    1 <- clear_endpoint 1e 0
    1 -> clear_endpoint 2e741d0 38
    1 <- clear_endpoint 1e 0
    1 <- clear_interface df 2e74170
    1 -> clear_interface 2e74180 38
    1 -> clear_endpoint 2e74200 38
    1 <- clear_endpoint 1e 0
    1 -> clear_endpoint 2e74220 38
    1 <- clear_endpoint 1e 0
    1 <- clear_interface df 2e74180
    1 -> clear_interface 2e74190 38
    1 -> clear_endpoint 2e74250 38
    1 <- clear_endpoint 1e 0
    1 -> clear_endpoint 2e74270 38
    1 <- clear_endpoint 1e 0
    1 <- clear_interface df 2e74190
    1 <- clear_configuration 73 0
    1 <- libusb_free_config_descriptor 2f 2e7e9c0
    1 <- sunos_find_interface 12f fffffffe
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 <- sunos_check_device_and_status_open 643 d
    1 -> _errno_to_libusb d 4
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 <- _errno_to_libusb 9f fffffffd
    1 <- sunos_submit_transfer 1cc fffffffd
    1 -> remove_from_flying_list 2ebde90 0
    1 -> arm_timer_for_next_timeout 2e83c50 0
    1 -> usbi_using_timer 2e83c50 0
    1 -> usbi_timer_valid 2e83c64 0
    1 <- usbi_timer_valid 17 1
    1 <- usbi_using_timer 1d 1
    1 -> usbi_log 0 4
    1 -> log_v 0 4
    1 -> usbi_get_context 0 4
    1 <- usbi_get_context 1d 2e83e10
    1 <- log_v 354 0
    1 <- usbi_log b4 0
    1 -> usbi_disarm_timer 2e83c64 4
    1 <- usbi_disarm_timer 8a 0
    1 <- arm_timer_for_next_timeout 11f 0
    1 <- remove_from_flying_list b5 0
    1 <- libusb_submit_transfer 18b fffffffd