{"id":29675791,"url":"https://github.com/oxidecomputer/humpty","last_synced_at":"2025-07-22T23:38:46.044Z","repository":{"id":103489936,"uuid":"584459033","full_name":"oxidecomputer/humpty","owner":"oxidecomputer","description":"Do the Humpty dump!","archived":false,"fork":false,"pushed_at":"2025-05-07T20:54:33.000Z","size":29,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-05-07T21:28:39.229Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oxidecomputer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-02T16:18:35.000Z","updated_at":"2025-05-07T20:17:39.000Z","dependencies_parsed_at":"2025-05-07T21:23:58.474Z","dependency_job_id":"9c4c8749-fde5-48b7-affe-8b9814306f5a","html_url":"https://github.com/oxidecomputer/humpty","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oxidecomputer/humpty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fhumpty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fhumpty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fhumpty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fhumpty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oxidecomputer","download_url":"https://codeload.github.com/oxidecomputer/humpty/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fhumpty/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266591233,"owners_count":23953082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-22T23:38:41.188Z","updated_at":"2025-07-22T23:38:46.034Z","avatar_url":"https://github.com/oxidecomputer.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# humpty\n\nhumpty: Hubris/Humility dump manipulation\n\nThis is a no_std crate that allows for dumping the system or some number\nof tasks to a specified region of memory.  This crate is used by several\ndifferent consumers across several different domains, and is used by both\nHubris and Humility.\n\nOur nomenclature:\n\n- *Dump area*:  a contiguous area of RAM within Hubris that holds all or\n  part of a dump.  This is an area of RAM that is not otherwise used by\n  the system and (obviously?) shouldn't itself be dumped.\n\n- *Dump contents*:  the contents of a dump area, and can be either a task\n  (or part of a task) or the entire system (or part of it).  If an area is\n  used for part of the system, all dump areas are used to dump the system.\n  (That is, task dumps cannot be interspersed with system dumps.)\n\n- *Dump segment header*:  a header describing a contiguous region of memory\n  to be written into a dump.  These are added to a dump area via\n  [`add_dump_segment_header`].\n\n- *Dump segment*:  the actual data itself in a dump.  This can have the form\n  of data (always compressed), or some limited metadata (registers and\n  task information, if any).  If there is both metadata and data, the\n  metadata will always precede the data.\n\n- *Dump agent proxy*.  The body of software that creates dump areas and\n  doles them out to dump agents.\n\n- *Dump agent*. The software that claims a dump area from the dump agent\n  proxy for the purpose of arranging dumping into it.\n\n- *Dumper*.  The body of software that actually performs the dumping:\n  knowing only the address of a dump area, it will dump contents into dump\n  areas such as they are available.  (Jefe, the dedicated dumper task, and\n  Humility in its emulation modes can all act as the dumper.)\n\nIn Hubris, Jefe always acts as the dump agent proxy.  In the case of task\ndumps, Jefe also serves as the dump agent and the dumper (via kernel\nfacilities to read task memory).  For system dumps, the dedicated dump\nagent serves as the agent, and an outside system (either Humility in its\nemulation modes or a disjoint microcontroller running Hubris and connected\nvia SWD) acts as the dumper.\n\nRegardless of which bodies are playing which part, the flow is:\n\n 1. Dump agent asks dump agent proxy to claim an area on its behalf.\n\n 2. Dump agent adds segment headers to describe the data to be dumped.\n\n 3. Dumper calls [`dump`] to actually do the dumping.  [`dump`] will\n    read and write to memory via the passed closures.\n\n 4. Dump is retrieved by Humility for decompressing and processing.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxidecomputer%2Fhumpty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foxidecomputer%2Fhumpty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxidecomputer%2Fhumpty/lists"}