Skip to content
Snippets Groups Projects
Select Git revision
  • master default
1 result

corefile.c

Forked from Petteri Mäki / binutils-gdb
Source project has a limited visibility.
  • Yao Qi's avatar
    edf689f0
    Throw NOT_AVAILABLE_ERROR in read_stack and read_code · edf689f0
    Yao Qi authored
    Nowadays, read_memory may throw NOT_AVAILABLE_ERROR (it is done by
    patch http://sourceware.org/ml/gdb-patches/2013-08/msg00625.html)
    however, read_stack and read_code still throws MEMORY_ERROR only.  This
    causes PR 19947, that is prologue unwinder is unable unwind because
    code memory isn't available, but MEMORY_ERROR is thrown, while unwinder
    catches NOT_AVAILABLE_ERROR.
    
     #0  memory_error (err=err@entry=TARGET_XFER_E_IO, memaddr=memaddr@entry=140737349781158) at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:217
     #1  0x000000000065f5ba in read_code (memaddr=memaddr@entry=140737349781158, myaddr=myaddr@entry=0x7fffffffd7b0 "\340\023<\001", len=len@entry=1)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:288
     #2  0x000000000065f7b5 in read_code_unsigned_integer (memaddr=memaddr@entry=140737349781158, len=len@entry=1, byte_order=byte_order@entry=BFD_ENDIAN_LITTLE)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:363
     #3  0x00000000004717e0 in amd64_analyze_prologue (gdbarch=gdbarch@entry=0x13c13e0, pc=140737349781158, current_pc=140737349781165, cache=cache@entry=0xda0cb0)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2267
     #4  0x0000000000471f6d in amd64_frame_cache_1 (cache=0xda0cb0, this_frame=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2437
     #5  amd64_frame_cache (this_frame=0xda0bf0, this_cache=<optimised out>) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2508
     #6  0x000000000047214d in amd64_frame_this_id (this_frame=<optimised out>, this_cache=<optimised out>, this_id=0xda0c50)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2541
     #7  0x00000000006b94c4 in compute_frame_id (fi=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:481
     #8  get_prev_frame_if_no_cycle (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1809
     #9  0x00000000006bb6c9 in get_prev_frame_always_1 (this_frame=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1983
     #10 get_prev_frame_always (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1999
     #11 0x00000000006bbe11 in get_prev_frame (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:2241
     #12 0x00000000006bc13c in unwind_to_current_frame (ui_out=<optimised out>, args=args@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1485
    
    The fix is to let read_stack and read_code throw NOT_AVAILABLE_ERROR too,
    in order to align with read_memory.
    
    gdb:
    
    2016-05-04  Yao Qi  <yao.qi@linaro.org>
    
    	PR gdb/19947
    	* corefile.c (read_memory): Rename it to ...
    	(read_memory_object): ... it.  Add parameter object.
    	(read_memory): Call read_memory_object.
    	(read_stack): Likewise.
    	(read_code): Likewise.
    edf689f0
    History
    Throw NOT_AVAILABLE_ERROR in read_stack and read_code
    Yao Qi authored
    Nowadays, read_memory may throw NOT_AVAILABLE_ERROR (it is done by
    patch http://sourceware.org/ml/gdb-patches/2013-08/msg00625.html)
    however, read_stack and read_code still throws MEMORY_ERROR only.  This
    causes PR 19947, that is prologue unwinder is unable unwind because
    code memory isn't available, but MEMORY_ERROR is thrown, while unwinder
    catches NOT_AVAILABLE_ERROR.
    
     #0  memory_error (err=err@entry=TARGET_XFER_E_IO, memaddr=memaddr@entry=140737349781158) at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:217
     #1  0x000000000065f5ba in read_code (memaddr=memaddr@entry=140737349781158, myaddr=myaddr@entry=0x7fffffffd7b0 "\340\023<\001", len=len@entry=1)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:288
     #2  0x000000000065f7b5 in read_code_unsigned_integer (memaddr=memaddr@entry=140737349781158, len=len@entry=1, byte_order=byte_order@entry=BFD_ENDIAN_LITTLE)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:363
     #3  0x00000000004717e0 in amd64_analyze_prologue (gdbarch=gdbarch@entry=0x13c13e0, pc=140737349781158, current_pc=140737349781165, cache=cache@entry=0xda0cb0)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2267
     #4  0x0000000000471f6d in amd64_frame_cache_1 (cache=0xda0cb0, this_frame=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2437
     #5  amd64_frame_cache (this_frame=0xda0bf0, this_cache=<optimised out>) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2508
     #6  0x000000000047214d in amd64_frame_this_id (this_frame=<optimised out>, this_cache=<optimised out>, this_id=0xda0c50)
         at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2541
     #7  0x00000000006b94c4 in compute_frame_id (fi=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:481
     #8  get_prev_frame_if_no_cycle (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1809
     #9  0x00000000006bb6c9 in get_prev_frame_always_1 (this_frame=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1983
     #10 get_prev_frame_always (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1999
     #11 0x00000000006bbe11 in get_prev_frame (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:2241
     #12 0x00000000006bc13c in unwind_to_current_frame (ui_out=<optimised out>, args=args@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1485
    
    The fix is to let read_stack and read_code throw NOT_AVAILABLE_ERROR too,
    in order to align with read_memory.
    
    gdb:
    
    2016-05-04  Yao Qi  <yao.qi@linaro.org>
    
    	PR gdb/19947
    	* corefile.c (read_memory): Rename it to ...
    	(read_memory_object): ... it.  Add parameter object.
    	(read_memory): Call read_memory_object.
    	(read_stack): Likewise.
    	(read_code): Likewise.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.