All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mjw@redhat.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: "Frederic Weisbecker (commit_signer:4/25=16%)"
	<fweisbec@gmail.com>,
	"maintainer:X86 ARCHITECTURE..." <x86@kernel.org>,
	"Thomas Gleixner(maintainer:X86 ARCHITECTURE...)" 
	<tglx@linutronix.de>,
	"Andi Kleen(commit_signer:5/25=20%)" <ak@linux.intel.com>,
	"commit_signer:11/25=44%)Ingo Molnar (maintainer:X86
	ARCHITECTURE..."  <mingo@redhat.com>,
	linux-kernel@vger.kernel.org,
	"commit_signer:4/25=16%) H. Peter Anvin(maintainer:X86
	ARCHITECTURE..."  <hpa@zytor.com>
Subject: Re: [PATCH] x86-64: Fix CFI data for common_interrupt
Date: Tue, 21 Feb 2012 23:08:10 +0100	[thread overview]
Message-ID: <20120221220810.GE2590@toonder.wildebeest.org> (raw)
In-Reply-To: <4F43C5B60200007800074392@nat28.tlf.novell.com>

[-- Attachment #1: Type: text/plain, Size: 1371 bytes --]

On Tue, Feb 21, 2012 at 03:26:30PM +0000, Jan Beulich wrote:
> >>> On 21.02.12 at 15:43, Mark Wielaard <mjw@redhat.com> wrote:
> > For DW_CFA_def_register DWARF4 explicitly says so: "This operation is
> > valid only if the current CFA rule is defined to use a register and
> > offset." So one needs to use CFI_DEF_CFA with both a register and an
> > offset here after the def_cfa_expression.
> 
> Hmm, that's in contrast to the gas implementation (but I'd certainly
> give the specification preference if it explicitly states so, so gas
> should at least emit a warning here rather than considering this
> valid).

I am afraid gas cannot help us here. Since like you pointed out in your
patch:

    This requires the use of .cfi_escape (allowing arbitrary byte
    streams to be emitted into .eh_frame), as there is no
    .cfi_def_cfa_expression (which also cannot reasonably be
    expected, as it would require a full expression parser).

So we are on our own here.

> But provided the specification mandates this, I'm okay with the change
> in principle. Just that specifying an offset of 0 doesn't look right then.

Yeah, I dunno what I was thinking. The offset should be set to the offset
that was there before when rsi was pushed. The attached patch does that
by using the same value as was used at the start of common_interrupt.
Does that look OK?

Thanks,

Mark

[-- Attachment #2: 0001-x86-64-Fix-CFI-data-for-common_interrupt.patch --]
[-- Type: text/plain, Size: 1170 bytes --]

>From 5b48b64319463a4ccab560304ce3cf72c71d081d Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mjw@redhat.com>
Date: Tue, 21 Feb 2012 14:45:52 +0100
Subject: [PATCH] x86-64: Fix CFI data for common_interrupt

Commit eab9e6 "x86-64: Fix CFI data for interrupt frames" introduced
a DW_CFA_def_cfa_expression in the SAVE_ARGS_IRQ macro. To later define
the CFA using a simple register+offset rule both register and offset
need to be supplied. Just using CFI_DEF_CFA_REGISTER leaves the offset
undefined. So use CFI_DEF_CFA with reg+off explicitly at the end of
common_interrupt.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
---
 arch/x86/kernel/entry_64.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 3fe8239..308b604 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -813,7 +813,7 @@ ret_from_intr:
 
 	/* Restore saved previous stack */
 	popq %rsi
-	CFI_DEF_CFA_REGISTER	rsi
+	CFI_DEF_CFA rsi,16+SS-RBP	/* reg/off reset after def_cfa_expr */
 	leaq ARGOFFSET-RBP(%rsi), %rsp
 	CFI_DEF_CFA_REGISTER	rsp
 	CFI_ADJUST_CFA_OFFSET	RBP-ARGOFFSET
-- 
1.7.7.6


  reply	other threads:[~2012-02-21 22:08 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-21 14:06 [PATCH] x86-64: Fix CFI data for common_interrupt Mark Wielaard
2012-02-21 14:26 ` Jan Beulich
2012-02-21 14:43   ` Mark Wielaard
2012-02-21 15:26     ` Jan Beulich
2012-02-21 22:08       ` Mark Wielaard [this message]
2012-02-22  8:05         ` Jan Beulich
2012-02-24  9:49         ` Jan Beulich
2012-02-24 10:32           ` Mark J. Wielaard
2012-02-27 12:08             ` [tip:x86/debug] x86-64: Fix CFI data for common_interrupt() tip-bot for Mark Wielaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120221220810.GE2590@toonder.wildebeest.org \
    --to=mjw@redhat.com \
    --cc=JBeulich@suse.com \
    --cc=ak@linux.intel.com \
    --cc=fweisbec@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.