This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [testsuite patch] i386 regression for funcargs.exp [Re: [PATCH 3/3] Remove HP-UX references fom testsuite]
- From: Pedro Alves <palves at redhat dot com>
- To: Simon Marchi <simon dot marchi at ericsson dot com>, Jan Kratochvil <jan dot kratochvil at redhat dot com>, Simon Marchi <simon dot marchi at polymtl dot ca>
- Cc: gdb-patches at sourceware dot org
- Date: Mon, 11 Jan 2016 13:38:14 +0000
- Subject: Re: [testsuite patch] i386 regression for funcargs.exp [Re: [PATCH 3/3] Remove HP-UX references fom testsuite]
- Authentication-results: sourceware.org; auth=none
- References: <1450567845-27030-1-git-send-email-simon dot marchi at polymtl dot ca> <1450567845-27030-3-git-send-email-simon dot marchi at polymtl dot ca> <5677F519 dot 2010000 at redhat dot com> <CAFXXi0nW5vE+ydzZcASbtgD6OxEGK2RcTGSuCJ4hPEeB2=h5_A at mail dot gmail dot com> <567831CD dot 2090406 at redhat dot com> <CAFXXi0nz4PUiOH5yNVeU_qYX4+giNEC11A1v3a4Nhe3CNeXqwg at mail dot gmail dot com> <20160108193033 dot GA2812 at host1 dot jankratochvil dot net> <569026E5 dot 4060502 at ericsson dot com>
On 01/08/2016 09:15 PM, Simon Marchi wrote:
> I also don't see this on Ubuntu 14.04.3 LTS, gdb master, gcc 4.8.4.
>
I don't see it either on F20, gcc 4.8.3. But I do see it with
gcc 6 (20151117, getting old, but what I had handy).
The difference is that with newer GCC there's an extra instruction
after the call which is still assigned to line 583:
$ diff -up /tmp/4.8.3 /tmp/6.0.0 -U 1000
--- /tmp/4.8.3 2016-01-11 12:37:39.611089156 +0000
+++ /tmp/6.0.0 2016-01-11 13:21:00.021127976 +0000
@@ -1,27 +1,30 @@
583 (*pointer_to_call0a) (c, s, i, l); /* First step into call0a. */
mov 0x804d060,%ebx
mov 0x804d050,%ecx
movzwl 0x804d040,%eax
movswl %ax,%edx
movzbl 0x804d030,%eax
movsbl %al,%eax
- mov %ebx,0xc(%esp)
- mov %ecx,0x8(%esp)
- mov %edx,0x4(%esp)
- mov %eax,(%esp)
- mov 0x7c(%esp),%eax
+ push %ebx
+ push %ecx
+ push %edx
+ push %eax
+ mov -0x1c(%ebp),%eax
call *%eax
+ add $0x10,%esp
584 (*pointer_to_call0a) (c, s, i, l); /* Second step into call0a. */
mov 0x804d060,%ebx
mov 0x804d050,%ecx
movzwl 0x804d040,%eax
movswl %ax,%edx
movzbl 0x804d030,%eax
movsbl %al,%eax
- mov %ebx,0xc(%esp)
- mov %ecx,0x8(%esp)
- mov %edx,0x4(%esp)
- mov %eax,(%esp)
- mov 0x7c(%esp),%eax
+ push %ebx
+ push %ecx
+ push %edx
+ push %eax
+ mov -0x1c(%ebp),%eax
call *%eax
+ add $0x10,%esp
+
I don't know why -m32 changed to push/add instead of mov while 64-bit hasn't.
> But if there is a configuration where this is needed, then yes, it should be re-added.
I agree.
On 01/08/2016 07:30 PM, Jan Kratochvil wrote:
> gdb_test_multiple "finish" "finish from indirectly called function" {
> + -re "\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*First.*$gdb_prompt $" {
> + # On i386, gdb finishes at one line earlier than on x86_64.
> + # Therefore, an extra "step" is necessary to continue the test.
This is most likely needed on non-x86 ports as well.
I think we should say:
# If the branch instruction is not the last instruction in the function call
# line, we'll stop at that line, and need an extra "step" to continue the test.
OK with that change.
Thanks,
Pedro Alves
> + send_gdb "step\n"
> + exp_continue
> + }
> -re ".*\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*Second.*$gdb_prompt $" {
> pass "finish from indirectly called function"
> }