[AVR] Object type method debug information missing
## Summary DWARF debug information for object type method is missing when the object is declared in unit. ## System Information <!-- The more information are provided the easier it is to replicate the bug --> - **Operating system:** Embedded - **Processor architecture:** AVR - **Compiler version:** main 2bf377744a , 3.2.3 ea5c84dca8, 3.2.2 0d122c49534b480be9284c21bd60b53d99904346 - **Device:** Microcontroller ## Steps to reproduce ## Example Project Compile : `<AVRFPC> -Tembedded -Pavr -MObjFPC -Sai -CirotR -O1 -gw3 -Xg -a -al -Xe -Xm -Sm -WpATMEGA328P -CpAVR5 -godwarfsets -dF_CPU:=16000000 avr_object_debug_test.pas` ```pascal program avr_object_debug_test; uses utestobj; var TestObj: TTestObj; TestRec: TTestRec; begin DoSomething; TestObj.DoSomething; TestRec.DoSomething; end. ``` ```pascal unit utestobj; {$modeswitch advancedrecords} interface type TTestObj = object procedure DoSomething; end; TTestRec = record procedure DoSomething; end; procedure DoSomething; implementation procedure TTestObj.DoSomething; var i, x: SizeInt; begin x := 5; i := 0; Inc(i); x := i; end; procedure TTestRec.DoSomething; var i, x: SizeInt; begin x := 5; i := 0; Inc(i); x := i; end; procedure DoSomething; var i, x: SizeInt; begin x := 5; i := 0; Inc(i); x := i; end; end. ``` ## What is the current bug behavior? There is no debug information. ( Using windows avr-gdb 8.3 patched by MiR from [here](https://www.nephelae.eu/avr-gdb-8.3.zip) ) ``` $main () at avr_object_debug_test.pas:12 12 TestObj.DoSomething; (gdb) s UTESTOBJs_sTTESTOBJ_s__ss_DOSOMETHING () at utestobj.pas:24 24 x := 5; (gdb) s 25 i := 0; (gdb) print x No symbol "x" in current context. ``` ## What is the expected (correct) behavior? Emit debug information for method of object type declared in units. ## Relevant logs and/or screenshots Debug info from avr_object_debug_test project builded with main (2bf377744a) on Windows 10 using: `avr-embedded-objdump.exe -Wi avr_object_debug_test.elf .` ``` avr_object_debug_test.elf: file format elf32-avr Contents of the .debug_info section: Compilation Unit @ offset 0x0: Length: 0xc3 (32-bit) Version: 3 Abbrev Offset: 0x0 Pointer Size: 4 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit) <c> DW_AT_name : avr_object_debug_test.pas <26> DW_AT_producer : Free Pascal 3.3.1 2022/09/24 <43> DW_AT_comp_dir : G:/Programming/dimitris/Projects/fpc_avr_bugs/debug_objects/ <80> DW_AT_language : 9 (ANSI Pascal) <81> DW_AT_identifier_case: 3 (case_insensitive) <82> DW_AT_stmt_list : 0x0 <86> DW_AT_low_pc : 0x9e <8a> DW_AT_high_pc : 0xc0 <1><8e>: Abbrev Number: 2 (DW_TAG_variable) <8f> DW_AT_name : TestObj <97> DW_AT_location : 5 byte block: 3 40 1 80 0 (DW_OP_addr: 800140) <9d> DW_AT_type : <0x118c> <1><a1>: Abbrev Number: 2 (DW_TAG_variable) <a2> DW_AT_name : TestRec <aa> DW_AT_location : 5 byte block: 3 41 1 80 0 (DW_OP_addr: 800141) <b0> DW_AT_type : <0x11ab> <1><b4>: Abbrev Number: 3 (DW_TAG_subprogram) <b5> DW_AT_name : $main <bb> DW_AT_prototyped : 1 <bc> DW_AT_external : 1 <bd> DW_AT_low_pc : 0x9e <c1> DW_AT_high_pc : 0xbc <2><c5>: Abbrev Number: 0 <1><c6>: Abbrev Number: 0 Compilation Unit @ offset 0xc7: Length: 0xff5 (32-bit) Version: 3 Abbrev Offset: 0x30 Pointer Size: 4 <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit) <d3> DW_AT_name : avr/atmega328p.pp <e5> DW_AT_producer : Free Pascal 3.3.1 2022/09/24 <102> DW_AT_comp_dir : G:/Programming/dimitris/tools/laz-2.2.2_fpc-3.2.2/fpc/3.3.1/source/rtl/embedded/ <153> DW_AT_language : 9 (ANSI Pascal) <154> DW_AT_identifier_case: 3 (case_insensitive) <155> DW_AT_stmt_list : 0x5e <159> DW_AT_low_pc : 0x214 <15d> DW_AT_high_pc : 0x21a ( Removed atmega328p.pp debug info for space ) <1><10bf>: Abbrev Number: 0 Compilation Unit @ offset 0x10c0: Length: 0x2c1 (32-bit) Version: 3 Abbrev Offset: 0x88 Pointer Size: 4 <0><10cb>: Abbrev Number: 1 (DW_TAG_compile_unit) <10cc> DW_AT_name : utestobj.pas <10d9> DW_AT_producer : Free Pascal 3.3.1 2022/09/24 <10f6> DW_AT_comp_dir : G:/Programming/dimitris/Projects/fpc_avr_bugs/debug_objects/ <1133> DW_AT_language : 9 (ANSI Pascal) <1134> DW_AT_identifier_case: 3 (case_insensitive) <1135> DW_AT_stmt_list : 0x1b8 <1139> DW_AT_low_pc : 0x21a <113d> DW_AT_high_pc : 0x32a <1><1141>: Abbrev Number: 2 (DW_TAG_subprogram) <1142> DW_AT_name : DoSomething <114e> DW_AT_prototyped : 1 <114f> DW_AT_external : 1 <1150> DW_AT_low_pc : 0x2d2 <1154> DW_AT_high_pc : 0x32a <2><1158>: Abbrev Number: 3 (DW_TAG_variable) <1159> DW_AT_name : i <115b> DW_AT_location : 2 byte block: 8c 2 (DW_OP_breg28 (r28): 2) <115e> DW_AT_type : <0x116d> <2><1162>: Abbrev Number: 3 (DW_TAG_variable) <1163> DW_AT_name : x <1165> DW_AT_location : 2 byte block: 8c 4 (DW_OP_breg28 (r28): 4) <1168> DW_AT_type : <0x116d> <2><116c>: Abbrev Number: 0 <1><116d>: Abbrev Number: 4 (DW_TAG_typedef) <116e> DW_AT_name : SmallInt <1177> DW_AT_type : <0x117b> <1><117b>: Abbrev Number: 5 (DW_TAG_base_type) <117c> DW_AT_name : SmallInt <1185> DW_AT_encoding : 5 (signed) <1186> DW_AT_byte_size : 2 <1><1187>: Abbrev Number: 6 (DW_TAG_reference_type) <1188> DW_AT_type : <0x116d> <1><118c>: Abbrev Number: 4 (DW_TAG_typedef) <118d> DW_AT_name : TTestObj <1196> DW_AT_type : <0x119a> <1><119a>: Abbrev Number: 7 (DW_TAG_structure_type) <119b> DW_AT_name : TTestObj <11a4> DW_AT_byte_size : 0 <2><11a5>: Abbrev Number: 0 <1><11a6>: Abbrev Number: 6 (DW_TAG_reference_type) <11a7> DW_AT_type : <0x118c> <1><11ab>: Abbrev Number: 4 (DW_TAG_typedef) <11ac> DW_AT_name : TTestRec <11b5> DW_AT_type : <0x11b9> <1><11b9>: Abbrev Number: 7 (DW_TAG_structure_type) <11ba> DW_AT_name : TTESTREC <11c3> DW_AT_byte_size : 0 <2><11c4>: Abbrev Number: 2 (DW_TAG_subprogram) <11c5> DW_AT_name : DoSomething <11d1> DW_AT_prototyped : 1 <11d2> DW_AT_external : 1 <11d3> DW_AT_low_pc : 0x276 <11d7> DW_AT_high_pc : 0x2d2 <3><11db>: Abbrev Number: 8 (DW_TAG_formal_parameter) <11dc> DW_AT_name : this <11e1> DW_AT_location : 3 byte block: 8c 2 6 (DW_OP_breg28 (r28): 2; DW_OP_deref) <11e5> DW_AT_artificial : 1 <11e6> DW_AT_type : <0x11ab> <3><11ea>: Abbrev Number: 3 (DW_TAG_variable) <11eb> DW_AT_name : i <11ed> DW_AT_location : 2 byte block: 8c 4 (DW_OP_breg28 (r28): 4) <11f0> DW_AT_type : <0x116d> <3><11f4>: Abbrev Number: 3 (DW_TAG_variable) <11f5> DW_AT_name : x <11f7> DW_AT_location : 2 byte block: 8c 6 (DW_OP_breg28 (r28): 6) <11fa> DW_AT_type : <0x116d> <3><11fe>: Abbrev Number: 0 <2><11ff>: Abbrev Number: 0 <1><1200>: Abbrev Number: 6 (DW_TAG_reference_type) <1201> DW_AT_type : <0x11ab> <1><1205>: Abbrev Number: 4 (DW_TAG_typedef) <1206> DW_AT_name : $rttidef$INIT_$UTESTOBJ_$$_TTESTOBJ <122a> DW_AT_type : <0x122e> <1><122e>: Abbrev Number: 7 (DW_TAG_structure_type) <122f> DW_AT_name : $RTTIDEF$INIT_$UTESTOBJ_$$_TTESTOBJ <1253> DW_AT_byte_size : 26 <2><1254>: Abbrev Number: 0 <1><1255>: Abbrev Number: 6 (DW_TAG_reference_type) <1256> DW_AT_type : <0x1205> <1><125a>: Abbrev Number: 4 (DW_TAG_typedef) <125b> DW_AT_name : $rttidef$RTTI_$UTESTOBJ_$$_TTESTOBJ <127f> DW_AT_type : <0x1283> <1><1283>: Abbrev Number: 7 (DW_TAG_structure_type) <1284> DW_AT_name : $RTTIDEF$RTTI_$UTESTOBJ_$$_TTESTOBJ <12a8> DW_AT_byte_size : 22 <2><12a9>: Abbrev Number: 0 <1><12aa>: Abbrev Number: 6 (DW_TAG_reference_type) <12ab> DW_AT_type : <0x125a> <1><12af>: Abbrev Number: 4 (DW_TAG_typedef) <12b0> DW_AT_name : $rttidef$INIT_$UTESTOBJ_$$_TTESTREC <12d4> DW_AT_type : <0x12d8> <1><12d8>: Abbrev Number: 7 (DW_TAG_structure_type) <12d9> DW_AT_name : $RTTIDEF$INIT_$UTESTOBJ_$$_TTESTREC <12fd> DW_AT_byte_size : 26 <2><12fe>: Abbrev Number: 0 <1><12ff>: Abbrev Number: 6 (DW_TAG_reference_type) <1300> DW_AT_type : <0x12af> <1><1304>: Abbrev Number: 4 (DW_TAG_typedef) <1305> DW_AT_name : $rtti_header$8 <1314> DW_AT_type : <0x1318> <1><1318>: Abbrev Number: 7 (DW_TAG_structure_type) <1319> DW_AT_name : $RTTI_HEADER$8 <1328> DW_AT_byte_size : 10 <2><1329>: Abbrev Number: 0 <1><132a>: Abbrev Number: 6 (DW_TAG_reference_type) <132b> DW_AT_type : <0x1304> <1><132f>: Abbrev Number: 4 (DW_TAG_typedef) <1330> DW_AT_name : $rttidef$RTTI_$UTESTOBJ_$$_TTESTREC <1354> DW_AT_type : <0x1358> <1><1358>: Abbrev Number: 7 (DW_TAG_structure_type) <1359> DW_AT_name : $RTTIDEF$RTTI_$UTESTOBJ_$$_TTESTREC <137d> DW_AT_byte_size : 22 <2><137e>: Abbrev Number: 0 <1><137f>: Abbrev Number: 6 (DW_TAG_reference_type) <1380> DW_AT_type : <0x132f> <1><1384>: Abbrev Number: 0 ``` ## Possible fixes
issue