From: "H. Peter Anvin" <hpa@zytor.com>
To: Jan Beulich <JBeulich@novell.com>
Cc: Ingo Molnar <mingo@elte.hu>,
heukelum@fastmail.fm, tglx@linutronix.de,
akpm@linux-foundation.org, LKML <linux-kernel@vger.kernel.org>
Subject: gas 2.16 and assembly macros -- entry_64.S build failure
Date: Thu, 30 Sep 2010 17:26:13 -0700 [thread overview]
Message-ID: <4CA52AA5.5040402@zytor.com> (raw)
In-Reply-To: <4C9219BC0200007800016C53@vpn.id2.novell.com>
On 09/16/2010 04:21 AM, Jan Beulich wrote:
>>
>> Yes, to only generate CFI on binutils that allows us to write sane
>> looking code.
>>
>> I.e. to disable CONFIG_AS_CFI on binutils that are broken for this.
>
> Again - that won't help, as it's the macro invocation that gas
> fails one, not one of the actual .cfi_* directives.
>
Looking again at this issue with the binutils version from hell
(sigh)... I'm running quickly out of ideas.
The problem is that cpp inserts spaces around expansions, so:
pushq_cfi $(USER_DS)
... turns into something like ...
pushq_cfi $( ( 5 * 8 + 3 ) )
... which these old versions of gas considers multiple arguments to the
macro, even though there is no comma anywhere. We can defang *some* of
these problems by using cpp macros to kill them off:
#define pushq_cfi pushq
... but that doesn't work with the macros like movq_cfi. On those, we
could argue that at least people won't put $ on them, but cpp will still
split them apart with spaces; this apparently causes problems at least
as soon as there is an expression more complicated than addition
involved (apparently plus signs are okay, but minus signs aren't!)
I'm completely lost about how to deal with this. We can't simply
defang the macros -- at least not in a way that is likely to *stay*
working -- and dropping the macros is seriously going to impact the
debuggability of the kernel. One way, of course, is to simply declare
binutils 2.16 and 2.15.9x (which is apparently included in
RHEL/CentOS 4) to be broken beyond repair unless distros backport a fix,
and in many ways I think that is the preferred option, but I don't know
if that makes sense to others...
-hpa
next parent reply other threads:[~2010-10-01 0:27 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <201009152110.o8FLAJeJ015584@imap1.linux-foundation.org>
[not found] ` <4C91F07E0200007800016B50@vpn.id2.novell.com>
[not found] ` <20100916082816.GA25681@elte.hu>
[not found] ` <4C91F3A30200007800016B64@vpn.id2.novell.com>
[not found] ` <20100916101355.GA31458@elte.hu>
[not found] ` <4C9219BC0200007800016C53@vpn.id2.novell.com>
2010-10-01 0:26 ` H. Peter Anvin [this message]
2010-10-01 1:01 ` gas 2.16 and assembly macros -- entry_64.S build failure Andrew Morton
2010-10-01 1:48 ` H. Peter Anvin
2010-10-01 8:27 ` Jan Beulich
2010-10-01 15:21 ` H. Peter Anvin
2010-10-01 15:46 ` Jan Beulich
2010-10-01 17:21 ` H. Peter Anvin
2010-10-04 7:36 ` Jan Beulich
2010-10-04 10:04 ` Avi Kivity
2010-10-04 15:43 ` H. Peter Anvin
2010-10-04 16:20 ` Avi Kivity
2010-10-04 18:23 ` H. Peter Anvin
2010-10-05 7:48 ` Avi Kivity
2010-10-05 7:51 ` Ingo Molnar
2010-10-05 9:09 ` Avi Kivity
2010-10-19 10:13 ` Jan Beulich
2010-10-19 10:32 ` Ingo Molnar
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=4CA52AA5.5040402@zytor.com \
--to=hpa@zytor.com \
--cc=JBeulich@novell.com \
--cc=akpm@linux-foundation.org \
--cc=heukelum@fastmail.fm \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox