From: "H. Peter Anvin" <hpa@zytor.com>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: Andy Lutomirski <luto@amacapital.net>,
Borislav Petkov <bp@alien8.de>, Jan Beulich <JBeulich@suse.com>,
Binutils <binutils@sourceware.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: Avoiding unnecessary jump relocations in gas?
Date: Mon, 18 May 2015 13:28:23 -0700 [thread overview]
Message-ID: <555A4B67.4080201@zytor.com> (raw)
In-Reply-To: <CAMe9rOrSP=XW29ae3fkHrFUdjhfvGbB5b5U=EA74wofNC4qEBA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1151 bytes --]
On 05/18/2015 01:25 PM, H.J. Lu wrote:
> On Mon, May 18, 2015 at 1:06 PM, H. Peter Anvin <hpa@zytor.com> wrote:
>> On 05/18/2015 01:02 PM, H.J. Lu wrote:
>>>>
>>>> I wonder if it would make sense to have explicit mnemonics for the
>>>> one-byte offset and four-byte offset jump variants. Sometimes users
>>>> want a jump with a 32-bit offset for reasons that have nothing to do
>>>> with link-time or load-time relocations.
>>>>
>>>
>>> There is:
>>>
>>> jmp.d32 foo
>>>
>>
>> How far back does that syntax work?
>>
>
> .d32 support was added by
>
> commit f8a5c266971d7b5b96f973805551c6e88669cada
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Thu Oct 14 13:31:13 2010 +0000
>
> Add .d32 encoding suffix.
>
> and .d8 supported was added by
>
> commit a501d77eeba717f6d54dce44f286f9e3aad83144
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Fri Jan 20 20:53:50 2012 +0000
>
> Add .d8 suffix support to x86 assembler
>
OK, that is probably too recent. The simplest answer I think is just to
.balign 16 each vector. This is init space... some extra padding really
doesn't matter.
Patch attached (still in compile test).
-hpa
[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 2264 bytes --]
diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h
index 5a9856e..f11621f 100644
--- a/arch/x86/include/asm/segment.h
+++ b/arch/x86/include/asm/segment.h
@@ -233,7 +233,7 @@
#ifdef __KERNEL__
#ifndef __ASSEMBLY__
-extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][2+2+5];
+extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][16];
#ifdef CONFIG_TRACING
# define trace_early_idt_handlers early_idt_handlers
#endif
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index 02d2572..1c18826 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -524,6 +524,7 @@ setup_once:
andl $0,setup_once_ref /* Once is enough, thanks */
ret
+ .balign 16
ENTRY(early_idt_handlers)
# 36(%esp) %eflags
# 32(%esp) %cs
@@ -531,9 +532,8 @@ ENTRY(early_idt_handlers)
# 24(%rsp) error code
i = 0
.rept NUM_EXCEPTION_VECTORS
- .if (EXCEPTION_ERRCODE_MASK >> i) & 1
- ASM_NOP2
- .else
+ .balign 16
+ .if ((EXCEPTION_ERRCODE_MASK >> i) & 1) == 0
pushl $0 # Dummy error code, to make stack frame uniform
.endif
pushl $i # 20(%esp) Vector number
@@ -542,8 +542,7 @@ ENTRY(early_idt_handlers)
.endr
ENDPROC(early_idt_handlers)
- /* This is global to keep gas from relaxing the jumps */
-ENTRY(early_idt_handler)
+early_idt_handler:
cld
cmpl $2,(%esp) # X86_TRAP_NMI
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 43eafc8..2d80a09 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -321,7 +321,8 @@ bad_address:
jmp bad_address
__INIT
- .globl early_idt_handlers
+ .balign 16
+ENTRY(early_idt_handlers)
early_idt_handlers:
# 104(%rsp) %rflags
# 96(%rsp) %cs
@@ -329,18 +330,17 @@ early_idt_handlers:
# 80(%rsp) error code
i = 0
.rept NUM_EXCEPTION_VECTORS
- .if (EXCEPTION_ERRCODE_MASK >> i) & 1
- ASM_NOP2
- .else
+ .balign 16
+ .if ((EXCEPTION_ERRCODE_MASK >> i) & 1) == 0
pushq $0 # Dummy error code, to make stack frame uniform
.endif
pushq $i # 72(%rsp) Vector number
jmp early_idt_handler
i = i + 1
.endr
+ENDPROC(early_idt_handlers)
-/* This is global to keep gas from relaxing the jumps */
-ENTRY(early_idt_handler)
+early_idt_handler:
cld
cmpl $2,(%rsp) # X86_TRAP_NMI
next prev parent reply other threads:[~2015-05-18 20:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-07 6:02 Avoiding unnecessary jump relocations in gas? Andy Lutomirski
2015-05-07 11:52 ` Jan Beulich
2015-05-07 16:21 ` H.J. Lu
2015-05-08 3:22 ` Andy Lutomirski
2015-05-08 12:09 ` H.J. Lu
2015-05-08 20:16 ` H.J. Lu
2015-05-18 19:36 ` Andy Lutomirski
2015-05-18 20:01 ` H. Peter Anvin
2015-05-18 20:11 ` Borislav Petkov
2015-05-18 20:02 ` H.J. Lu
2015-05-18 20:06 ` H. Peter Anvin
2015-05-18 20:25 ` H.J. Lu
2015-05-18 20:28 ` H. Peter Anvin [this message]
2015-05-18 20:34 ` H. Peter Anvin
2015-05-20 20:53 ` Andy Lutomirski
2015-05-20 20:59 ` H. Peter Anvin
2015-05-20 21:47 ` Andy Lutomirski
2015-05-20 21:58 ` H. Peter Anvin
2015-05-20 22:08 ` H. Peter Anvin
2015-05-20 22:17 ` Andy Lutomirski
2015-05-20 22:21 ` H. Peter Anvin
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=555A4B67.4080201@zytor.com \
--to=hpa@zytor.com \
--cc=JBeulich@suse.com \
--cc=binutils@sourceware.org \
--cc=bp@alien8.de \
--cc=hjl.tools@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
/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.