Skip to content

humility hiffy couldn't find type for...a lot of types #589

@hawkw

Description

@hawkw

Running a build of humility from the current HEAD commit (098ca7e) against a Hubris archive (Gimletlet built from a recent branch), I see a number of errors in which humility hiffy complains that it couldn't find types for a large number of types that appear in IPC interfaces (including the return type of a new IPC I was trying to test):

eliza@hekate ~/Code/oxide/humility $ cargo run -- -t gimletlet hiffy -l | rg "couldn't find type"
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.11s
     Running `target/debug/humility -t gimletlet hiffy -l`
humility: WARNING: archive in environment variable overriding archive in environment file
humility: attached to 0483:3754:000B00154D46501520383832 via ST-Link V3
humility: WARNING: couldn't find type Option<FaultReport> for Jefe.read_fault_report
humility: WARNING: couldn't find type [u32; 3] for Sys.read_uid
humility: WARNING: couldn't find type Option<(Result<f32, NoData>, u64)> for Sensor.get_raw_reading
humility: WARNING: couldn't find type Option<(NoData, u64)> for Sensor.get_last_nodata
humility: WARNING: couldn't find type [u8; 64] for Sequencer.read_fpga_regs
humility: WARNING: couldn't find type RenesasBlackbox for Power.rendmp_blackbox_dump

Here's the complete output of humility hiffy -l showing all the IPC interfaces. Note that this is quite long.

Full `humility hiffy -l` output
eliza@hekate ~/Code/oxide/humility $ cargo run -- -t gimletlet hiffy
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.10s
     Running `target/debug/humility -t gimletlet hiffy`
humility: WARNING: archive in environment variable overriding archive in environment file
humility: attached to 0483:3754:000B00154D46501520383832 via ST-Link V3
humility hiffy failed: expected one of -l, -L, or -c

Stack backtrace:
   0: anyhow::__private::format_err
             at /home/eliza/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.70/src/lib.rs:668:13
   1: humility_cmd_hiffy::hiffy
             at ./cmd/hiffy/src/lib.rs:328:9
   2: humility::cmd::subcommand::{{closure}}
             at ./humility-bin/src/cmd.rs:98:17
   3: humility_cmd::attach
             at ./humility-cmd/src/lib.rs:189:5
   4: humility::cmd::subcommand
             at ./humility-bin/src/cmd.rs:97:13
   5: humility::main
             at ./humility-bin/src/main.rs:46:23
   6: core::ops::function::FnOnce::call_once
             at /home/eliza/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:253:5
   7: std::sys::backtrace::__rust_begin_short_backtrace
             at /home/eliza/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:158:18
   8: std::rt::lang_start::{{closure}}
             at /home/eliza/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:206:18
   9: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/ops/function.rs:290:21
      std::panicking::catch_unwind::do_call
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:589:40
      std::panicking::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:552:19
      std::panic::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panic.rs:359:14
      std::rt::lang_start_internal::{{closure}}
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/rt.rs:175:24
      std::panicking::catch_unwind::do_call
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:589:40
      std::panicking::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:552:19
      std::panic::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panic.rs:359:14
      std::rt::lang_start_internal
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/rt.rs:171:5
  10: std::rt::lang_start
             at /home/eliza/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:205:5
  11: main
  12: __libc_start_call_main
  13: __libc_start_main_alias_1
  14: _start

# ⏲ 11:33:31 env loaded in ❄️ nix-shell-env(±) on ⎇  master [?] using ⚙️ v1.90.0 ❌ ERROR
eliza@hekate ~/Code/oxide/humility $ cargo run -- -t gimletlet hiffy -l
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.11s
     Running `target/debug/humility -t gimletlet hiffy -l`
