@@ -172,29 +172,9 @@ impl FunctionBlocks {
172172 out
173173 }
174174
175- /// Find the nearest caller-side call-site parameter binding whose return_pc
176- /// is at or before `pc` and whose callee entry register matches `register`.
177- pub fn entry_value_parameter_for_pc (
178- & self ,
179- pc : u64 ,
180- register : u16 ,
181- ) -> Option < & CallSiteParameter > {
182- for ( _, records) in self . call_sites . range ( ..=pc) . rev ( ) {
183- for record in records. iter ( ) . rev ( ) {
184- if let Some ( parameter) = record
185- . parameters
186- . iter ( )
187- . find ( |parameter| parameter. callee_register == register)
188- {
189- return Some ( parameter) ;
190- }
191- }
192- }
193- None
194- }
195-
196175 /// Collect all incoming caller-side call-site bindings for a callee
197- /// register. These are used for non-inline DW_OP_entry_value recovery.
176+ /// register. These drive DW_OP_entry_value recovery without consulting
177+ /// nested outgoing call sites inside the current function body.
198178 pub fn incoming_entry_value_parameters ( & self , register : u16 ) -> Vec < ( u64 , & CallSiteParameter ) > {
199179 let mut out = Vec :: new ( ) ;
200180 for ( return_pc, records) in & self . incoming_call_sites {
@@ -208,17 +188,6 @@ impl FunctionBlocks {
208188 }
209189 out
210190 }
211-
212- /// True when `pc` is inside an inlined-subroutine scope in this function.
213- pub fn is_inline_context_at ( & self , pc : u64 ) -> bool {
214- if !self . function_contains_pc ( pc) {
215- return false ;
216- }
217- self . block_path_for_pc ( pc)
218- . into_iter ( )
219- . skip ( 1 )
220- . any ( |idx| self . nodes [ idx] . entry_pc . is_some ( ) )
221- }
222191}
223192
224193/// Global per-module block index
@@ -1400,58 +1369,4 @@ mod tests {
14001369 assert_eq ! ( incoming[ 0 ] . call_origin, None ) ;
14011370 assert_eq ! ( incoming[ 0 ] . call_target, Some ( 0x1200 ) ) ;
14021371 }
1403-
1404- #[ test]
1405- fn entry_value_parameter_lookup_uses_nearest_prior_return_pc ( ) {
1406- let mut function = FunctionBlocks :: new ( gimli:: DebugInfoOffset ( 0 ) , gimli:: UnitOffset ( 0 ) ) ;
1407- function. call_sites . insert (
1408- 0x1018 ,
1409- vec ! [ CallSiteRecord {
1410- cu_offset: gimli:: DebugInfoOffset ( 0 ) ,
1411- die_offset: gimli:: UnitOffset ( 1 ) ,
1412- return_pc: 0x1018 ,
1413- call_origin: None ,
1414- call_target: None ,
1415- parameters: vec![ CallSiteParameter {
1416- callee_register: 5 ,
1417- caller_value_steps: vec![ ComputeStep :: PushConstant ( 11 ) ] ,
1418- } ] ,
1419- } ] ,
1420- ) ;
1421- function. call_sites . insert (
1422- 0x1030 ,
1423- vec ! [ CallSiteRecord {
1424- cu_offset: gimli:: DebugInfoOffset ( 0 ) ,
1425- die_offset: gimli:: UnitOffset ( 2 ) ,
1426- return_pc: 0x1030 ,
1427- call_origin: None ,
1428- call_target: None ,
1429- parameters: vec![ CallSiteParameter {
1430- callee_register: 5 ,
1431- caller_value_steps: vec![ ComputeStep :: PushConstant ( 22 ) ] ,
1432- } ] ,
1433- } ] ,
1434- ) ;
1435-
1436- let parameter = function
1437- . entry_value_parameter_for_pc ( 0x1034 , 5 )
1438- . expect ( "nearest call-site parameter should be found" ) ;
1439- assert_eq ! (
1440- parameter. caller_value_steps,
1441- vec![ ComputeStep :: PushConstant ( 22 ) ]
1442- ) ;
1443-
1444- let earlier = function
1445- . entry_value_parameter_for_pc ( 0x1019 , 5 )
1446- . expect ( "earlier call-site parameter should be found" ) ;
1447- assert_eq ! (
1448- earlier. caller_value_steps,
1449- vec![ ComputeStep :: PushConstant ( 11 ) ]
1450- ) ;
1451-
1452- assert ! (
1453- function. entry_value_parameter_for_pc( 0x1017 , 5 ) . is_none( ) ,
1454- "call sites after the current PC must not match"
1455- ) ;
1456- }
14571372}
0 commit comments