@@ -53,6 +53,11 @@
#define GLOBAL(name) \
.globl name; \
name:
+#define END(name) \
+ .size name, . - name
+#define ENDPROC(name) \
+ .type name, @function; \
+ END(name)
#endif
#define NR_hypercalls 64
@@ -27,6 +27,7 @@ ENTRY(entry_int82)
mov %rsp, %rdi
call do_entry_int82
+ENDPROC(entry_int82)
/* %rbx: struct vcpu */
ENTRY(compat_test_all_events)
@@ -116,6 +117,7 @@ compat_process_trap:
leaq VCPU_trap_bounce(%rbx),%rdx
call compat_create_bounce_frame
jmp compat_test_all_events
+ENDPROC(compat_test_all_events)
/* %rbx: struct vcpu, interrupts disabled */
ENTRY(compat_restore_all_guest)
@@ -161,6 +163,7 @@ ENTRY(compat_restore_all_guest)
RESTORE_ALL adj=8 compat=1
.Lft0: iretq
_ASM_PRE_EXTABLE(.Lft0, handle_exception)
+ENDPROC(compat_restore_all_guest)
/* This mustn't modify registers other than %rax. */
ENTRY(cr4_pv32_restore)
@@ -193,6 +196,7 @@ ENTRY(cr4_pv32_restore)
pop %rdx
xor %eax, %eax
ret
+ENDPROC(cr4_pv32_restore)
ENTRY(compat_syscall)
/* Fix up reported %cs/%ss for compat domains. */
@@ -222,6 +226,7 @@ UNLIKELY_END(compat_syscall_gpf)
movw %si,TRAPBOUNCE_cs(%rdx)
movb %cl,TRAPBOUNCE_flags(%rdx)
jmp .Lcompat_bounce_exception
+ENDPROC(compat_syscall)
ENTRY(compat_sysenter)
CR4_PV32_RESTORE
@@ -236,11 +241,13 @@ ENTRY(compat_sysenter)
movw %ax,TRAPBOUNCE_cs(%rdx)
call compat_create_bounce_frame
jmp compat_test_all_events
+ENDPROC(compat_sysenter)
ENTRY(compat_int80_direct_trap)
CR4_PV32_RESTORE
call compat_create_bounce_frame
jmp compat_test_all_events
+ENDPROC(compat_int80_direct_trap)
/* CREATE A BASIC EXCEPTION FRAME ON GUEST OS (RING-1) STACK: */
/* {[ERRCODE,] EIP, CS, EFLAGS, [ESP, SS]} */
@@ -352,3 +359,4 @@ compat_crash_page_fault:
jmp .Lft14
.previous
_ASM_EXTABLE(.Lft14, .Lfx14)
+ENDPROC(compat_create_bounce_frame)
@@ -139,6 +139,7 @@ process_trap:
leaq VCPU_trap_bounce(%rbx), %rdx
call create_bounce_frame
jmp test_all_events
+ENDPROC(switch_to_kernel)
.section .text.entry, "ax", @progbits
@@ -230,6 +231,7 @@ iret_exit_to_guest:
addq $8,%rsp
.Lft0: iretq
_ASM_PRE_EXTABLE(.Lft0, handle_exception)
+ENDPROC(restore_all_guest)
/*
* When entering SYSCALL from kernel mode:
@@ -281,6 +283,7 @@ ENTRY(lstar_enter)
mov %rsp, %rdi
call pv_hypercall
jmp test_all_events
+ENDPROC(lstar_enter)
/* See lstar_enter for entry register state. */
ENTRY(cstar_enter)
@@ -320,6 +323,7 @@ ENTRY(cstar_enter)
jne compat_syscall
#endif
jmp switch_to_kernel
+ENDPROC(cstar_enter)
ENTRY(sysenter_entry)
ENDBR64
@@ -384,6 +388,7 @@ UNLIKELY_END(sysenter_gpf)
jne compat_sysenter
#endif
jmp .Lbounce_exception
+ENDPROC(sysenter_entry)
ENTRY(int80_direct_trap)
ENDBR64
@@ -473,6 +478,7 @@ int80_slow_path:
*/
GET_STACK_END(14)
jmp handle_exception_saved
+ENDPROC(int80_direct_trap)
/* create_bounce_frame & helpers don't need to be in .text.entry */
.text
@@ -617,6 +623,7 @@ ENTRY(dom_crash_sync_extable)
xorl %edi,%edi
jmp asm_domain_crash_synchronous /* Does not return */
.popsection
+ENDPROC(create_bounce_frame)
#endif /* CONFIG_PV */
/* --- CODE BELOW THIS LINE (MOSTLY) NOT GUEST RELATED --- */
@@ -640,10 +647,12 @@ ret_from_intr:
#else
jmp test_all_events
#endif
+ENDPROC(continue_pv_domain)
#else
ret_from_intr:
ASSERT_CONTEXT_IS_XEN
jmp restore_all_xen
+ENDPROC(ret_from_intr)
#endif
.section .text.entry, "ax", @progbits
@@ -667,6 +676,7 @@ UNLIKELY_END(exit_cr3)
RESTORE_ALL adj=8
iretq
+ENDPROC(restore_all_xen)
ENTRY(common_interrupt)
ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
@@ -697,10 +707,12 @@ ENTRY(common_interrupt)
mov %r15, STACK_CPUINFO_FIELD(xen_cr3)(%r14)
mov %bl, STACK_CPUINFO_FIELD(use_pv_cr3)(%r14)
jmp ret_from_intr
+ENDPROC(common_interrupt)
ENTRY(page_fault)
ENDBR64
movl $TRAP_page_fault,4(%rsp)
+ENDPROC(page_fault)
/* No special register assumptions. */
GLOBAL(handle_exception)
ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
@@ -872,12 +884,14 @@ FATAL_exception_with_ints_disabled:
movq %rsp,%rdi
call fatal_trap
BUG /* fatal_trap() shouldn't return. */
+ENDPROC(handle_exception)
ENTRY(divide_error)
ENDBR64
pushq $0
movl $TRAP_divide_error,4(%rsp)
jmp handle_exception
+ENDPROC(divide_error)
ENTRY(coprocessor_error)
ENDBR64
@@ -890,72 +904,85 @@ ENTRY(simd_coprocessor_error)
pushq $0
movl $TRAP_simd_error,4(%rsp)
jmp handle_exception
+ENDPROC(coprocessor_error)
ENTRY(device_not_available)
ENDBR64
pushq $0
movl $TRAP_no_device,4(%rsp)
jmp handle_exception
+ENDPROC(device_not_available)
ENTRY(debug)
ENDBR64
pushq $0
movl $TRAP_debug,4(%rsp)
jmp handle_ist_exception
+ENDPROC(debug)
ENTRY(int3)
ENDBR64
pushq $0
movl $TRAP_int3,4(%rsp)
jmp handle_exception
+ENDPROC(int3)
ENTRY(overflow)
ENDBR64
pushq $0
movl $TRAP_overflow,4(%rsp)
jmp handle_exception
+ENDPROC(overflow)
ENTRY(bounds)
ENDBR64
pushq $0
movl $TRAP_bounds,4(%rsp)
jmp handle_exception
+ENDPROC(bounds)
ENTRY(invalid_op)
ENDBR64
pushq $0
movl $TRAP_invalid_op,4(%rsp)
jmp handle_exception
+ENDPROC(invalid_op)
ENTRY(invalid_TSS)
ENDBR64
movl $TRAP_invalid_tss,4(%rsp)
jmp handle_exception
+ENDPROC(invalid_TSS)
ENTRY(segment_not_present)
ENDBR64
movl $TRAP_no_segment,4(%rsp)
jmp handle_exception
+ENDPROC(segment_not_present)
ENTRY(stack_segment)
ENDBR64
movl $TRAP_stack_error,4(%rsp)
jmp handle_exception
+ENDPROC(stack_segment)
ENTRY(general_protection)
ENDBR64
movl $TRAP_gp_fault,4(%rsp)
jmp handle_exception
+ENDPROC(general_protection)
ENTRY(alignment_check)
ENDBR64
movl $TRAP_alignment_check,4(%rsp)
jmp handle_exception
+ENDPROC(alignment_check)
ENTRY(entry_CP)
ENDBR64
movl $X86_EXC_CP, 4(%rsp)
jmp handle_exception
+ENDPROC(entry_CP)
ENTRY(double_fault)
ENDBR64
@@ -981,6 +1008,7 @@ ENTRY(double_fault)
movq %rsp,%rdi
call do_double_fault
BUG /* do_double_fault() shouldn't return. */
+ENDPROC(double_fault)
.pushsection .init.text, "ax", @progbits
ENTRY(early_page_fault)
@@ -990,6 +1018,7 @@ ENTRY(early_page_fault)
movq %rsp,%rdi
call do_early_page_fault
jmp restore_all_xen
+ENDPROC(early_page_fault)
.popsection
ENTRY(nmi)
@@ -1120,17 +1149,20 @@ handle_ist_exception:
ASSERT_CONTEXT_IS_XEN
jmp restore_all_xen
#endif
+ENDPROC(nmi)
ENTRY(machine_check)
ENDBR64
pushq $0
movl $TRAP_machine_check,4(%rsp)
jmp handle_ist_exception
+ENDPROC(machine_check)
/* No op trap handler. Required for kexec crash path. */
GLOBAL(trap_nop)
ENDBR64
iretq
+ENDPROC(trap_nop)
/* Table of automatically generated entry points. One per vector. */
.pushsection .init.rodata, "a", @progbits
@@ -1187,6 +1219,7 @@ autogen_stubs: /* Automatically generate
vec = vec + 1
.endr
+ENDPROC(autogen_stubs)
.section .init.rodata, "a", @progbits
- .size autogen_entrypoints, . - autogen_entrypoints
+ END(autogen_entrypoints)
Future gas versions will generate minimalistic Dwarf debug info for items annotated as functions and having their sizes specified [1]. "Borrow" Arm's END() and ENDPROC() to avoid open-coding (and perhaps typo-ing) the respective directives. Signed-off-by: Jan Beulich <jbeulich@suse.com> [1] https://sourceware.org/git?p=binutils-gdb.git;a=commitdiff;h=591cc9fbbfd6d51131c0f1d4a92e7893edcc7a28