Blame SOURCES/gdb-rhbz1225569-oom-killer-aarch64-frame-same-id-5of8.patch

2c2fa1
commit 2d6f0de676f46ebd8bb7d98a0093aa081e17e94b
2c2fa1
Author: Yao Qi <yao@codesourcery.com>
2c2fa1
Date:   Mon Jun 30 11:47:51 2014 +0800
2c2fa1
2c2fa1
    Tweak gdb.trace/tfile.c for thumb mode
2c2fa1
    
2c2fa1
    We see the fail below happens on thumb related multi-libs
2c2fa1
    (-mthumb -march={armv4t,armv7-a}),
2c2fa1
    
2c2fa1
    target tfile tfile-basic.tf ^M
2c2fa1
    warning: Uploaded tracepoint 1 has no source location, using raw address^M
2c2fa1
    warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
2c2fa1
    Tracepoint 3 at 0x8958: file /scratch/yqi/arm-none-linux-gnueabi/src/gdb-trunk/gdb/testsuite/gdb.trace/tfile.c, line 91.^M
2c2fa1
    Created tracepoint 3 for target's tracepoint 1 at 0x8959.^M
2c2fa1
    warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
2c2fa1
    warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
2c2fa1
    warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
2c2fa1
    (gdb) FAIL: gdb.trace/tfile.exp: complete-command 'target tfile'
2c2fa1
    
2c2fa1
    The address of write_basic_trace_file is two-bytes aligned,
2c2fa1
    
2c2fa1
    (gdb) p write_basic_trace_file
2c2fa1
    $1 = {void (void)} 0x8958 <write_basic_trace_file>
2c2fa1
    
2c2fa1
    but the ld sets the LSB of every reference to the function address
2c2fa1
    (indicating the address is in thumb mode), so "&write_basic_trace_file"
2c2fa1
    in the program becomes 0x8959, which is saved in the trace file.  That
2c2fa1
    is why the warnnings are emitted.
2c2fa1
    
2c2fa1
    This patch is to clear the LSB of the function address written to trace
2c2fa1
    file in thumb and thumb2 mode.  This patch fixes the fail above.
2c2fa1
    
2c2fa1
    gdb/testsuite:
2c2fa1
    
2c2fa1
    2014-07-10  Yao Qi  <yao@codesourcery.com>
2c2fa1
    
2c2fa1
    	* gdb.trace/tfile.c (write_basic_trace_file)
2c2fa1
    	[__thumb__||__thumb2__]: Clear the Thumb bit of the function
2c2fa1
    	address written to trace file.
2c2fa1
2c2fa1
Index: gdb-7.6.1/gdb/testsuite/gdb.trace/tfile.c
2c2fa1
===================================================================
2c2fa1
--- gdb-7.6.1.orig/gdb/testsuite/gdb.trace/tfile.c
2c2fa1
+++ gdb-7.6.1/gdb/testsuite/gdb.trace/tfile.c
2c2fa1
@@ -68,6 +68,7 @@ write_basic_trace_file (void)
2c2fa1
 {
2c2fa1
   int fd, int_x;
2c2fa1
   short short_x;
2c2fa1
+  long func_addr;
2c2fa1
 
2c2fa1
   fd = start_trace_file ("basic.tf");
2c2fa1
 
2c2fa1
@@ -86,8 +87,14 @@ write_basic_trace_file (void)
2c2fa1
   /* Dump tracepoint definitions, in syntax similar to that used
2c2fa1
      for reconnection uploads.  */
2c2fa1
   /* FIXME need a portable way to print function address in hex */
2c2fa1
-  snprintf (spbuf, sizeof spbuf, "tp T1:%lx:E:0:0\n",
2c2fa1
-	    (long) &write_basic_trace_file);
2c2fa1
+  func_addr = (long) &write_basic_trace_file;
2c2fa1
+#if defined(__thumb__) || defined(__thumb2__)
2c2fa1
+  /* Although Thumb functions are two-byte aligned, function
2c2fa1
+     pointers have the Thumb bit set.  Clear it.  */
2c2fa1
+  func_addr &= ~1;
2c2fa1
+#endif
2c2fa1
+
2c2fa1
+  snprintf (spbuf, sizeof spbuf, "tp T1:%lx:E:0:0\n", func_addr);
2c2fa1
   write (fd, spbuf, strlen (spbuf));
2c2fa1
   /* (Note that we would only need actions defined if we wanted to
2c2fa1
      test tdump.) */