Jan Kratochvil 3bff4d9
commit 50e64da58e648ff8708935add5b2a87b4e590edf
Jan Kratochvil 3bff4d9
Author: Yao Qi <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
Date:   Tue Jul 25 10:15:25 2017 +0100
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
    [ARM] Access FPSCR on vfpv2
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    GDB can fetch or store FPSCR on vfpv3, which has 32 VFP registers, but
Jan Kratochvil 3bff4d9
    fail to do so on vfpv2, which has 16 VFP registers.  GDB code is incorrect
Jan Kratochvil 3bff4d9
    for vfpv2,
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
           else if (tdep->vfp_register_count > 0
Jan Kratochvil 3bff4d9
                   && regno >= ARM_D0_REGNUM
Jan Kratochvil 3bff4d9
                   && regno <= ARM_D0_REGNUM + tdep->vfp_register_count)
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    while FPSCR register number is defined as ARM_D0_REGNUM + 32.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
      ARM_D0_REGNUM,                /* VFP double-precision registers.  */
Jan Kratochvil 3bff4d9
      ARM_D31_REGNUM = ARM_D0_REGNUM + 31,
Jan Kratochvil 3bff4d9
      ARM_FPSCR_REGNUM,
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    The code above uses "<=" rather than "<", in order to put FPSCR in the
Jan Kratochvil 3bff4d9
    range, but it is only correct when tdep->vfp_register_count is 32.  On
Jan Kratochvil 3bff4d9
    vpfv2, it is 16, and FPSCR is out of the range, so fetch_vfp_regs or
Jan Kratochvil 3bff4d9
    store_vfp_regs are not called.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    gdb:
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    2017-07-25  Yao Qi  <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
            PR tdep/21717
Jan Kratochvil 3bff4d9
            * arm-linux-nat.c (arm_linux_fetch_inferior_registers): Update
Jan Kratochvil 3bff4d9
            condition for FPSCR.
Jan Kratochvil 3bff4d9
            (arm_linux_store_inferior_registers): Likewise.
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
### a/gdb/ChangeLog
Jan Kratochvil 3bff4d9
### b/gdb/ChangeLog
Jan Kratochvil 3bff4d9
## -1,3 +1,10 @@
Jan Kratochvil 3bff4d9
+2017-07-25  Yao Qi  <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	PR tdep/21717
Jan Kratochvil 3bff4d9
+	* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Update
Jan Kratochvil 3bff4d9
+	condition for FPSCR.
Jan Kratochvil 3bff4d9
+	(arm_linux_store_inferior_registers): Likewise.
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
 2017-06-04  Joel Brobecker  <brobecker@adacore.com>
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 	* version.in: Set GDB version number to 8.0.0.DATE-git.
Jan Kratochvil 3bff4d9
--- a/gdb/arm-linux-nat.c
Jan Kratochvil 3bff4d9
+++ b/gdb/arm-linux-nat.c
Jan Kratochvil 3bff4d9
@@ -402,7 +402,8 @@ arm_linux_fetch_inferior_registers (struct target_ops *ops,
Jan Kratochvil 3bff4d9
 	fetch_wmmx_regs (regcache);
Jan Kratochvil 3bff4d9
       else if (tdep->vfp_register_count > 0
Jan Kratochvil 3bff4d9
 	       && regno >= ARM_D0_REGNUM
Jan Kratochvil 3bff4d9
-	       && regno <= ARM_D0_REGNUM + tdep->vfp_register_count)
Jan Kratochvil 3bff4d9
+	       && (regno < ARM_D0_REGNUM + tdep->vfp_register_count
Jan Kratochvil 3bff4d9
+		   || regno == ARM_FPSCR_REGNUM))
Jan Kratochvil 3bff4d9
 	fetch_vfp_regs (regcache);
Jan Kratochvil 3bff4d9
     }
Jan Kratochvil 3bff4d9
 }
Jan Kratochvil 3bff4d9
@@ -439,7 +440,8 @@ arm_linux_store_inferior_registers (struct target_ops *ops,
Jan Kratochvil 3bff4d9
 	store_wmmx_regs (regcache);
Jan Kratochvil 3bff4d9
       else if (tdep->vfp_register_count > 0
Jan Kratochvil 3bff4d9
 	       && regno >= ARM_D0_REGNUM
Jan Kratochvil 3bff4d9
-	       && regno <= ARM_D0_REGNUM + tdep->vfp_register_count)
Jan Kratochvil 3bff4d9
+	       && (regno < ARM_D0_REGNUM + tdep->vfp_register_count
Jan Kratochvil 3bff4d9
+		   || regno == ARM_FPSCR_REGNUM))
Jan Kratochvil 3bff4d9
 	store_vfp_regs (regcache);