humility: WARNING: archive in environment variable overriding archive in environment file
humility: attached to 0483:3754:000B00154D46501520383832 via ST-Link V3
INTERFACE                    TASK
Jefe                         jefe
  |
  +--> Jefe.get_state
  |       <ok>                        u32
  |
  +--> Jefe.set_state
  |       state                       u32
  |       <ok>                        ()
  |
  +--> Jefe.request_reset
  |       <ok>                        ()
  |
  +--> Jefe.get_reset_reason
  |       <ok>                        ResetReason
  |
  +--> Jefe.set_reset_reason
  |       reason                      ResetReason
  |       <ok>                        ()
  |
  +--> Jefe.reinitialize_dump_areas
  |       <ok>                        ()
  |       <error>                     DumpAgentError
  |
  +--> Jefe.get_dump_area
  |       index                       u8
  |       <ok>                        humpty::DumpArea
  |       <error>                     DumpAgentError
  |
  +--> Jefe.claim_dump_area
  |       <ok>                        humpty::DumpArea
  |       <error>                     DumpAgentError
  |
  +--> Jefe.dump_task
  |       task_index                  u32
  |       <ok>                        u8
  |       <error>                     DumpAgentError
  |
  +--> Jefe.dump_task_region
  |       task_index                  u32
  |       address                     u32
  |       length                      u32
  |       <ok>                        u8
  |       <error>                     DumpAgentError
  |
  +--> Jefe.reinitialize_dump_from
  |       index                       u8
  |       <ok>                        ()
  |       <error>                     DumpAgentError
  |
  +--> Jefe.restart_me_raw
  |       <ok>                        ()
  |
  +--> Jefe.read_fault_report
humility: WARNING: couldn't find type Option<FaultReport> for Jefe.read_fault_report

INTERFACE                    TASK
Sys                          sys
  |
  +--> Sys.enable_clock_raw
  |       peripheral                  u32
  |       <ok>                        ()
  |       <error>                     RccError
  |
  +--> Sys.disable_clock_raw
  |       peripheral                  u32
  |       <ok>                        ()
  |       <error>                     RccError
  |
  +--> Sys.enter_reset_raw
  |       peripheral                  u32
  |       <ok>                        ()
  |       <error>                     RccError
  |
  +--> Sys.leave_reset_raw
  |       peripheral                  u32
  |       <ok>                        ()
  |       <error>                     RccError
  |
  +--> Sys.gpio_configure_raw
  |       port                        Port
  |       pins                        u16
  |       packed_attributes           u16
  |       <ok>                        ()
  |
  +--> Sys.gpio_set_reset
  |       port                        Port
  |       set_pins                    u16
  |       reset_pins                  u16
  |       <ok>                        ()
  |
  +--> Sys.gpio_read_input
  |       port                        Port
  |       <ok>                        u16
  |
  +--> Sys.gpio_toggle
  |       port                        Port
  |       pins                        u16
  |       <ok>                        ()
  |
  +--> Sys.read_uid
humility: WARNING: couldn't find type [u32; 3] for Sys.read_uid
  |
  +--> Sys.gpio_irq_configure
  |       mask                        u32
  |       sensitivity                 Edge
  |       <ok>                        ()
  |
  +--> Sys.gpio_irq_control
          mask                        u32
          op                          IrqControl
          <ok>                        bool

INTERFACE                    TASK
UserLeds                     user_leds
  |
  +--> UserLeds.led_on
  |       index                       usize
  |       <ok>                        ()
  |       <error>                     LedError
  |
  +--> UserLeds.led_off
  |       index                       usize
  |       <ok>                        ()
  |       <error>                     LedError
  |
  +--> UserLeds.led_toggle
  |       index                       usize
  |       <ok>                        ()
  |       <error>                     LedError
  |
  +--> UserLeds.led_blink
          index                       usize
          <ok>                        ()
          <error>                     LedError

INTERFACE                    TASK
Validate                     validate
  |
  +--> Validate.validate_i2c
          index                       u32
          <ok>                        ValidateOk
          <error>                     ValidateError

INTERFACE                    TASK
Rng                          rng_driver
  |
  +--> Rng.fill
          <ok>                        usize
          <error>                     RngError

INTERFACE                    TASK
Update                       update_server
  |
  +--> Update.block_size
  |       <ok>                        usize
  |       <error>                     UpdateError
  |
  +--> Update.prep_image_update
  |       <ok>                        ()
  |       <error>                     UpdateError
  |
  +--> Update.write_one_block
  |       block_num                   usize
  |       <ok>                        ()
  |       <error>                     UpdateError
  |
  +--> Update.abort_update
  |       <ok>                        ()
  |       <error>                     UpdateError
  |
  +--> Update.finish_image_update
  |       <ok>                        ()
  |       <error>                     UpdateError
  |
  +--> Update.current_version
  |       <ok>                        ImageVersion
  |
  +--> Update.read_caboose_value
  |       name                        [u8; 4]
  |       <ok>                        u32
  |       <error>                     CabooseError
  |
  +--> Update.get_pending_boot_slot
  |       <ok>                        SlotId
  |
  +--> Update.set_pending_boot_slot
          slot                        SlotId
          <ok>                        ()
          <error>                     UpdateError

INTERFACE                    TASK
Packrat                      packrat
  |
  +--> Packrat.get_mac_address_block
  |       <ok>                        MacAddressBlock
  |       <error>                     CacheGetError
  |
  +--> Packrat.set_mac_address_block
  |       macs                        MacAddressBlock
  |       <ok>                        ()
  |       <error>                     CacheSetError
  |
  +--> Packrat.get_identity
  |       <ok>                        OxideIdentity
  |       <error>                     CacheGetError
  |
  +--> Packrat.set_identity
  |       macs                        OxideIdentity
  |       <ok>                        ()
  |       <error>                     CacheSetError
  |
  +--> Packrat.get_next_boot_host_startup_options
  |       <ok>                        HostStartupOptions
  |
  +--> Packrat.set_next_boot_host_startup_options
  |       startup_options             HostStartupOptions
  |       <ok>                        ()
  |
  +--> Packrat.remove_spd
  |       index                       u8
  |       <ok>                        ()
  |
  +--> Packrat.set_spd_eeprom
  |       index                       u8
  |       offset                      usize
  |       <ok>                        ()
  |
  +--> Packrat.get_spd_present
  |       index                       u8
  |       <ok>                        bool
  |
  +--> Packrat.get_spd_data
  |       index                       u8
  |       offset                      usize
  |       <ok>                        u8
  |
  +--> Packrat.get_full_spd_data
  |       index                       u8
  |       <ok>                        ()
  |
  +--> Packrat.set_ereport_restart_id
  |       restart_id                  u128
  |       <ok>                        ()
  |       <error>                     CacheSetError
  |
  +--> Packrat.deliver_ereport
  |       <ok>                        ()
  |       <error>                     EreportWriteError
  |
  +--> Packrat.read_ereports
          request_id                  ereport_messages::RequestIdV0
          restart_id                  ereport_messages::RestartId
          start_ena                   ereport_messages::Ena
          limit                       u8
          committed_ena               ereport_messages::Ena
          <ok>                        usize
          <error>                     EreportReadError

INTERFACE                    TASK
ControlPlaneAgent            control_plane_agent
  |
  +--> ControlPlaneAgent.fetch_host_phase2_data
  |       image_hash                  [u8; 32]
  |       offset                      u64
  |       notification_bit            u8
  |       <ok>                        ()
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.get_host_phase2_data
  |       image_hash                  [u8; 32]
  |       offset                      u64
  |       <ok>                        usize
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.get_startup_options
  |       <ok>                        HostStartupOptions
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.set_startup_options
  |       startup_options             u64
  |       <ok>                        ()
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.identity
  |       <ok>                        OxideIdentity
  |
  +--> ControlPlaneAgent.get_uart_client
  |       <ok>                        UartClient
  |
  +--> ControlPlaneAgent.get_installinator_image_id
  |       <ok>                        usize
  |
  +--> ControlPlaneAgent.set_humility_uart_client
  |       attach                      bool
  |       <ok>                        ()
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.uart_read
  |       <ok>                        usize
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.uart_write
          <ok>                        usize
          <error>                     ControlPlaneAgentError

