* Does DW_OP_deref work? @ 2003-07-30 21:54 H. J. Lu 2003-07-30 21:56 ` Daniel Jacobowitz 0 siblings, 1 reply; 7+ messages in thread From: H. J. Lu @ 2003-07-30 21:54 UTC (permalink / raw) To: GDB Does DW_OP_deref work correctly with gdb? H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Does DW_OP_deref work? 2003-07-30 21:54 Does DW_OP_deref work? H. J. Lu @ 2003-07-30 21:56 ` Daniel Jacobowitz 2003-07-31 0:23 ` H. J. Lu 0 siblings, 1 reply; 7+ messages in thread From: Daniel Jacobowitz @ 2003-07-30 21:56 UTC (permalink / raw) To: GDB On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > Does DW_OP_deref work correctly with gdb? That depends on the context. Things that use decode_locdesc, probably not. As we find time, things are being converted to the full expression evaluator. Location descriptions and frame bases should work. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Does DW_OP_deref work? 2003-07-30 21:56 ` Daniel Jacobowitz @ 2003-07-31 0:23 ` H. J. Lu 2003-07-31 0:27 ` Daniel Jacobowitz 0 siblings, 1 reply; 7+ messages in thread From: H. J. Lu @ 2003-07-31 0:23 UTC (permalink / raw) To: GDB On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > Does DW_OP_deref work correctly with gdb? > > That depends on the context. Things that use decode_locdesc, probably > not. As we find time, things are being converted to the full > expression evaluator. Location descriptions and frame bases should > work. I don't think it does. Intel Fortran compiler generartes DW_OP_deref. I got (gdb) b wkinit During symbol reading, unsupported tag: 'DW_TAG_entry_point'. Breakpoint 1 at 0x8049211: file test.f, line 13. (gdb) r Starting program: a.out Breakpoint 1, wkinit (wksize=Cannot access memory at address 0xc8078578 ) at test.f:13 13 Current language: auto; currently fortran (gdb) H.J. ---- The section .debug_info contains: Compilation Unit @ 0: Length: 304 Version: 2 Abbrev Offset: 0 Pointer Size: 4 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit) DW_AT_comp_dir : /home/cmplr/usr2/mtokugaw DW_AT_language : 8 (Fortran 90) DW_AT_name : test.f DW_AT_producer : EPC Fortran-95 Version F95 Intel:200200:131124 DW_AT_stmt_list : 0 <1><61>: Abbrev Number: 2 (DW_TAG_base_type) DW_AT_byte_size : 0 DW_AT_encoding : 5 (signed) DW_AT_name : void <1><69>: Abbrev Number: 3 (DW_TAG_subprogram) DW_AT_decl_line : 1 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_sibling : <8e> DW_AT_accessibility: 1 (public) DW_AT_calling_convention: 2 (program) DW_AT_name : main.program DW_AT_type : <61> DW_AT_prototyped : 0 DW_AT_high_pc : 0x8049206 134517254 DW_AT_low_pc : 0x8049198 134517144 DW_AT_external : 1 <1><8e>: Abbrev Number: 4 (DW_TAG_subprogram) DW_AT_decl_line : 6 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_sibling : <125> DW_AT_accessibility: 1 (public) DW_AT_name : wkinit DW_AT_type : <61> DW_AT_prototyped : 0 DW_AT_high_pc : 0x8049456 134517846 DW_AT_low_pc : 0x8049206 134517254 DW_AT_external : 1 <2><ac>: Abbrev Number: 5 (DW_TAG_formal_parameter) DW_AT_decl_line : 31 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_type : <125> DW_AT_variable_parameter: 1 DW_AT_name : wksize DW_AT_location : 6 byte block: 3 8 a0 7 8 6 (DW_OP_addr: 807a008; DW_OP_deref) <2><c3>: Abbrev Number: 6 (DW_TAG_entry_point) DW_AT_decl_line : 20 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_sibling : <f2> DW_AT_name : wkprnt DW_AT_type : <61> DW_AT_low_pc : 0x80492ac 134517420 <3><da>: Abbrev Number: 5 (DW_TAG_formal_parameter) DW_AT_decl_line : 31 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_type : <125> DW_AT_variable_parameter: 1 DW_AT_name : jprint DW_AT_location : 6 byte block: 3 14 a0 7 8 6 (DW_OP_addr: 807a014; DW_OP_deref) <2><f2>: Abbrev Number: 7 (DW_TAG_variable) DW_AT_decl_line : 31 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_accessibility: 1 (public) DW_AT_name : jpr DW_AT_type : <125> DW_AT_location : 5 byte block: 3 c a0 7 8 (DW_OP_addr: 807a00c) DW_AT_external : 0 DW_AT_start_scope : 0x8049454 134517844 <2><10a>: Abbrev Number: 7 (DW_TAG_variable) DW_AT_decl_line : 31 DW_AT_decl_column : 0 DW_AT_decl_file : 1 DW_AT_accessibility: 1 (public) DW_AT_name : nsize DW_AT_type : <125> DW_AT_location : 5 byte block: 3 10 a0 7 8 (DW_OP_addr: 807a010) DW_AT_external : 0 DW_AT_start_scope : 0x8049454 134517844 <1><125>: Abbrev Number: 2 (DW_TAG_base_type) DW_AT_byte_size : 4 DW_AT_encoding : 5 (signed) DW_AT_name : integer Contents of the .debug_abbrev section: Number TAG 1 DW_TAG_compile_unit [has children] DW_AT_comp_dir DW_FORM_string DW_AT_language DW_FORM_data1 DW_AT_name DW_FORM_string DW_AT_producer DW_FORM_string DW_AT_stmt_list DW_FORM_data4 2 DW_TAG_base_type [no children] DW_AT_byte_size DW_FORM_data1 DW_AT_encoding DW_FORM_data1 DW_AT_name DW_FORM_string 3 DW_TAG_subprogram [no children] DW_AT_decl_line DW_FORM_data1 DW_AT_decl_column DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_sibling DW_FORM_ref4 DW_AT_accessibility DW_FORM_data1 DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_string DW_AT_type DW_FORM_ref4 DW_AT_prototyped DW_FORM_flag DW_AT_high_pc DW_FORM_addr DW_AT_low_pc DW_FORM_addr DW_AT_external DW_FORM_flag 4 DW_TAG_subprogram [has children] DW_AT_decl_line DW_FORM_data1 DW_AT_decl_column DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_sibling DW_FORM_ref4 DW_AT_accessibility DW_FORM_data1 DW_AT_name DW_FORM_string DW_AT_type DW_FORM_ref4 DW_AT_prototyped DW_FORM_flag DW_AT_high_pc DW_FORM_addr DW_AT_low_pc DW_FORM_addr DW_AT_external DW_FORM_flag 5 DW_TAG_formal_parameter [no children] DW_AT_decl_line DW_FORM_data1 DW_AT_decl_column DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_variable_parameter DW_FORM_flag DW_AT_name DW_FORM_string DW_AT_location DW_FORM_block1 6 DW_TAG_entry_point [has children] DW_AT_decl_line DW_FORM_data1 DW_AT_decl_column DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_sibling DW_FORM_ref4 DW_AT_name DW_FORM_string DW_AT_type DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr 7 DW_TAG_variable [no children] DW_AT_decl_line DW_FORM_data1 DW_AT_decl_column DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_accessibility DW_FORM_data1 DW_AT_name DW_FORM_string DW_AT_type DW_FORM_ref4 DW_AT_location DW_FORM_block1 DW_AT_external DW_FORM_flag DW_AT_start_scope DW_FORM_addr Dump of debug contents of section .debug_line: Length: 94 DWARF Version: 2 Prologue Length: 31 Minimum Instruction Length: 1 Initial value of 'is_stmt': 0 Line Base: -1 Line Range: 4 Opcode Base: 10 Opcodes: Opcode 1 has 0 args Opcode 2 has 1 args Opcode 3 has 1 args Opcode 4 has 1 args Opcode 5 has 1 args Opcode 6 has 0 args Opcode 7 has 0 args Opcode 8 has 0 args Opcode 9 has 1 args The Directory Table is empty. The File Name Table: Entry Dir Time Size Name 1 0 1059586658 583 test.f Line Number Statements: Extended opcode 2: set Address to 0x8049198 Copy Special opcode 158: advance Address by 39 to 0x80491bf and Line by 1 to 2 Special opcode 82: advance Address by 20 to 0x80491d3 and Line by 1 to 3 Special opcode 82: advance Address by 20 to 0x80491e7 and Line by 1 to 4 Special opcode 127: advance Address by 31 to 0x8049206 and Line by 2 to 6 Advance PC by 11 to 8049211 Advance Line by 7 to 13 Copy Special opcode 51: advance Address by 12 to 0x804921d and Line by 2 to 15 Advance PC by 126 to 804929b Advance Line by 2 to 17 Copy Advance PC by 17 to 80492ac Advance Line by 3 to 20 Copy Special opcode 46: advance Address by 11 to 0x80492b7 and Line by 1 to 21 Advance PC by 124 to 8049333 Advance Line by 1 to 22 Copy Advance PC by 126 to 80493b1 Advance Line by 1 to 23 Copy Special opcode 50: advance Address by 12 to 0x80493bd and Line by 1 to 24 Special opcode 63: advance Address by 15 to 0x80493cc and Line by 2 to 26 Special opcode 51: advance Address by 12 to 0x80493d8 and Line by 2 to 28 Advance PC by 124 to 8049454 Advance Line by 3 to 31 Copy Extended opcode 2: set Address to 0x8049456 Extended opcode 1: End of Sequence ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Does DW_OP_deref work? 2003-07-31 0:23 ` H. J. Lu @ 2003-07-31 0:27 ` Daniel Jacobowitz 2003-07-31 15:44 ` H. J. Lu 0 siblings, 1 reply; 7+ messages in thread From: Daniel Jacobowitz @ 2003-07-31 0:27 UTC (permalink / raw) To: H. J. Lu; +Cc: GDB On Wed, Jul 30, 2003 at 05:23:06PM -0700, H. J. Lu wrote: > On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > > Does DW_OP_deref work correctly with gdb? > > > > That depends on the context. Things that use decode_locdesc, probably > > not. As we find time, things are being converted to the full > > expression evaluator. Location descriptions and frame bases should > > work. > > I don't think it does. Intel Fortran compiler generartes DW_OP_deref. > I got Location descriptions for parameters may not work fully. Feel free to fix it, or to investigate the reasons why more thoroughly - search for LOC_COMPUTED_ARG, but I don't even think we generate those yet. > > (gdb) b wkinit > During symbol reading, unsupported tag: 'DW_TAG_entry_point'. > Breakpoint 1 at 0x8049211: file test.f, line 13. > (gdb) r > Starting program: a.out > > Breakpoint 1, wkinit (wksize=Cannot access memory at address 0xc8078578 > ) at test.f:13 > 13 > Current language: auto; currently fortran > (gdb) > > > H.J. > ---- > The section .debug_info contains: > > Compilation Unit @ 0: > Length: 304 > Version: 2 > Abbrev Offset: 0 > Pointer Size: 4 > <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit) > DW_AT_comp_dir : /home/cmplr/usr2/mtokugaw > DW_AT_language : 8 (Fortran 90) > DW_AT_name : test.f > DW_AT_producer : EPC Fortran-95 Version F95 Intel:200200:131124 > DW_AT_stmt_list : 0 > <1><61>: Abbrev Number: 2 (DW_TAG_base_type) > DW_AT_byte_size : 0 > DW_AT_encoding : 5 (signed) > DW_AT_name : void > <1><69>: Abbrev Number: 3 (DW_TAG_subprogram) > DW_AT_decl_line : 1 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_sibling : <8e> > DW_AT_accessibility: 1 (public) > DW_AT_calling_convention: 2 (program) > DW_AT_name : main.program > DW_AT_type : <61> > DW_AT_prototyped : 0 > DW_AT_high_pc : 0x8049206 134517254 > DW_AT_low_pc : 0x8049198 134517144 > DW_AT_external : 1 > <1><8e>: Abbrev Number: 4 (DW_TAG_subprogram) > DW_AT_decl_line : 6 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_sibling : <125> > DW_AT_accessibility: 1 (public) > DW_AT_name : wkinit > DW_AT_type : <61> > DW_AT_prototyped : 0 > DW_AT_high_pc : 0x8049456 134517846 > DW_AT_low_pc : 0x8049206 134517254 > DW_AT_external : 1 > <2><ac>: Abbrev Number: 5 (DW_TAG_formal_parameter) > DW_AT_decl_line : 31 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_type : <125> > DW_AT_variable_parameter: 1 > DW_AT_name : wksize > DW_AT_location : 6 byte block: 3 8 a0 7 8 6 (DW_OP_addr: 807a008; DW_OP_deref) > <2><c3>: Abbrev Number: 6 (DW_TAG_entry_point) > DW_AT_decl_line : 20 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_sibling : <f2> > DW_AT_name : wkprnt > DW_AT_type : <61> > DW_AT_low_pc : 0x80492ac 134517420 > <3><da>: Abbrev Number: 5 (DW_TAG_formal_parameter) > DW_AT_decl_line : 31 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_type : <125> > DW_AT_variable_parameter: 1 > DW_AT_name : jprint > DW_AT_location : 6 byte block: 3 14 a0 7 8 6 (DW_OP_addr: 807a014; DW_OP_deref) > <2><f2>: Abbrev Number: 7 (DW_TAG_variable) > DW_AT_decl_line : 31 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_accessibility: 1 (public) > DW_AT_name : jpr > DW_AT_type : <125> > DW_AT_location : 5 byte block: 3 c a0 7 8 (DW_OP_addr: 807a00c) > DW_AT_external : 0 > DW_AT_start_scope : 0x8049454 134517844 > <2><10a>: Abbrev Number: 7 (DW_TAG_variable) > DW_AT_decl_line : 31 > DW_AT_decl_column : 0 > DW_AT_decl_file : 1 > DW_AT_accessibility: 1 (public) > DW_AT_name : nsize > DW_AT_type : <125> > DW_AT_location : 5 byte block: 3 10 a0 7 8 (DW_OP_addr: 807a010) > DW_AT_external : 0 > DW_AT_start_scope : 0x8049454 134517844 > <1><125>: Abbrev Number: 2 (DW_TAG_base_type) > DW_AT_byte_size : 4 > DW_AT_encoding : 5 (signed) > DW_AT_name : integer > > Contents of the .debug_abbrev section: > > Number TAG > 1 DW_TAG_compile_unit [has children] > DW_AT_comp_dir DW_FORM_string > DW_AT_language DW_FORM_data1 > DW_AT_name DW_FORM_string > DW_AT_producer DW_FORM_string > DW_AT_stmt_list DW_FORM_data4 > 2 DW_TAG_base_type [no children] > DW_AT_byte_size DW_FORM_data1 > DW_AT_encoding DW_FORM_data1 > DW_AT_name DW_FORM_string > 3 DW_TAG_subprogram [no children] > DW_AT_decl_line DW_FORM_data1 > DW_AT_decl_column DW_FORM_data1 > DW_AT_decl_file DW_FORM_data1 > DW_AT_sibling DW_FORM_ref4 > DW_AT_accessibility DW_FORM_data1 > DW_AT_calling_convention DW_FORM_data1 > DW_AT_name DW_FORM_string > DW_AT_type DW_FORM_ref4 > DW_AT_prototyped DW_FORM_flag > DW_AT_high_pc DW_FORM_addr > DW_AT_low_pc DW_FORM_addr > DW_AT_external DW_FORM_flag > 4 DW_TAG_subprogram [has children] > DW_AT_decl_line DW_FORM_data1 > DW_AT_decl_column DW_FORM_data1 > DW_AT_decl_file DW_FORM_data1 > DW_AT_sibling DW_FORM_ref4 > DW_AT_accessibility DW_FORM_data1 > DW_AT_name DW_FORM_string > DW_AT_type DW_FORM_ref4 > DW_AT_prototyped DW_FORM_flag > DW_AT_high_pc DW_FORM_addr > DW_AT_low_pc DW_FORM_addr > DW_AT_external DW_FORM_flag > 5 DW_TAG_formal_parameter [no children] > DW_AT_decl_line DW_FORM_data1 > DW_AT_decl_column DW_FORM_data1 > DW_AT_decl_file DW_FORM_data1 > DW_AT_type DW_FORM_ref4 > DW_AT_variable_parameter DW_FORM_flag > DW_AT_name DW_FORM_string > DW_AT_location DW_FORM_block1 > 6 DW_TAG_entry_point [has children] > DW_AT_decl_line DW_FORM_data1 > DW_AT_decl_column DW_FORM_data1 > DW_AT_decl_file DW_FORM_data1 > DW_AT_sibling DW_FORM_ref4 > DW_AT_name DW_FORM_string > DW_AT_type DW_FORM_ref4 > DW_AT_low_pc DW_FORM_addr > 7 DW_TAG_variable [no children] > DW_AT_decl_line DW_FORM_data1 > DW_AT_decl_column DW_FORM_data1 > DW_AT_decl_file DW_FORM_data1 > DW_AT_accessibility DW_FORM_data1 > DW_AT_name DW_FORM_string > DW_AT_type DW_FORM_ref4 > DW_AT_location DW_FORM_block1 > DW_AT_external DW_FORM_flag > DW_AT_start_scope DW_FORM_addr > > > Dump of debug contents of section .debug_line: > > Length: 94 > DWARF Version: 2 > Prologue Length: 31 > Minimum Instruction Length: 1 > Initial value of 'is_stmt': 0 > Line Base: -1 > Line Range: 4 > Opcode Base: 10 > > Opcodes: > Opcode 1 has 0 args > Opcode 2 has 1 args > Opcode 3 has 1 args > Opcode 4 has 1 args > Opcode 5 has 1 args > Opcode 6 has 0 args > Opcode 7 has 0 args > Opcode 8 has 0 args > Opcode 9 has 1 args > > The Directory Table is empty. > > The File Name Table: > Entry Dir Time Size Name > 1 0 1059586658 583 test.f > > Line Number Statements: > Extended opcode 2: set Address to 0x8049198 > Copy > Special opcode 158: advance Address by 39 to 0x80491bf and Line by 1 to 2 > Special opcode 82: advance Address by 20 to 0x80491d3 and Line by 1 to 3 > Special opcode 82: advance Address by 20 to 0x80491e7 and Line by 1 to 4 > Special opcode 127: advance Address by 31 to 0x8049206 and Line by 2 to 6 > Advance PC by 11 to 8049211 > Advance Line by 7 to 13 > Copy > Special opcode 51: advance Address by 12 to 0x804921d and Line by 2 to 15 > Advance PC by 126 to 804929b > Advance Line by 2 to 17 > Copy > Advance PC by 17 to 80492ac > Advance Line by 3 to 20 > Copy > Special opcode 46: advance Address by 11 to 0x80492b7 and Line by 1 to 21 > Advance PC by 124 to 8049333 > Advance Line by 1 to 22 > Copy > Advance PC by 126 to 80493b1 > Advance Line by 1 to 23 > Copy > Special opcode 50: advance Address by 12 to 0x80493bd and Line by 1 to 24 > Special opcode 63: advance Address by 15 to 0x80493cc and Line by 2 to 26 > Special opcode 51: advance Address by 12 to 0x80493d8 and Line by 2 to 28 > Advance PC by 124 to 8049454 > Advance Line by 3 to 31 > Copy > Extended opcode 2: set Address to 0x8049456 > Extended opcode 1: End of Sequence > > > -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Does DW_OP_deref work? 2003-07-31 0:27 ` Daniel Jacobowitz @ 2003-07-31 15:44 ` H. J. Lu 2003-07-31 15:48 ` Daniel Jacobowitz 0 siblings, 1 reply; 7+ messages in thread From: H. J. Lu @ 2003-07-31 15:44 UTC (permalink / raw) To: GDB On Wed, Jul 30, 2003 at 08:27:53PM -0400, Daniel Jacobowitz wrote: > On Wed, Jul 30, 2003 at 05:23:06PM -0700, H. J. Lu wrote: > > On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > > > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > > > Does DW_OP_deref work correctly with gdb? > > > > > > That depends on the context. Things that use decode_locdesc, probably > > > not. As we find time, things are being converted to the full > > > expression evaluator. Location descriptions and frame bases should > > > work. > > > > I don't think it does. Intel Fortran compiler generartes DW_OP_deref. > > I got > > Location descriptions for parameters may not work fully. Feel free to > fix it, or to investigate the reasons why more thoroughly - search for > LOC_COMPUTED_ARG, but I don't even think we generate those yet. > The problem is gdb has a different idea about DW_OP_deref than Intel compiler. From what I can tell in DWARF 3 draft, DW_OP_deref specifies an address. But dwarf2read.c and gdb doesn't support it at all. There is LOC_REF_ARG, which is an offset from the frame base register. new_symbol in dwarf2read.c has else if (offreg) { if (isderef) { if (basereg != frame_base_reg) dwarf2_complex_location_expr_complaint (); SYMBOL_CLASS (sym) = LOC_REF_ARG; } else { SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg); } } else { SYMBOL_CLASS (sym) = LOC_ARG; } Since DW_OP_deref doesn't use basereg nor frame_base_reg, SYMBOL_CLASS is set to LOC_ARG. DW_OP_deref needs something like LOC_DEREF_ARG, which works on address instead of offset from a base register. H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Does DW_OP_deref work? 2003-07-31 15:44 ` H. J. Lu @ 2003-07-31 15:48 ` Daniel Jacobowitz 2003-07-31 16:13 ` PATCH: Fix DW_OP_deref for DW_TAG_formal_parameter H. J. Lu 0 siblings, 1 reply; 7+ messages in thread From: Daniel Jacobowitz @ 2003-07-31 15:48 UTC (permalink / raw) To: H. J. Lu; +Cc: GDB On Thu, Jul 31, 2003 at 08:44:05AM -0700, H. J. Lu wrote: > On Wed, Jul 30, 2003 at 08:27:53PM -0400, Daniel Jacobowitz wrote: > > On Wed, Jul 30, 2003 at 05:23:06PM -0700, H. J. Lu wrote: > > > On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > > > > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > > > > Does DW_OP_deref work correctly with gdb? > > > > > > > > That depends on the context. Things that use decode_locdesc, probably > > > > not. As we find time, things are being converted to the full > > > > expression evaluator. Location descriptions and frame bases should > > > > work. > > > > > > I don't think it does. Intel Fortran compiler generartes DW_OP_deref. > > > I got > > > > Location descriptions for parameters may not work fully. Feel free to > > fix it, or to investigate the reasons why more thoroughly - search for > > LOC_COMPUTED_ARG, but I don't even think we generate those yet. > > > > The problem is gdb has a different idea about DW_OP_deref than Intel > compiler. From what I can tell in DWARF 3 draft, DW_OP_deref specifies > an address. But dwarf2read.c and gdb doesn't support it at all. There > is LOC_REF_ARG, which is an offset from the frame base register. > new_symbol in dwarf2read.c has > > else if (offreg) > { > if (isderef) > { > if (basereg != frame_base_reg) > dwarf2_complex_location_expr_complaint (); > SYMBOL_CLASS (sym) = LOC_REF_ARG; > } > else > { > SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; > SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg); > } > } > else > { > SYMBOL_CLASS (sym) = LOC_ARG; > } > > Since DW_OP_deref doesn't use basereg nor frame_base_reg, SYMBOL_CLASS > is set to LOC_ARG. DW_OP_deref needs something like LOC_DEREF_ARG, > which works on address instead of offset from a base register. Please look more closely at what I suggested, and at how DW_OP_deref works for DW_TAG_variable (as opposed to DW_TAG_formal_parameter). All of the above should be turned into LOC_COMPUTED_ARG. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer ^ permalink raw reply [flat|nested] 7+ messages in thread
* PATCH: Fix DW_OP_deref for DW_TAG_formal_parameter 2003-07-31 15:48 ` Daniel Jacobowitz @ 2003-07-31 16:13 ` H. J. Lu 0 siblings, 0 replies; 7+ messages in thread From: H. J. Lu @ 2003-07-31 16:13 UTC (permalink / raw) To: GDB; +Cc: GDB [-- Attachment #1: Type: text/plain, Size: 1306 bytes --] On Thu, Jul 31, 2003 at 11:48:21AM -0400, Daniel Jacobowitz wrote: > On Thu, Jul 31, 2003 at 08:44:05AM -0700, H. J. Lu wrote: > > On Wed, Jul 30, 2003 at 08:27:53PM -0400, Daniel Jacobowitz wrote: > > > On Wed, Jul 30, 2003 at 05:23:06PM -0700, H. J. Lu wrote: > > > > On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > > > > > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > > > > > Does DW_OP_deref work correctly with gdb? > > > > > > > > > > That depends on the context. Things that use decode_locdesc, probably > > > > > not. As we find time, things are being converted to the full > > > > > expression evaluator. Location descriptions and frame bases should > > > > > work. > > > > > > > > I don't think it does. Intel Fortran compiler generartes DW_OP_deref. > > > > I got > > > > > > Location descriptions for parameters may not work fully. Feel free to > > > fix it, or to investigate the reasons why more thoroughly - search for > > > LOC_COMPUTED_ARG, but I don't even think we generate those yet. > > > > > > Please look more closely at what I suggested, and at how DW_OP_deref > works for DW_TAG_variable (as opposed to DW_TAG_formal_parameter). All > of the above should be turned into LOC_COMPUTED_ARG. > Thanks. This patch works for me. H.J. [-- Attachment #2: gdb-arg.patch --] [-- Type: text/plain, Size: 1133 bytes --] 2003-07-31 H.J. Lu <hongjiu.lu@intel.com> * dwarf2read.c (new_symbol): Mark DW_TAG_formal_parameter with DW_OP_deref with LOC_COMPUTED_ARG. --- gdb/dwarf2read.c.arg 2003-07-30 21:38:25.000000000 -0700 +++ gdb/dwarf2read.c 2003-07-31 09:06:53.000000000 -0700 @@ -5231,9 +5231,9 @@ new_symbol (struct die_info *die, struct SYMBOL_VALUE (sym) = DWARF2_REG_TO_REGNUM (SYMBOL_VALUE (sym)); } - else if (offreg) + else if (isderef) { - if (isderef) + if (offreg) { if (basereg != frame_base_reg) dwarf2_complex_location_expr_complaint (); @@ -5241,10 +5241,16 @@ new_symbol (struct die_info *die, struct } else { - SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; - SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg); + dwarf2_symbol_mark_computed (attr, sym, + cu_header, objfile); + SYMBOL_CLASS (sym) = LOC_COMPUTED_ARG; } } + else if (offreg) + { + SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; + SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg); + } else { SYMBOL_CLASS (sym) = LOC_ARG; ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-07-31 16:13 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-07-30 21:54 Does DW_OP_deref work? H. J. Lu 2003-07-30 21:56 ` Daniel Jacobowitz 2003-07-31 0:23 ` H. J. Lu 2003-07-31 0:27 ` Daniel Jacobowitz 2003-07-31 15:44 ` H. J. Lu 2003-07-31 15:48 ` Daniel Jacobowitz 2003-07-31 16:13 ` PATCH: Fix DW_OP_deref for DW_TAG_formal_parameter H. J. Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).