x86/asm: Annotate local pseudo-functions
authorJiri Slaby <jslaby@suse.cz>
Fri, 11 Oct 2019 11:50:45 +0000 (13:50 +0200)
committerBorislav Petkov <bp@suse.de>
Fri, 18 Oct 2019 08:04:04 +0000 (10:04 +0200)
Use the newly added SYM_CODE_START_LOCAL* to annotate beginnings of
all pseudo-functions (those ending with END until now) which do not
have ".globl" annotation. This is needed to balance END for tools that
generate debuginfo. Note that ENDs are switched to SYM_CODE_END too so
that everybody can see the pairing.

C-like functions (which handle frame ptr etc.) are not annotated here,
hence SYM_CODE_* macros are used here, not SYM_FUNC_*. Note that the
32bit version of early_idt_handler_common already had ENDPROC -- switch
that to SYM_CODE_END for the same reason as above (and to be the same as
64bit).

While early_idt_handler_common is LOCAL, it's name is not prepended with
".L" as it happens to appear in call traces.

bad_get_user*, and bad_put_user are now aligned, as they are separate
functions. They do not mind to be aligned -- no need to be compact
there.

early_idt_handler_common is aligned now too, as it is after
early_idt_handler_array, so as well no need to be compact there.

verify_cpu is self-standing and included in other .S files, so align it
too.

The others have alignment preserved to what it used to be (using the
_NOALIGN variant of macros).

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Alexios Zavras <alexios.zavras@intel.com>
Cc: Allison Randal <allison@lohutok.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Cao jin <caoj.fnst@cn.fujitsu.com>
Cc: Enrico Weigelt <info@metux.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: linux-arch@vger.kernel.org
Cc: Maran Wilson <maran.wilson@oracle.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: x86-ml <x86@kernel.org>
Link: https://lkml.kernel.org/r/20191011115108.12392-6-jslaby@suse.cz
arch/x86/entry/entry_64.S
arch/x86/kernel/head_32.S
arch/x86/kernel/head_64.S
arch/x86/kernel/verify_cpu.S
arch/x86/lib/getuser.S
arch/x86/lib/putuser.S

index 86cbb22208c893b5b39d15f270ef54965fb49b5c..db43526cecfaff6e87d933157f4c1c93ca4f5a73 100644 (file)
@@ -1061,7 +1061,7 @@ EXPORT_SYMBOL(native_load_gs_index)
        _ASM_EXTABLE(.Lgs_change, .Lbad_gs)
        .section .fixup, "ax"
        /* running with kernelgs */
-.Lbad_gs:
+SYM_CODE_START_LOCAL_NOALIGN(.Lbad_gs)
        SWAPGS                                  /* switch back to user gs */
 .macro ZAP_GS
        /* This can't be a string because the preprocessor needs to see it. */
@@ -1072,6 +1072,7 @@ EXPORT_SYMBOL(native_load_gs_index)
        xorl    %eax, %eax
        movl    %eax, %gs
        jmp     2b
+SYM_CODE_END(.Lbad_gs)
        .previous
 
 /* Call softirq on interrupt stack. Interrupts are off. */
index 7feb953e10d23127e84ae439c3663ff14da2e029..aec1fdb80221c242aeb35bb0192bbb42a31edf96 100644 (file)
@@ -409,7 +409,7 @@ ENTRY(early_idt_handler_array)
        .endr
 ENDPROC(early_idt_handler_array)
        
-early_idt_handler_common:
+SYM_CODE_START_LOCAL(early_idt_handler_common)
        /*
         * The stack is the hardware frame, an error code or zero, and the
         * vector number.
@@ -460,7 +460,7 @@ early_idt_handler_common:
        decl    %ss:early_recursion_flag
        addl    $4, %esp        /* pop pt_regs->orig_ax */
        iret
-ENDPROC(early_idt_handler_common)
+SYM_CODE_END(early_idt_handler_common)
 
 /* This is the default interrupt "handler" :-) */
 ENTRY(early_ignore_irq)
index f00d7c0c1c86bd16e5b1c568314dbf21a5ab73be..5b42552d929f1942a248441e861fb4619b7318c6 100644 (file)
@@ -291,7 +291,7 @@ ENTRY(early_idt_handler_array)
        UNWIND_HINT_IRET_REGS offset=16
 END(early_idt_handler_array)
 
-early_idt_handler_common:
+SYM_CODE_START_LOCAL(early_idt_handler_common)
        /*
         * The stack is the hardware frame, an error code or zero, and the
         * vector number.
@@ -333,7 +333,7 @@ early_idt_handler_common:
 20:
        decl early_recursion_flag(%rip)
        jmp restore_regs_and_return_to_kernel
-END(early_idt_handler_common)
+SYM_CODE_END(early_idt_handler_common)
 
 #define NEXT_PAGE(name) \
        .balign PAGE_SIZE; \
index a024c4f7ba56105d0693189740ce536b2bf6c70f..641f0fe1e5b4abbc612967c1028c9421e0966294 100644 (file)
@@ -31,7 +31,7 @@
 #include <asm/cpufeatures.h>
 #include <asm/msr-index.h>
 
-ENTRY(verify_cpu)
+SYM_FUNC_START_LOCAL(verify_cpu)
        pushf                           # Save caller passed flags
        push    $0                      # Kill any dangerous flags
        popf
@@ -137,4 +137,4 @@ ENTRY(verify_cpu)
        popf                            # Restore caller passed flags
        xorl %eax, %eax
        ret
-ENDPROC(verify_cpu)
+SYM_FUNC_END(verify_cpu)
index 9578eb88fc878ce265defa0eb89d8ca318c1248a..f9f59eb85635078d6b715feb4b8a46f7604ebbcb 100644 (file)
@@ -115,21 +115,23 @@ ENDPROC(__get_user_8)
 EXPORT_SYMBOL(__get_user_8)
 
 
-.Lbad_get_user_clac:
+SYM_CODE_START_LOCAL(.Lbad_get_user_clac)
        ASM_CLAC
 bad_get_user:
        xor %edx,%edx
        mov $(-EFAULT),%_ASM_AX
        ret
+SYM_CODE_END(.Lbad_get_user_clac)
 
 #ifdef CONFIG_X86_32
-.Lbad_get_user_8_clac:
+SYM_CODE_START_LOCAL(.Lbad_get_user_8_clac)
        ASM_CLAC
 bad_get_user_8:
        xor %edx,%edx
        xor %ecx,%ecx
        mov $(-EFAULT),%_ASM_AX
        ret
+SYM_CODE_END(.Lbad_get_user_8_clac)
 #endif
 
        _ASM_EXTABLE_UA(1b, .Lbad_get_user_clac)
index 126dd6a9ec9b54c69e7ab2e25ee6ecae2151ee34..a9391d772c8112a44575a61d50b9f43f2d46e3c0 100644 (file)
@@ -91,11 +91,12 @@ ENTRY(__put_user_8)
 ENDPROC(__put_user_8)
 EXPORT_SYMBOL(__put_user_8)
 
-.Lbad_put_user_clac:
+SYM_CODE_START_LOCAL(.Lbad_put_user_clac)
        ASM_CLAC
 .Lbad_put_user:
        movl $-EFAULT,%eax
        RET
+SYM_CODE_END(.Lbad_put_user_clac)
 
        _ASM_EXTABLE_UA(1b, .Lbad_put_user_clac)
        _ASM_EXTABLE_UA(2b, .Lbad_put_user_clac)