INTERFACE                    TASK
Sensor                       sensor
  |
  +--> Sensor.get
  |       id                          SensorId
  |       <ok>                        f32
  |       <error>                     SensorError
  |
  +--> Sensor.get_reading
  |       id                          SensorId
  |       <ok>                        Reading
  |       <error>                     SensorError
  |
  +--> Sensor.get_raw_reading
  |       id                          SensorId
humility: WARNING: couldn't find type Option<(Result<f32, NoData>, u64)> for Sensor.get_raw_reading
  |
  +--> Sensor.get_last_data
  |       id                          SensorId
  |       <ok>                        Option<(f32, u64)>
  |
  +--> Sensor.get_last_nodata
  |       id                          SensorId
humility: WARNING: couldn't find type Option<(NoData, u64)> for Sensor.get_last_nodata
  |
  +--> Sensor.get_min
  |       id                          SensorId
  |       <ok>                        (f32, u64)
  |
  +--> Sensor.get_max
  |       id                          SensorId
  |       <ok>                        (f32, u64)
  |
  +--> Sensor.post
  |       id                          SensorId
  |       value                       f32
  |       timestamp                   u64
  |       <ok>                        ()
  |
  +--> Sensor.nodata
  |       id                          SensorId
  |       nodata                      NoData
  |       timestamp                   u64
  |       <ok>                        ()
  |
  +--> Sensor.get_nerrors
          id                          SensorId
          <ok>                        u32

INTERFACE                    TASK
DumpAgent                    dump_agent
  |
  +--> DumpAgent.read_dump
  |       index                       u8
  |       offset                      u32
  |       <ok>                        [u8; DUMP_READ_SIZE]
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.read_dump_into
  |       index                       u8
  |       offset                      u32
  |       <ok>                        usize
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.get_dump_area
  |       index                       u8
  |       <ok>                        DumpArea
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.initialize_dump
  |       <ok>                        ()
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.add_dump_segment
  |       address                     u32
  |       length                      u32
  |       <ok>                        ()
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.take_dump
  |       <ok>                        ()
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.dump_task
  |       task_index                  u32
  |       <ok>                        u8
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.dump_task_region
  |       task_index                  u32
  |       start                       u32
  |       length                      u32
  |       <ok>                        u8
  |       <error>                     DumpAgentError
  |
  +--> DumpAgent.reinitialize_dump_from
          index                       u8
          <ok>                        ()
          <error>                     DumpAgentError

INTERFACE                    TASK
Sequencer                    gimlet_seq
  |
  +--> Sequencer.get_state
  |       <ok>                        drv_cpu_power_state::PowerState
  |
  +--> Sequencer.set_state
  |       state                       drv_cpu_power_state::PowerState
  |       <ok>                        drv_cpu_seq_api::Transition
  |       <error>                     SeqError
  |
  +--> Sequencer.set_state_with_reason
  |       state                       drv_cpu_power_state::PowerState
  |       reason                      StateChangeReason
  |       <ok>                        drv_cpu_seq_api::Transition
  |       <error>                     SeqError
  |
  +--> Sequencer.send_hardware_nmi
  |       <ok>                        ()
  |
  +--> Sequencer.read_fpga_regs
humility: WARNING: couldn't find type [u8; 64] for Sequencer.read_fpga_regs
  |
  +--> Sequencer.last_post_code
  |       <ok>                        u32
  |
  +--> Sequencer.gpio_edge_count
  |       <ok>                        u32
  |
  +--> Sequencer.gpio_cycle_count
          <ok>                        u32

INTERFACE                    TASK
HostSpComms                  host_sp_comms
  |
  +--> HostSpComms.set_status
  |       status                      u64
  |       <ok>                        ()
  |       <error>                     HostSpCommsError
  |
  +--> HostSpComms.get_status
          <ok>                        Status
          <error>                     HostSpCommsError

INTERFACE                    TASK
HostFlash                    hf
  |
  +--> HostFlash.read_id
  |       <ok>                        HfChipId
  |       <error>                     HfError
  |
  +--> HostFlash.capacity
  |       <ok>                        usize
  |       <error>                     HfError
  |
  +--> HostFlash.read_status
  |       <ok>                        u8
  |       <error>                     HfError
  |
  +--> HostFlash.bulk_erase
  |       protect                     HfProtectMode
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.page_program
  |       address                     u32
  |       protect                     HfProtectMode
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.page_program_dev
  |       dev                         HfDevSelect
  |       address                     u32
  |       protect                     HfProtectMode
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.read
  |       address                     u32
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.read_dev
  |       dev                         HfDevSelect
  |       address                     u32
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.sector_erase
  |       address                     u32
  |       protect                     HfProtectMode
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.sector_erase_dev
  |       dev                         HfDevSelect
  |       address                     u32
  |       protect                     HfProtectMode
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.get_mux
  |       <ok>                        HfMuxState
  |       <error>                     HfError
  |
  +--> HostFlash.set_mux
  |       state                       HfMuxState
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.get_dev
  |       <ok>                        HfDevSelect
  |       <error>                     HfError
  |
  +--> HostFlash.set_dev
  |       dev                         HfDevSelect
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.check_dev
  |       dev                         HfDevSelect
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.hash
  |       address                     u32
  |       len                         u32
  |       <ok>                        [u8; drv_hash_api::SHA256_SZ]
  |       <error>                     HfError
  |
  +--> HostFlash.hash_significant_bits
  |       dev                         HfDevSelect
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.get_cached_hash
  |       dev                         HfDevSelect
  |       <ok>                        [u8; drv_hash_api::SHA256_SZ]
  |       <error>                     HfError
  |
  +--> HostFlash.get_persistent_data
  |       <ok>                        HfPersistentData
  |       <error>                     HfError
  |
  +--> HostFlash.write_persistent_data
  |       dev_select                  HfDevSelect
  |       <ok>                        ()
  |       <error>                     HfError
  |
  +--> HostFlash.apob_begin
  |       length                      u32
  |       algorithm                   ApobHash
  |       <ok>                        ()
  |       <error>                     ApobBeginError
  |
  +--> HostFlash.apob_write
  |       offset                      u32
  |       <ok>                        ()
  |       <error>                     ApobWriteError
  |
  +--> HostFlash.apob_commit
  |       <ok>                        ()
  |       <error>                     ApobCommitError
  |
  +--> HostFlash.apob_lock
  |       <ok>                        ()
  |
  +--> HostFlash.apob_read
          offset                      u32
          <ok>                        usize
          <error>                     ApobReadError

INTERFACE                    TASK
Hash                         hash_driver
  |
  +--> Hash.init_sha256
  |       <ok>                        ()
  |       <error>                     HashError
  |
  +--> Hash.update
  |       len                         u32
  |       <ok>                        ()
  |       <error>                     HashError
  |
  +--> Hash.finalize_sha256
  |       <ok>                        [u8; crate::SHA256_SZ]
  |       <error>                     HashError
  |
  +--> Hash.digest_sha256
          len                         u32
          <ok>                        [u8; crate::SHA256_SZ]
          <error>                     HashError

INTERFACE                    TASK
Net                          net
  |
  +--> Net.recv_packet
  |       socket                      SocketName
  |       large_payload_behavior      LargePayloadBehavior
  |       <ok>                        UdpMetadata
  |       <error>                     RecvError
  |
  +--> Net.send_packet
  |       socket                      SocketName
  |       metadata                    UdpMetadata
  |       <ok>                        ()
  |       <error>                     SendError
  |
  +--> Net.smi_read
  |       phy                         u8
  |       register                    u8
  |       <ok>                        u16
  |
  +--> Net.smi_write
  |       phy                         u8
  |       register                    u8
  |       value                       u16
  |       <ok>                        ()
  |
  +--> Net.read_phy_reg
  |       port                        u8
  |       page                        u16
  |       reg                         u8
  |       <ok>                        u16
  |       <error>                     PhyError
  |
  +--> Net.write_phy_reg
  |       port                        u8
  |       page                        u16
  |       reg                         u8
  |       value                       u16
  |       <ok>                        ()
  |       <error>                     PhyError
  |
  +--> Net.read_ksz8463_mac_count
  |       <ok>                        usize
  |       <error>                     KszError
  |
  +--> Net.read_ksz8463_mac
  |       i                           u16
  |       <ok>                        KszMacTableEntry
  |       <error>                     KszError
  |
  +--> Net.read_ksz8463_reg
  |       reg                         u16
  |       <ok>                        u16
  |       <error>                     KszError
  |
  +--> Net.get_mac_address
  |       <ok>                        MacAddress
  |
  +--> Net.get_spare_mac_addresses
  |       <ok>                        MacAddressBlock
  |
  +--> Net.management_link_status
  |       <ok>                        ManagementLinkStatus
  |       <error>                     MgmtError
  |
  +--> Net.management_counters
  |       <ok>                        ManagementCounters
  |       <error>                     MgmtError
  |
  +--> Net.trust_vlan
  |       vid                         VLanId
  |       trust_until                 u64
  |       <ok>                        ()
  |       <error>                     TrustError
  |
  +--> Net.distrust_vlan
          vid                         VLanId
          <ok>                        ()
          <error>                     TrustError

