Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

74 changes: 72 additions & 2 deletions cmd/tasks/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
//! These options can naturally be combined, e.g. `humility tasks -slvr`.
//!

use anyhow::{Context, Result, bail};
use anyhow::{Context, Result, anyhow, bail};
use clap::{CommandFactory, Parser};
use humility::core::Core;
use humility::hubris::*;
Expand Down Expand Up @@ -404,7 +404,14 @@ pub fn print_tasks(
if stack {
let initial = desc.initial_stack;

match hubris.stack(core, t, initial, &regs) {
match hubris.stack(core, t, initial, &regs).or_else(
|e| {
// Restore original error if the syscall
// stack handler didn't work.
stack_syscall(core, hubris, t, &desc, &regs)
.map_err(|_| e)
},
) {
Ok(stack) => printer.print(hubris, &stack),
Err(e) => {
writeln!(
Expand Down Expand Up @@ -483,6 +490,69 @@ pub fn print_tasks(
Ok(())
}

/// Finds a stack trace when the instruction pointer is in a syscall stub
///
/// Functions defined with `naked_asm` do not have unwind info (hubris#2236 /
/// rust#146736). For tasks which are in a syscall stub, this prevents our
/// stack unwinder from making any progress: it can't get the unwind info for
/// the root stack frame, so can't walk up the stack.
///
/// This function assumes that we're at a syscall, and begins stack walking *one
/// frame up* to escape the tarpit: we use `LR` as the program counter, and
/// populate register values based on the pushes at syscall entry.
fn stack_syscall<'a>(
core: &'a mut dyn Core,
hubris: &'a HubrisArchive,
t: HubrisTask,
desc: &'a TaskDesc,
regs: &'a BTreeMap<ARMRegister, u32>,
) -> Result<Vec<HubrisStackFrame<'a>>> {
let pc = regs
.get(&ARMRegister::PC)
.ok_or_else(|| anyhow!("PC missing from regs map"))?;
let lr = regs
.get(&ARMRegister::LR)
.ok_or_else(|| anyhow!("LR missing from regs map"))?;
let sp = regs
.get(&ARMRegister::SP)
.ok_or_else(|| anyhow!("SP missing from regs map"))?;

let Some(pushed) = hubris.syscall_pushes_at(*pc) else {
bail!("could not find syscall pushes at {pc:#x?}");
};
Comment on lines +520 to +522
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bail vs anyhow?

Copy link
Contributor Author

@mkeeter mkeeter Oct 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think bail is correct, because it builds + returns the error. anyhow just builds the error, so it would be more verbose (return anyhow!(..)).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh yeah I think I have convinced myself that bail actually means "exit the program with this error" which is not actually true because we actually handle the error with the .or_else above


// Read pushed register values from the stack
let mut frameregs = regs.clone();
for (i, &p) in pushed.iter().enumerate() {
let val = core.read_word_32(sp + (i * 4) as u32)?;
frameregs.insert(p, val);
}
// Move ourselves up a single frame. This leaves SP with a fake value, but
// it's in the correct region, which is what matters for `hubris.stack(..)`
frameregs.insert(ARMRegister::PC, *lr);
frameregs.remove(&ARMRegister::LR);

let mut frames = hubris.stack(core, t, desc.initial_stack, &frameregs)?;

// Insert a synthetic frame for the syscall stub
let name = hubris.instr_sym(*pc).map(|(name, _addr)| name);
frames.insert(
0,
HubrisStackFrame {
cfa: *sp,
pos: None,
sym: Some(HubrisStackSymbol {
name: name.unwrap_or("[syscall stub]"),
addr: *pc,
goff: None,
}),
registers: regs.clone(),
inlined: None,
},
);
Ok(frames)
}

fn stack_guess<'a>(
w: &'a mut dyn Write,
core: &'a mut dyn Core,
Expand Down
2 changes: 1 addition & 1 deletion humility-bin/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
[package]
name = "humility-bin"
edition.workspace = true
version = "0.12.8"
version = "0.12.9"
license = "MPL-2.0"

[build-dependencies]
Expand Down
4 changes: 2 additions & 2 deletions humility-bin/tests/cmd/chip.trycmd
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ For more information try --help

```
$ humility --chip this-can-be-anything -V
humility 0.12.8
humility 0.12.9

```

Expand All @@ -28,7 +28,7 @@ For more information try --help

```
$ humility -c apx432 -V
humility 0.12.8
humility 0.12.9

```

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
humility: attached to dump
humility counters failed: no counters found with names containing "gimlet_seq"
hint: use `humility counters list` to list all available counters
Empty file.
10 changes: 10 additions & 0 deletions humility-bin/tests/cmd/counters-arg/counters-arg.new-compiler.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

#
# This test case has been automatically created, but can be edited and
# should be checked in. Should it ever be regenerated, simply delete
# it and re-run "cargo test"
#
fs.base = "../cores"
bin.name = "humility"
args = "-d hubris.core.new-compiler counters gimlet_seq"
status.code = 1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
humility: attached to dump
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
task,variable,variant,count
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_on(Ok),0
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_on(Err(NotPresent)),0
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_off(Ok),0
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_off(Err(NotPresent)),0
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_toggle(Ok),13
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_toggle(Err(NotPresent)),6
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_blink(Ok),0
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_blink(Err(NotPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_state,0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,set_state,0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,request_reset,0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_reset_reason,0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,set_reset_reason,1
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_areas(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,get_dump_area(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,claim_dump_area(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,dump_task_region(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Ok),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpAgentUnsupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(InvalidArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(BadOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(UnalignedOffset)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(UnalignedSegmentAddress)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(UnalignedSegmentLength)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(BadDumpResponse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(NotSupported)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpPresent)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(UnclaimedDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(CannotClaimDumpArea)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpAreaInUse)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(BadSegmentAdd)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpMessageFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedSetup)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedRead)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedWrite)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedControl)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedUnknown)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(DumpFailedUnknownError)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(LeaseWriteFailed)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,reinitialize_dump_from(Err(ServerRestarted)),0
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,restart_me_raw,0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,enable_clock_raw(Ok),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,enable_clock_raw(Err(NoSuchPeripheral)),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,disable_clock_raw(Ok),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,disable_clock_raw(Err(NoSuchPeripheral)),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,enter_reset_raw(Ok),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,enter_reset_raw(Err(NoSuchPeripheral)),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,leave_reset_raw(Ok),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,leave_reset_raw(Err(NoSuchPeripheral)),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_configure_raw,1
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_set_reset,1
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_read_input,0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_toggle(Ok),13
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_toggle(Err),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,read_uid,0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_irq_configure,0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_irq_control(Ok),0
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_irq_control(Err),0
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

#
# This test case has been automatically created, but can be edited and
# should be checked in. Should it ever be regenerated, simply delete
# it and re-run "cargo test"
#
fs.base = "../cores"
bin.name = "humility"
args = "-d hubris.core.new-compiler counters --output csv --full"

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
humility: attached to dump
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
task,variable,variant,count
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_toggle(Ok),13
pong,drv_user_leds_api::__USERLEDS_CLIENT_COUNTERS,led_toggle(Err(NotPresent)),6
sys,task_jefe_api::__JEFE_CLIENT_COUNTERS,set_reset_reason,1
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_configure_raw,1
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_set_reset,1
user_leds,drv_stm32xx_sys_api::__SYS_CLIENT_COUNTERS,gpio_toggle(Ok),13
10 changes: 10 additions & 0 deletions humility-bin/tests/cmd/counters-csv/counters-csv.new-compiler.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

#
# This test case has been automatically created, but can be edited and
# should be checked in. Should it ever be regenerated, simply delete
# it and re-run "cargo test"
#
fs.base = "../cores"
bin.name = "humility"
args = "-d hubris.core.new-compiler counters --output csv"

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
humility: attached to dump
Loading
Loading