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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions