Fix gdb.trace/entry-values.exp for thumb mode
authorYao Qi <yao@codesourcery.com>
Tue, 1 Jul 2014 11:30:54 +0000 (19:30 +0800)
committerYao Qi <yao@codesourcery.com>
Tue, 8 Jul 2014 08:48:22 +0000 (16:48 +0800)
We see some fails in gdb.trace/entry-values.exp in thumb mode
(-mthumb -march={armv4t,armv7-a}).

In thumb mode, the lsb of references to 'foo' and 'bar' in the assembly
(produced by dwarf assember) is set, so the generated debug
information is incorrect.

This patch copies the approach used by

  [PATCH 4/4] Fix dw2-ifort-parameter.exp on PPC64
  https://sourceware.org/ml/gdb-patches/2014-03/msg00202.html

to introduce new labels 'foo_start' and 'bar_start' which are about
the correct function address (without lsb set).  This patch fixes
these fails we've seen.

gdb/testsuite:

2014-07-08  Yao Qi  <yao@codesourcery.com>

* gdb.trace/entry-values.c: Define labels 'foo_start' and
'bar_start' at the beginning of functions 'foo' and 'bar'
respectively.
* gdb.trace/entry-values.exp: Use 'foo_start' and 'bar_start'
instead of 'foo' and 'bar'.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/entry-values.c
gdb/testsuite/gdb.trace/entry-values.exp

index 1e56a7aafd1ac98b8df81f6eb0bbedbc22e3c142..575e0d870772b1644274f1f07670fe25c9a5d4f3 100644 (file)
@@ -1,3 +1,11 @@
+2014-07-02  Yao Qi  <yao@codesourcery.com>
+
+       * gdb.trace/entry-values.c: Define labels 'foo_start' and
+       'bar_start' at the beginning of functions 'foo' and 'bar'
+       respectively.
+       * gdb.trace/entry-values.exp: Use 'foo_start' and 'bar_start'
+       instead of 'foo' and 'bar'.
+
 2014-07-08  Markus Metzger  <markus.t.metzger@intel.com>
 
        * gdb.btrace/segv.exp: New.
index 4f80eb0cdf968838480e3f7cccb940808ec3da07..11bb73995d5b8d6ae3395aa1d27d7d8798df10de 100644 (file)
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+asm (".section \".text\"");
+asm (".balign 8");
+asm ("foo_start: .globl foo_start");
+
 int
 foo (int i, int j)
 {
   return 0;
 }
 
+asm ("bar_start: .globl bar_start");
+
 int
 bar (int i)
 {
index d648bd1fcc858540cd05d022632b91c3d8404864..4838004d8693d8bba3912b5642b0ed1afb1ff40d 100644 (file)
@@ -147,8 +147,8 @@ Dwarf::assemble $asm_file {
            foo_label: subprogram {
                {name foo}
                {decl_file 1}
-               {low_pc foo addr}
-               {high_pc "foo + $foo_length" addr}
+               {low_pc foo_start addr}
+               {high_pc "foo_start + $foo_length" addr}
            } {
                formal_parameter {
                    {type :$int_label}
@@ -165,8 +165,8 @@ Dwarf::assemble $asm_file {
            subprogram {
                {name bar}
                {decl_file 1}
-               {low_pc bar addr}
-               {high_pc "bar + $bar_length" addr}
+               {low_pc bar_start addr}
+               {high_pc "bar_start + $bar_length" addr}
                {GNU_all_call_sites 1}
            } {
                formal_parameter {
@@ -175,7 +175,7 @@ Dwarf::assemble $asm_file {
                }
 
                GNU_call_site {
-                   {low_pc "bar + $bar_call_foo" addr}
+                   {low_pc "bar_start + $bar_call_foo" addr}
                    {abstract_origin :$foo_label}
                } {
                    # Faked entry values are reference to variables 'global1'