INTERFACE                    TASK
SpRot                        sprot
  |
  +--> SpRot.status
  |       <ok>                        SprotStatus
  |       <error>                     SprotError
  |
  +--> SpRot.io_stats
  |       <ok>                        SprotIoStats
  |       <error>                     SprotError
  |
  +--> SpRot.rot_state
  |       <ok>                        RotState
  |       <error>                     SprotError
  |
  +--> SpRot.pulse_cs
  |       delay                       u16
  |       <ok>                        PulseStatus
  |       <error>                     SprotError
  |
  +--> SpRot.block_size
  |       <ok>                        u32
  |       <error>                     SprotError
  |
  +--> SpRot.prep_image_update
  |       target                      UpdateTarget
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.write_one_block
  |       block_num                   u32
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.abort_update
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.finish_image_update
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.switch_default_image
  |       slot                        SlotId
  |       duration                    SwitchDuration
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.reset
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.dump
  |       address                     u32
  |       <ok>                        ()
  |       <error>                     DumpOrSprotError
  |
  +--> SpRot.caboose_size
  |       slot                        SlotId
  |       <ok>                        u32
  |       <error>                     RawCabooseOrSprotError
  |
  +--> SpRot.read_caboose_region
  |       offset                      u32
  |       slot                        SlotId
  |       <ok>                        ()
  |       <error>                     RawCabooseOrSprotError
  |
  +--> SpRot.rot_boot_info
  |       <ok>                        RotBootInfo
  |       <error>                     SprotError
  |
  +--> SpRot.cert_chain_len
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.cert_len
  |       index                       u32
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.cert
  |       index                       u32
  |       offset                      u32
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.record
  |       algorithm                   HashAlgorithm
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.read_rot_page
  |       page                        RotPage
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.log
  |       offset                      u32
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.log_len
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.attest
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.attest_len
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.enable_sp_slot_watchdog
  |       time_ms                     u32
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.disable_sp_slot_watchdog
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.sp_slot_watchdog_supported
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.versioned_rot_boot_info
  |       version                     u8
  |       <ok>                        VersionedRotBootInfo
  |       <error>                     SprotError
  |
  +--> SpRot.component_caboose_size
  |       component                   RotComponent
  |       slot                        SlotId
  |       <ok>                        u32
  |       <error>                     RawCabooseOrSprotError
  |
  +--> SpRot.component_read_caboose_region
  |       offset                      u32
  |       component                   RotComponent
  |       slot                        SlotId
  |       <ok>                        ()
  |       <error>                     RawCabooseOrSprotError
  |
  +--> SpRot.component_prep_image_update
  |       component                   RotComponent
  |       slot                        SlotId
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.component_switch_default_image
  |       component                   RotComponent
  |       slot                        SlotId
  |       duration                    SwitchDuration
  |       <ok>                        ()
  |       <error>                     SprotError
  |
  +--> SpRot.lifecycle_state
  |       <ok>                        LifecycleState
  |       <error>                     StateOrSprotError
  |
  +--> SpRot.tq_cert_chain_len
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.tq_cert_len
  |       index                       u32
  |       <ok>                        u32
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.tq_cert
  |       index                       u32
  |       offset                      u32
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.tq_sign
  |       <ok>                        ()
  |       <error>                     AttestOrSprotError
  |
  +--> SpRot.tq_sign_len
          <ok>                        u32
          <error>                     AttestOrSprotError