Jan Kratochvil 3bff4d9
     }
Jan Kratochvil 3bff4d9
 }
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
commit cd33a03d183a268b83ccbcae07f3788308e8d9f4
Jan Kratochvil 3bff4d9
Author: Yao Qi <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
Date:   Tue Jul 25 11:38:50 2017 +0100
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
    Catch exceptions thrown from gdbarch_skip_prologue
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    PR 21555 is caused by the exception during the prologue analysis when re-set
Jan Kratochvil 3bff4d9
    a breakpoint.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    (gdb) bt
Jan Kratochvil 3bff4d9
     #0  memory_error_message (err=TARGET_XFER_E_IO, gdbarch=0x153db50, memaddr=93824992233232) at ../../binutils-gdb/gdb/corefile.c:192
Jan Kratochvil 3bff4d9
     #1  0x00000000005718ed in memory_error (err=TARGET_XFER_E_IO, memaddr=memaddr@entry=93824992233232) at ../../binutils-gdb/gdb/corefile.c:220
Jan Kratochvil 3bff4d9
     #2  0x00000000005719d6 in read_memory_object (object=object@entry=TARGET_OBJECT_CODE_MEMORY, memaddr=93824992233232, memaddr@entry=1, myaddr=myaddr@entry=0x7fffffffd0a0 "P\333S\001", len=len@entry=1) at ../../binutils-gdb/gdb/corefile.c:259
Jan Kratochvil 3bff4d9
     #3  0x0000000000571c6e in read_code (len=1, myaddr=0x7fffffffd0a0 "P\333S\001", memaddr=<optimized out>) at ../../binutils-gdb/gdb/corefile.c:287
Jan Kratochvil 3bff4d9
     #4  read_code_unsigned_integer (memaddr=memaddr@entry=93824992233232, len=len@entry=1, byte_order=byte_order@entry=BFD_ENDIAN_LITTLE)                          at ../../binutils-gdb/gdb/corefile.c:362
Jan Kratochvil 3bff4d9
     #5  0x000000000041d4a0 in amd64_analyze_prologue (gdbarch=gdbarch@entry=0x153db50, pc=pc@entry=93824992233232, current_pc=current_pc@entry=18446744073709551615, cache=cache@entry=0x7fffffffd1e0) at ../../binutils-gdb/gdb/amd64-tdep.c:2310
Jan Kratochvil 3bff4d9
     #6  0x000000000041e404 in amd64_skip_prologue (gdbarch=0x153db50, start_pc=93824992233232) at ../../binutils-gdb/gdb/amd64-tdep.c:2459
Jan Kratochvil 3bff4d9
     #7  0x000000000067bfb0 in skip_prologue_sal (sal=sal@entry=0x7fffffffd4e0) at ../../binutils-gdb/gdb/symtab.c:3628
Jan Kratochvil 3bff4d9
     #8  0x000000000067c4d8 in find_function_start_sal (sym=sym@entry=0x1549960, funfirstline=1) at ../../binutils-gdb/gdb/symtab.c:3501
Jan Kratochvil 3bff4d9
     #9  0x000000000060999d in symbol_to_sal (result=result@entry=0x7fffffffd5f0, funfirstline=<optimized out>, sym=sym@entry=0x1549960) at ../../binutils-gdb/gdb/linespec.c:3860
Jan Kratochvil 3bff4d9
    ....
Jan Kratochvil 3bff4d9
     #16 0x000000000054b733 in location_to_sals (b=b@entry=0x15792d0, location=0x157c230, search_pspace=search_pspace@entry=0x1148120, found=found@entry=0x7fffffffdc64) at ../../binutils-gdb/gdb/breakpoint.c:14211
Jan Kratochvil 3bff4d9
     #17 0x000000000054c1f5 in breakpoint_re_set_default (b=0x15792d0) at ../../binutils-gdb/gdb/breakpoint.c:14301
Jan Kratochvil 3bff4d9
     #18 0x00000000005412a9 in breakpoint_re_set_one (bint=bint@entry=0x15792d0) at ../../binutils-gdb/gdb/breakpoint.c:14412
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    This problem can be fixed by
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
     - either each prologue analyzer doesn't throw exception,
Jan Kratochvil 3bff4d9
     - or catch the exception thrown from gdbarch_skip_prologue,
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    I choose the latter because the former needs to fix *every* prologue
Jan Kratochvil 3bff4d9
    analyzer to not throw exception.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    This error can be reproduced by changing reread.exp.  The test reread.exp
Jan Kratochvil 3bff4d9
    has already test that breakpoint can be reset correctly after the
Jan Kratochvil 3bff4d9
    executable is re-read.  This patch extends this test by compiling test c
Jan Kratochvil 3bff4d9
    file with and without -fPIE.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    (gdb) run ^M
Jan Kratochvil 3bff4d9
    The program being debugged has been started already.^M
Jan Kratochvil 3bff4d9
    Start it from the beginning? (y or n) y^M
Jan Kratochvil 3bff4d9
    x86_64/gdb/testsuite/outputs/gdb.base/reread/reread' has changed; re-reading symbols.
Jan Kratochvil 3bff4d9
    Error in re-setting breakpoint 1: Cannot access memory at address 0x555555554790^M
Jan Kratochvil 3bff4d9
    Error in re-setting breakpoint 2: Cannot access memory at address 0x555555554790^M
Jan Kratochvil 3bff4d9
    Starting program: /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.base/reread/reread ^M
Jan Kratochvil 3bff4d9
    This is foo^M
Jan Kratochvil 3bff4d9
    [Inferior 1 (process 27720) exited normally]^M
Jan Kratochvil 3bff4d9
    (gdb) FAIL: gdb.base/reread.exp: opts= "-fPIE" "ldflags=-pie" : run to foo() second time (the program exited)
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    This patch doesn't re-indent the code, to keep the patch simple.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    gdb:
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    2017-07-25  Yao Qi  <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
            PR gdb/21555
Jan Kratochvil 3bff4d9
            * arch-utils.c (gdbarch_skip_prologue_noexcept): New function.
Jan Kratochvil 3bff4d9
            * arch-utils.h (gdbarch_skip_prologue_noexcept): Declare.
Jan Kratochvil 3bff4d9
            * infrun.c: Include arch-utils.h
Jan Kratochvil 3bff4d9
            (handle_step_into_function): Call gdbarch_skip_prologue_noexcept.
Jan Kratochvil 3bff4d9
            (handle_step_into_function_backward): Likewise.
Jan Kratochvil 3bff4d9
            * symtab.c (skip_prologue_sal): Likewise.
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    gdb/testsuite:
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
    2017-07-25  Yao Qi  <yao.qi@linaro.org>
Jan Kratochvil 3bff4d9
    
Jan Kratochvil 3bff4d9
            PR gdb/21555
Jan Kratochvil 3bff4d9
            * gdb.base/reread.exp: Wrap the whole test with two kinds of
Jan Kratochvil 3bff4d9
            compilation flags, with -fPIE and without -fPIE.
Jan Kratochvil 3bff4d9
Jan Kratochvil 3bff4d9
--- a/gdb/arch-utils.c
Jan Kratochvil 3bff4d9
+++ b/gdb/arch-utils.c
Jan Kratochvil 3bff4d9
@@ -964,6 +964,24 @@ default_guess_tracepoint_registers (struct gdbarch *gdbarch,
Jan Kratochvil 3bff4d9
   regcache_raw_supply (regcache, pc_regno, regs);
Jan Kratochvil 3bff4d9
 }
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
+/* See arch-utils.h.  */
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+CORE_ADDR
Jan Kratochvil 3bff4d9
+gdbarch_skip_prologue_noexcept (gdbarch *gdbarch, CORE_ADDR pc) noexcept
Jan Kratochvil 3bff4d9
+{
Jan Kratochvil 3bff4d9
+  CORE_ADDR new_pc = pc;
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+  TRY
Jan Kratochvil 3bff4d9
+    {
Jan Kratochvil 3bff4d9
+      new_pc = gdbarch_skip_prologue (gdbarch, pc);
Jan Kratochvil 3bff4d9
+    }
Jan Kratochvil 3bff4d9
+  CATCH (ex, RETURN_MASK_ALL)
Jan Kratochvil 3bff4d9
+    {}
Jan Kratochvil 3bff4d9
+  END_CATCH
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+  return new_pc;
Jan Kratochvil 3bff4d9
+}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
 /* -Wmissing-prototypes */
Jan Kratochvil 3bff4d9
 extern initialize_file_ftype _initialize_gdbarch_utils;
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
--- a/gdb/arch-utils.h
Jan Kratochvil 3bff4d9
+++ b/gdb/arch-utils.h
Jan Kratochvil 3bff4d9
@@ -267,4 +267,10 @@ extern void default_guess_tracepoint_registers (struct gdbarch *gdbarch,
Jan Kratochvil 3bff4d9
 						struct regcache *regcache,
Jan Kratochvil 3bff4d9
 						CORE_ADDR addr);
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
+/* Wrapper to gdbarch_skip_prologue, but doesn't throw exception.  Catch
Jan Kratochvil 3bff4d9
+   exception thrown from gdbarch_skip_prologue, and return PC.  */
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+extern CORE_ADDR gdbarch_skip_prologue_noexcept (gdbarch *gdbarch,
Jan Kratochvil 3bff4d9
+						 CORE_ADDR pc) noexcept;
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
 #endif
