diff --git a/aya-obj/src/obj.rs b/aya-obj/src/obj.rs index 8491709b..5ea7a40b 100644 --- a/aya-obj/src/obj.rs +++ b/aya-obj/src/obj.rs @@ -231,6 +231,7 @@ pub enum ProgramSection { }, Lsm { name: String, + sleepable_supported: bool, }, BtfTracePoint { name: String, @@ -281,7 +282,7 @@ impl ProgramSection { ProgramSection::LircMode2 { name } => name, ProgramSection::PerfEvent { name } => name, ProgramSection::RawTracePoint { name } => name, - ProgramSection::Lsm { name } => name, + ProgramSection::Lsm { name, .. } => name, ProgramSection::BtfTracePoint { name } => name, ProgramSection::FEntry { name } => name, ProgramSection::FExit { name } => name, @@ -472,7 +473,14 @@ impl FromStr for ProgramSection { "lirc_mode2" => LircMode2 { name }, "perf_event" => PerfEvent { name }, "raw_tp" | "raw_tracepoint" => RawTracePoint { name }, - "lsm" => Lsm { name }, + "lsm" => Lsm { + name, + sleepable_supported: false, + }, + "lsm.s+" => Lsm { + name, + sleepable_supported: true, + }, "fentry" => FEntry { name }, "fexit" => FExit { name }, "freplace" => Extension { name }, @@ -1926,6 +1934,30 @@ mod tests { ); } + #[test] + fn test_parse_section_lsm_sleepable() { + let mut obj = fake_obj(); + + assert_matches!( + obj.parse_section(fake_section( + BpfSectionKind::Program, + "lsm.s+/foo", + bytes_of(&fake_ins()) + )), + Ok(()) + ); + assert_matches!( + obj.programs.get("foo"), + Some(Program { + section: ProgramSection::Lsm { + sleepable_supported: true, + .. + }, + .. + }) + ); + } + #[test] fn test_parse_section_btf_tracepoint() { let mut obj = fake_obj();