[4/4] Fix gdb.trace/entry-values.exp for thumb mode

Message ID 1404367792-23234-5-git-send-email-yao@codesourcery.com
State New, archived
Headers

Commit Message

Yao Qi July 3, 2014, 6:09 a.m. UTC
  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.  This should also fix the fails on PPC64, but
I didn't test.

gdb/testsuite:

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'.
---
 gdb/testsuite/gdb.trace/entry-values.c   |  6 ++++++
 gdb/testsuite/gdb.trace/entry-values.exp | 10 +++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)
  

Comments

Joel Brobecker July 7, 2014, 3:15 p.m. UTC | #1
> 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'.

This is OK.


Thank you,
  
Yao Qi July 8, 2014, 8:50 a.m. UTC | #2
On 07/07/2014 11:15 PM, Joel Brobecker wrote:
>> 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'.
> 
> This is OK.
> 

Patch is pushed in.
  

Patch

diff --git a/gdb/testsuite/gdb.trace/entry-values.c b/gdb/testsuite/gdb.trace/entry-values.c
index 4f80eb0..11bb739 100644
--- a/gdb/testsuite/gdb.trace/entry-values.c
+++ b/gdb/testsuite/gdb.trace/entry-values.c
@@ -15,12 +15,18 @@ 
    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)
 {
diff --git a/gdb/testsuite/gdb.trace/entry-values.exp b/gdb/testsuite/gdb.trace/entry-values.exp
index f10ffa6..3ccb4d2 100644
--- a/gdb/testsuite/gdb.trace/entry-values.exp
+++ b/gdb/testsuite/gdb.trace/entry-values.exp
@@ -145,8 +145,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}
@@ -163,8 +163,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 {
@@ -173,7 +173,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'