Jan Kratochvil 3bff4d9
--- a/gdb/infrun.c
Jan Kratochvil 3bff4d9
+++ b/gdb/infrun.c
Jan Kratochvil 3bff4d9
@@ -64,6 +64,7 @@
Jan Kratochvil 3bff4d9
 #include "event-loop.h"
Jan Kratochvil 3bff4d9
 #include "thread-fsm.h"
Jan Kratochvil 3bff4d9
 #include "common/enum-flags.h"
Jan Kratochvil 3bff4d9
+#include "arch-utils.h"
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 /* Prototypes for local functions */
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
@@ -7314,8 +7315,8 @@ handle_step_into_function (struct gdbarch *gdbarch,
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
   cust = find_pc_compunit_symtab (stop_pc);
Jan Kratochvil 3bff4d9
   if (cust != NULL && compunit_language (cust) != language_asm)
Jan Kratochvil 3bff4d9
-    ecs->stop_func_start = gdbarch_skip_prologue (gdbarch,
Jan Kratochvil 3bff4d9
-						  ecs->stop_func_start);
Jan Kratochvil 3bff4d9
+    ecs->stop_func_start
Jan Kratochvil 3bff4d9
+      = gdbarch_skip_prologue_noexcept (gdbarch, ecs->stop_func_start);
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
   stop_func_sal = find_pc_line (ecs->stop_func_start, 0);
Jan Kratochvil 3bff4d9
   /* Use the step_resume_break to step until the end of the prologue,
Jan Kratochvil 3bff4d9
@@ -7393,8 +7394,8 @@ handle_step_into_function_backward (struct gdbarch *gdbarch,
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
   cust = find_pc_compunit_symtab (stop_pc);
Jan Kratochvil 3bff4d9
   if (cust != NULL && compunit_language (cust) != language_asm)
Jan Kratochvil 3bff4d9
-    ecs->stop_func_start = gdbarch_skip_prologue (gdbarch,
Jan Kratochvil 3bff4d9
-						  ecs->stop_func_start);
Jan Kratochvil 3bff4d9
+    ecs->stop_func_start
Jan Kratochvil 3bff4d9
+      = gdbarch_skip_prologue_noexcept (gdbarch, ecs->stop_func_start);
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
   stop_func_sal = find_pc_line (stop_pc, 0);
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
--- a/gdb/symtab.c
Jan Kratochvil 3bff4d9
+++ b/gdb/symtab.c
Jan Kratochvil 3bff4d9
@@ -61,6 +61,7 @@
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 #include "parser-defs.h"
Jan Kratochvil 3bff4d9
 #include "completer.h"
Jan Kratochvil 3bff4d9
+#include "arch-utils.h"
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 /* Forward declarations for local functions.  */
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
@@ -3626,7 +3627,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
Jan Kratochvil 3bff4d9
       if (gdbarch_skip_entrypoint_p (gdbarch))
Jan Kratochvil 3bff4d9
         pc = gdbarch_skip_entrypoint (gdbarch, pc);
Jan Kratochvil 3bff4d9
       if (skip)
Jan Kratochvil 3bff4d9
-	pc = gdbarch_skip_prologue (gdbarch, pc);
Jan Kratochvil 3bff4d9
+	pc = gdbarch_skip_prologue_noexcept (gdbarch, pc);
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
       /* For overlays, map pc back into its mapped VMA range.  */
Jan Kratochvil 3bff4d9
       pc = overlay_mapped_address (pc, section);
Jan Kratochvil 3bff4d9
--- a/gdb/testsuite/gdb.base/reread.exp
Jan Kratochvil 3bff4d9
+++ b/gdb/testsuite/gdb.base/reread.exp
Jan Kratochvil 3bff4d9
@@ -15,111 +15,131 @@
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 set prototypes 1
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
-# build the first test case
Jan Kratochvil 3bff4d9
+# Build programs in PIE mode, to reproduce PR 21555.
Jan Kratochvil 3bff4d9
+foreach_with_prefix opts {
Jan Kratochvil 3bff4d9
+    { "" "" }
Jan Kratochvil 3bff4d9
+    { "-fPIE" "ldflags=-pie" } } {
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
-set testfile1 "reread1"
Jan Kratochvil 3bff4d9
-set srcfile1 ${testfile1}.c
Jan Kratochvil 3bff4d9
-# Cygwin needs $EXEEXT.
Jan Kratochvil 3bff4d9
-set binfile1 [standard_output_file ${testfile1}$EXEEXT]
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug nowarnings}] != "" } {
Jan Kratochvil 3bff4d9
-    untested "failed to compile first testcase"
Jan Kratochvil 3bff4d9
-    return -1
Jan Kratochvil 3bff4d9
-}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# build the second test case
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-set testfile2 "reread2"
Jan Kratochvil 3bff4d9
-set srcfile2 ${testfile2}.c
Jan Kratochvil 3bff4d9
-set binfile2 [standard_output_file ${testfile2}$EXEEXT]
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings}] != ""
Jan Kratochvil 3bff4d9
-      && [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings additional_flags=-DNO_SECTIONS}] != ""} {
Jan Kratochvil 3bff4d9
-    untested "failed to compile second testcase"
Jan Kratochvil 3bff4d9
-    return -1
Jan Kratochvil 3bff4d9
-}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Start with a fresh gdb.
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-set testfile "reread"
Jan Kratochvil 3bff4d9
-set binfile [standard_output_file ${testfile}$EXEEXT]
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-gdb_start
Jan Kratochvil 3bff4d9
-gdb_reinitialize_dir $srcdir/$subdir
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Load the first executable.
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-gdb_rename_execfile ${binfile1} ${binfile}
Jan Kratochvil 3bff4d9
-gdb_load ${binfile}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Set a breakpoint at foo
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-gdb_test "break foo" \
Jan Kratochvil 3bff4d9
-    "Breakpoint.*at.* file .*$srcfile1, line 14.*" \
Jan Kratochvil 3bff4d9
-    "breakpoint foo in first file"
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Run, should see "Breakpoint 1, foo () at hello1.c:14"
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-gdb_run_cmd
Jan Kratochvil 3bff4d9
-gdb_test "" "Breakpoint.* foo .* at .*$srcfile1:14.*" "run to foo()"
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Restore first executable to its original name, and move
Jan Kratochvil 3bff4d9
-# second executable into its place.  Ensure that the new
Jan Kratochvil 3bff4d9
-# executable is at least a second newer than the old.
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-gdb_rename_execfile ${binfile} ${binfile1}
Jan Kratochvil 3bff4d9
-gdb_rename_execfile ${binfile2} ${binfile}
Jan Kratochvil 3bff4d9
-gdb_test "shell sleep 1" ".*" ""
Jan Kratochvil 3bff4d9
-gdb_touch_execfile ${binfile}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-# Run a second time; GDB should detect that the executable has changed
Jan Kratochvil 3bff4d9
-# and reset the breakpoints correctly.
Jan Kratochvil 3bff4d9
-# Should see "Breakpoint 1, foo () at reread2.c:9"
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-set test "run to foo() second time"
Jan Kratochvil 3bff4d9
-if [is_remote target] {
Jan Kratochvil 3bff4d9
-    unsupported $test
Jan Kratochvil 3bff4d9
-} else {
Jan Kratochvil 3bff4d9
-    gdb_run_cmd
Jan Kratochvil 3bff4d9
-    gdb_test "" "Breakpoint.* foo .* at .*:9.*" $test
Jan Kratochvil 3bff4d9
-}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-### Second pass: verify that GDB checks the executable file's
Jan Kratochvil 3bff4d9
-### timestamp when the program is *restarted*, not just when it exits.
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-if [is_remote target] {
Jan Kratochvil 3bff4d9
-    unsupported "second pass: GDB should check for changes before running"
Jan Kratochvil 3bff4d9
-} else {
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-    # Put the older executable back in place.
Jan Kratochvil 3bff4d9
-    gdb_rename_execfile ${binfile} ${binfile2}
Jan Kratochvil 3bff4d9
-    gdb_rename_execfile ${binfile1} ${binfile}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-    # Restart GDB entirely.
Jan Kratochvil 3bff4d9
-    clean_restart ${binfile}
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-    # Set a breakpoint on foo and run to it.
Jan Kratochvil 3bff4d9
-    gdb_test "break foo" \
Jan Kratochvil 3bff4d9
-            "Breakpoint.*at.* file .*$srcfile1, line 14.*" \
Jan Kratochvil 3bff4d9
-            "second pass: breakpoint foo in first file"
Jan Kratochvil 3bff4d9
-    gdb_run_cmd
Jan Kratochvil 3bff4d9
-    gdb_test "" "Breakpoint.* foo .* at .*$srcfile1:14.*" "second pass: run to foo()"
Jan Kratochvil 3bff4d9
-
Jan Kratochvil 3bff4d9
-    # This time, let the program run to completion.  If GDB checks the
Jan Kratochvil 3bff4d9
-    # executable file's timestamp now, it won't notice any change.
Jan Kratochvil 3bff4d9
-    gdb_continue_to_end "second pass"
Jan Kratochvil 3bff4d9
-    
Jan Kratochvil 3bff4d9
-    # Now move the newer executable into place, and re-run.  GDB
Jan Kratochvil 3bff4d9
-    # should still notice that the executable file has changed,
Jan Kratochvil 3bff4d9
-    # and still re-set the breakpoint appropriately.
Jan Kratochvil 3bff4d9
-    gdb_rename_execfile ${binfile} ${binfile1}
Jan Kratochvil 3bff4d9
-    gdb_rename_execfile ${binfile2} ${binfile}
Jan Kratochvil 3bff4d9
-    gdb_run_cmd
Jan Kratochvil 3bff4d9
-    gdb_test "" "Breakpoint.* foo .* at .*:9.*" "second pass: run to foo() second time"
Jan Kratochvil 3bff4d9
-}
Jan Kratochvil 3bff4d9
+	# build the first test case
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
+	set testfile1 "reread1"
Jan Kratochvil 3bff4d9
+	set srcfile1 ${testfile1}.c
Jan Kratochvil 3bff4d9
+	# Cygwin needs $EXEEXT.
Jan Kratochvil 3bff4d9
+	set binfile1 [standard_output_file ${testfile1}$EXEEXT]
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	set testfile1_opt [list debug nowarnings \
Jan Kratochvil 3bff4d9
+			       additional_flags=[lindex $opts 0] \
Jan Kratochvil 3bff4d9
+			       [lindex $opts 1] ]
Jan Kratochvil 3bff4d9
+	if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" \
Jan Kratochvil 3bff4d9
+		   executable ${testfile1_opt}] != "" } {
Jan Kratochvil 3bff4d9
+	    untested "failed to compile first testcase"
Jan Kratochvil 3bff4d9
+	    return -1
Jan Kratochvil 3bff4d9
+	}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# build the second test case
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	set testfile2 "reread2"
Jan Kratochvil 3bff4d9
+	set srcfile2 ${testfile2}.c
Jan Kratochvil 3bff4d9
+	set binfile2 [standard_output_file ${testfile2}$EXEEXT]
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	set testfile2_opt1 [list debug nowarnings \
Jan Kratochvil 3bff4d9
+				additional_flags=[lindex $opts 0] \
Jan Kratochvil 3bff4d9
+				[lindex $opts 1]]
Jan Kratochvil 3bff4d9
+	set testfile2_op2 [list debug nowarnings \
Jan Kratochvil 3bff4d9
+			       "additional_flags=-DNO_SECTIONS [lindex $opts 0]" \
Jan Kratochvil 3bff4d9
+			       [lindex $opts 1]]
Jan Kratochvil 3bff4d9
+	if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \
Jan Kratochvil 3bff4d9
+		   executable ${testfile2_opt1}] != ""
Jan Kratochvil 3bff4d9
+	      && [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \
Jan Kratochvil 3bff4d9
+		      executable ${testfile2_opt2}] != ""} {
Jan Kratochvil 3bff4d9
+	    untested "failed to compile second testcase"
Jan Kratochvil 3bff4d9
+	    return -1
Jan Kratochvil 3bff4d9
+	}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Start with a fresh gdb.
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	set testfile "reread"
Jan Kratochvil 3bff4d9
+	set binfile [standard_output_file ${testfile}$EXEEXT]
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	gdb_start
Jan Kratochvil 3bff4d9
+	gdb_reinitialize_dir $srcdir/$subdir
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Load the first executable.
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	gdb_rename_execfile ${binfile1} ${binfile}
Jan Kratochvil 3bff4d9
+	gdb_load ${binfile}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Set a breakpoint at foo
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	gdb_test "break foo" \
Jan Kratochvil 3bff4d9
+	    "Breakpoint.*at.* file .*$srcfile1, line 14.*" \
Jan Kratochvil 3bff4d9
+	    "breakpoint foo in first file"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Run, should see "Breakpoint 1, foo () at hello1.c:14"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	gdb_run_cmd
Jan Kratochvil 3bff4d9
+	gdb_test "" "Breakpoint.* foo .* at .*$srcfile1:14.*" "run to foo()"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Restore first executable to its original name, and move
Jan Kratochvil 3bff4d9
+	# second executable into its place.  Ensure that the new
Jan Kratochvil 3bff4d9
+	# executable is at least a second newer than the old.
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	gdb_rename_execfile ${binfile} ${binfile1}
Jan Kratochvil 3bff4d9
+	gdb_rename_execfile ${binfile2} ${binfile}
Jan Kratochvil 3bff4d9
+	gdb_test "shell sleep 1" ".*" ""
Jan Kratochvil 3bff4d9
+	gdb_touch_execfile ${binfile}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	# Run a second time; GDB should detect that the executable has changed
Jan Kratochvil 3bff4d9
+	# and reset the breakpoints correctly.
Jan Kratochvil 3bff4d9
+	# Should see "Breakpoint 1, foo () at reread2.c:9"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	set test "run to foo() second time"
Jan Kratochvil 3bff4d9
+	if [is_remote target] {
Jan Kratochvil 3bff4d9
+	    unsupported $test
Jan Kratochvil 3bff4d9
+	} else {
Jan Kratochvil 3bff4d9
+	    gdb_run_cmd
Jan Kratochvil 3bff4d9
+	    gdb_test "" "Breakpoint.* foo .* at .*:9.*" $test
Jan Kratochvil 3bff4d9
+	}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	### Second pass: verify that GDB checks the executable file's
Jan Kratochvil 3bff4d9
+	### timestamp when the program is *restarted*, not just when it exits.
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	if [is_remote target] {
Jan Kratochvil 3bff4d9
+	    unsupported "second pass: GDB should check for changes before running"
Jan Kratochvil 3bff4d9
+	} else {
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	    # Put the older executable back in place.
Jan Kratochvil 3bff4d9
+	    gdb_rename_execfile ${binfile} ${binfile2}
Jan Kratochvil 3bff4d9
+	    gdb_rename_execfile ${binfile1} ${binfile}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	    # Restart GDB entirely.
Jan Kratochvil 3bff4d9
+	    clean_restart ${binfile}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	    # Set a breakpoint on foo and run to it.
Jan Kratochvil 3bff4d9
+	    gdb_test "break foo" \
Jan Kratochvil 3bff4d9
+		"Breakpoint.*at.* file .*$srcfile1, line 14.*" \
Jan Kratochvil 3bff4d9
+		"second pass: breakpoint foo in first file"
Jan Kratochvil 3bff4d9
+	    gdb_run_cmd
Jan Kratochvil 3bff4d9
+	    gdb_test "" "Breakpoint.* foo .* at .*$srcfile1:14.*" \
Jan Kratochvil 3bff4d9
+		"second pass: run to foo()"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	    # This time, let the program run to completion.  If GDB checks the
Jan Kratochvil 3bff4d9
+	    # executable file's timestamp now, it won't notice any change.
Jan Kratochvil 3bff4d9
+	    gdb_continue_to_end "second pass"
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+	    # Now move the newer executable into place, and re-run.  GDB
Jan Kratochvil 3bff4d9
+	    # should still notice that the executable file has changed,
Jan Kratochvil 3bff4d9
+	    # and still re-set the breakpoint appropriately.
Jan Kratochvil 3bff4d9
+	    gdb_rename_execfile ${binfile} ${binfile1}
Jan Kratochvil 3bff4d9
+	    gdb_rename_execfile ${binfile2} ${binfile}
Jan Kratochvil 3bff4d9
+	    gdb_run_cmd
Jan Kratochvil 3bff4d9
+	    gdb_test "" "Breakpoint.* foo .* at .*:9.*" \
Jan Kratochvil 3bff4d9
+		"second pass: run to foo() second time"
Jan Kratochvil 3bff4d9
+	}
Jan Kratochvil 3bff4d9
+
Jan Kratochvil 3bff4d9
+    }
Jan Kratochvil 3bff4d9
 # End of tests.
Jan Kratochvil 3bff4d9
 
Jan Kratochvil 3bff4d9
 return 0
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
commit 16eb6b2db49e6cf2fdca56efd37689fcc170cd37
Jan Kratochvil 99b34dc
Author: Leszek Swirski <leszeks@google.com>
Jan Kratochvil 99b34dc
Date:   Mon Aug 7 16:40:38 2017 +0200
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
    Fix dwarf2_string_attr for -gsplit-dwarf
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
    The dwarf2_string_attr did not allow DW_FORM_GNU_str_index as a form for
Jan Kratochvil 99b34dc
    string types. This manifested as null strings in the namespace_name
Jan Kratochvil 99b34dc
    lookup (replaced with "(anonymous namespace)") when debugging
Jan Kratochvil 99b34dc
    Fission-compiled code.
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
    gdb/ChangeLog:
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
            * dwarf2read.c (dwarf2_string_attr): Allow DW_FORM_GNU_strp_alt.
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
### a/gdb/ChangeLog
Jan Kratochvil 99b34dc
### b/gdb/ChangeLog
Jan Kratochvil 99b34dc
## -1,3 +1,7 @@
Jan Kratochvil 99b34dc
+2017-08-07  Leszek Swirski  <leszeks@google.com>
Jan Kratochvil 99b34dc
+
Jan Kratochvil 99b34dc
+	* dwarf2read.c (dwarf2_string_attr): Allow DW_FORM_GNU_strp_alt.
Jan Kratochvil 99b34dc
+
Jan Kratochvil 99b34dc
 2017-08-07  Simon Marchi  <simon.marchi@ericsson.com>
Jan Kratochvil 99b34dc
 
Jan Kratochvil 99b34dc
 	* remote-sim.c (gdbsim_load): Remove char **argv local variable.
Jan Kratochvil 99b34dc
--- a/gdb/dwarf2read.c
Jan Kratochvil 99b34dc
+++ b/gdb/dwarf2read.c
Jan Kratochvil 99b34dc
@@ -17623,7 +17623,8 @@ dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *c
Jan Kratochvil 99b34dc
   if (attr != NULL)
Jan Kratochvil 99b34dc
     {
Jan Kratochvil 99b34dc
       if (attr->form == DW_FORM_strp || attr->form == DW_FORM_line_strp
Jan Kratochvil 99b34dc
-	  || attr->form == DW_FORM_string || attr->form == DW_FORM_GNU_strp_alt)
Jan Kratochvil 99b34dc
+	  || attr->form == DW_FORM_string || DW_FORM_GNU_str_index
Jan Kratochvil 99b34dc
+	  || attr->form == DW_FORM_GNU_strp_alt)
Jan Kratochvil 99b34dc
 	str = DW_STRING (attr);
Jan Kratochvil 99b34dc
       else
Jan Kratochvil 99b34dc
         complaint (&symfile_complaints,
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
commit b33404388e5bbd8a1fddfde73cd4593ae2b557e8
Jan Kratochvil 99b34dc
Author: H.J. Lu <hjl.tools@gmail.com>
Jan Kratochvil 99b34dc
Date:   Wed Aug 9 05:01:55 2017 -0700
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
    gdb: Fix build failure with GCC 7
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
    Fix:
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
    /export/gnu/import/git/sources/binutils-gdb/gdb/dwarf2read.c: In function ‘const char* dwarf2_string_attr(die_info*, unsigned int, dwarf2_cu*)’:
Jan Kratochvil 99b34dc
    /export/gnu/import/git/sources/binutils-gdb/gdb/dwarf2read.c:17626:39: error: enum constant in boolean context [-Werror=int-in-bool-context]
Jan Kratochvil 99b34dc
        || attr->form == DW_FORM_string || DW_FORM_GNU_str_index
Jan Kratochvil 99b34dc
    
Jan Kratochvil 99b34dc
            * dwarf2read.c (dwarf2_string_attr): Fix a typo.
Jan Kratochvil 99b34dc
Jan Kratochvil 99b34dc
### a/gdb/ChangeLog
Jan Kratochvil 99b34dc
### b/gdb/ChangeLog
Jan Kratochvil 99b34dc
## -1,3 +1,7 @@
Jan Kratochvil 99b34dc
+2017-08-09  H.J. Lu  <hongjiu.lu@intel.com>
Jan Kratochvil 99b34dc
+
Jan Kratochvil 99b34dc
+	* dwarf2read.c (dwarf2_string_attr): Fix a typo.
Jan Kratochvil 99b34dc
+
Jan Kratochvil 99b34dc
 2017-08-09  Alex Lindsay  <alexlindsay239@gmail.com>
Jan Kratochvil 99b34dc
 	    Yao Qi  <yao.qi@linaro.org>
Jan Kratochvil 99b34dc
 
Jan Kratochvil 99b34dc
--- a/gdb/dwarf2read.c
Jan Kratochvil 99b34dc
+++ b/gdb/dwarf2read.c
Jan Kratochvil 99b34dc
@@ -17623,7 +17623,8 @@ dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *c
Jan Kratochvil 99b34dc
   if (attr != NULL)
Jan Kratochvil 99b34dc
     {
Jan Kratochvil 99b34dc
       if (attr->form == DW_FORM_strp || attr->form == DW_FORM_line_strp
Jan Kratochvil 99b34dc
-	  || attr->form == DW_FORM_string || DW_FORM_GNU_str_index
Jan Kratochvil 99b34dc
+	  || attr->form == DW_FORM_string
Jan Kratochvil 99b34dc
+	  || attr->form == DW_FORM_GNU_str_index
Jan Kratochvil 99b34dc
 	  || attr->form == DW_FORM_GNU_strp_alt)
Jan Kratochvil 99b34dc
 	str = DW_STRING (attr);
Jan Kratochvil 99b34dc
       else