INTERFACE                    TASK
Power                        power
  |
  +--> Power.pmbus_read
  |       dev                         Device
  |       rail                        u8
  |       index                       u32
  |       op                          Operation
  |       <ok>                        PmbusValue
  |       <error>                     ResponseCode
  |
  +--> Power.read_mode
  |       dev                         Device
  |       rail                        u8
  |       index                       u32
  |       <ok>                        u8
  |       <error>                     ResponseCode
  |
  +--> Power.phase_current
  |       rail                        SensorId
  |       phase                       u8
  |       <ok>                        f32
  |       <error>                     ResponseCode
  |
  +--> Power.bmr491_event_log_read
  |       index                       u8
  |       <ok>                        Bmr491Event
  |       <error>                     ResponseCode
  |
  +--> Power.bmr491_fault_log_clear
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.bmr491_max_fault_event_index
  |       <ok>                        u8
  |       <error>                     ResponseCode
  |
  +--> Power.bmr491_max_lifecycle_event_index
  |       <ok>                        u8
  |       <error>                     ResponseCode
  |
  +--> Power.rendmp_blackbox_dump
  |       addr                        u8
humility: WARNING: couldn't find type RenesasBlackbox for Power.rendmp_blackbox_dump
  |
  +--> Power.rendmp_dma_read
  |       addr                        u8
  |       reg                         u16
  |       <ok>                        u32
  |       <error>                     ResponseCode
  |
  +--> Power.rendmp_dma_write
  |       addr                        u8
  |       reg                         u16
  |       data                        u32
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_read_byte
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       <ok>                        u8
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_read_word
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       <ok>                        u16
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_read_word32
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       <ok>                        u32
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_read_block
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       <ok>                        RawPmbusBlock
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_set
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_write_byte
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       data                        u8
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_write_word
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       data                        u16
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_write_word32
  |       index                       u32
  |       has_rail                    bool
  |       op                          u8
  |       data                        u32
  |       <ok>                        ()
  |       <error>                     ResponseCode
  |
  +--> Power.raw_pmbus_write_block
          index                       u32
          has_rail                    bool
          op                          u8
          data                        RawPmbusBlock
          <ok>                        ()
          <error>                     ResponseCode

INTERFACE                    TASK
Ereportulator                ereportulator
  |
  +--> Ereportulator.fake_ereport
  |       n                           u32
  |       <ok>                        ()
  |
  +--> Ereportulator.set_fake_vpd
  |       <ok>                        ()
  |       <error>                     CacheSetError
  |
  +--> Ereportulator.panic_me
          <ok>                        ()

What's particularly weird about this is that I note that it complains about some normal byte arrays, which naively, I feel like it ought to be able to understand:

humility: WARNING: couldn't find type [u8; 64] for Sequencer.read_fpga_regs

...but, other IPCs which also involve byte array types were interpreted successfully:

  +--> ControlPlaneAgent.fetch_host_phase2_data
  |       image_hash                  [u8; 32]
  |       offset                      u64
  |       notification_bit            u8
  |       <ok>                        ()
  |       <error>                     ControlPlaneAgentError
  |
  +--> ControlPlaneAgent.get_host_phase2_data
  |       image_hash                  [u8; 32]
  |       offset                      u64
  |       <ok>                        usize
  |       <error>                     ControlPlaneAgentError
  |

...

  +--> DumpAgent.read_dump
  |       index                       u8
  |       offset                      u32
  |       <ok>                        [u8; DUMP_READ_SIZE]
  |       <error>                     DumpAgentError

I've also attached my Hubris archive that this behavior was observed against, in case that's useful, though I'not sure whether this is caused by anything specific to my archive:
build-gimletlet-ereportlet-image-default.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions