Message ID | 1418321065-10212-5-git-send-email-jgross@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 11/12/14 18:04, Juergen Gross wrote: > Instead of manually list each hypercall in arch/x86/xen/xen-head.S > use the auto generated symbol list. > > This also corrects the wrong address of xen_hypercall_mca which was > located 32 bytes higher than it should. > > Symbol addresses have been verified to match the correct ones via > objdump output. [...] > + > +#define HYPERCALL(n) \ > + .equ xen_hypercall_##n, hypercall_page + __HYPERVISOR_##n * 32; \ > + .type xen_hypercall_##n, function; .size xen_hypercall_##n, 32 > +#include <asm/xen-hypercalls.h> > +#undef HYPERCALL The gas manual[1] suggests the syntax you've used for .type is invalid and suggest using .type <name>, STT_FUNC > + > .balign PAGE_SIZE You can remove this .balign. David [1] https://sourceware.org/binutils/docs/as/Type.html#Type -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 12/15/2014 01:05 PM, David Vrabel wrote: > On 11/12/14 18:04, Juergen Gross wrote: >> Instead of manually list each hypercall in arch/x86/xen/xen-head.S >> use the auto generated symbol list. >> >> This also corrects the wrong address of xen_hypercall_mca which was >> located 32 bytes higher than it should. >> >> Symbol addresses have been verified to match the correct ones via >> objdump output. > [...] >> + >> +#define HYPERCALL(n) \ >> + .equ xen_hypercall_##n, hypercall_page + __HYPERVISOR_##n * 32; \ >> + .type xen_hypercall_##n, function; .size xen_hypercall_##n, 32 >> +#include <asm/xen-hypercalls.h> >> +#undef HYPERCALL > > The gas manual[1] suggests the syntax you've used for .type is invalid > and suggest using .type <name>, STT_FUNC Really? In the link below I see: The types supported are: STT_FUNC function Mark the symbol as being a function name. ... So "function" seems to be okay. > >> + >> .balign PAGE_SIZE > > You can remove this .balign. Indeed. Juergen -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 16/12/14 05:55, Juergen Gross wrote: > On 12/15/2014 01:05 PM, David Vrabel wrote: >> On 11/12/14 18:04, Juergen Gross wrote: >>> Instead of manually list each hypercall in arch/x86/xen/xen-head.S >>> use the auto generated symbol list. >>> >>> This also corrects the wrong address of xen_hypercall_mca which was >>> located 32 bytes higher than it should. >>> >>> Symbol addresses have been verified to match the correct ones via >>> objdump output. >> [...] >>> + >>> +#define HYPERCALL(n) \ >>> + .equ xen_hypercall_##n, hypercall_page + __HYPERVISOR_##n * 32; \ >>> + .type xen_hypercall_##n, function; .size xen_hypercall_##n, 32 >>> +#include <asm/xen-hypercalls.h> >>> +#undef HYPERCALL >> >> The gas manual[1] suggests the syntax you've used for .type is invalid >> and suggest using .type <name>, STT_FUNC > > Really? In the link below I see: > > The types supported are: > > STT_FUNC > function > Mark the symbol as being a function name. > ... > > So "function" seems to be okay. From the manual The syntaxes supported are: .type <name> STT_<TYPE_IN_UPPER_CASE> .type <name>,#<type> .type <name>,@<type> .type <name>,%<type> .type <name>,"<type>" And The first variant will be accepted by the GNU assembler on all architectures... David -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 12/16/2014 11:24 AM, David Vrabel wrote: > On 16/12/14 05:55, Juergen Gross wrote: >> On 12/15/2014 01:05 PM, David Vrabel wrote: >>> On 11/12/14 18:04, Juergen Gross wrote: >>>> Instead of manually list each hypercall in arch/x86/xen/xen-head.S >>>> use the auto generated symbol list. >>>> >>>> This also corrects the wrong address of xen_hypercall_mca which was >>>> located 32 bytes higher than it should. >>>> >>>> Symbol addresses have been verified to match the correct ones via >>>> objdump output. >>> [...] >>>> + >>>> +#define HYPERCALL(n) \ >>>> + .equ xen_hypercall_##n, hypercall_page + __HYPERVISOR_##n * 32; \ >>>> + .type xen_hypercall_##n, function; .size xen_hypercall_##n, 32 >>>> +#include <asm/xen-hypercalls.h> >>>> +#undef HYPERCALL >>> >>> The gas manual[1] suggests the syntax you've used for .type is invalid >>> and suggest using .type <name>, STT_FUNC >> >> Really? In the link below I see: >> >> The types supported are: >> >> STT_FUNC >> function >> Mark the symbol as being a function name. >> ... >> >> So "function" seems to be okay. > >>From the manual > > The syntaxes supported are: > > .type <name> STT_<TYPE_IN_UPPER_CASE> > .type <name>,#<type> > .type <name>,@<type> > .type <name>,%<type> > .type <name>,"<type>" > > And > > The first variant will be accepted by the GNU assembler on all > architectures... grepping through the x86 assembler sources .type <name>,@function seems to be the preferred syntax (100%). I think I'll switch to that. Juergen -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S index 674b2225..b2ba341 100644 --- a/arch/x86/xen/xen-head.S +++ b/arch/x86/xen/xen-head.S @@ -12,6 +12,8 @@ #include <xen/interface/elfnote.h> #include <xen/interface/features.h> +#include <xen/interface/xen.h> +#include <xen/interface/xen-mca.h> #include <asm/xen/interface.h> #ifdef CONFIG_XEN_PVH @@ -85,58 +87,14 @@ ENTRY(xen_pvh_early_cpu_init) .pushsection .text .balign PAGE_SIZE ENTRY(hypercall_page) -#define NEXT_HYPERCALL(x) \ - ENTRY(xen_hypercall_##x) \ - .skip 32 - -NEXT_HYPERCALL(set_trap_table) -NEXT_HYPERCALL(mmu_update) -NEXT_HYPERCALL(set_gdt) -NEXT_HYPERCALL(stack_switch) -NEXT_HYPERCALL(set_callbacks) -NEXT_HYPERCALL(fpu_taskswitch) -NEXT_HYPERCALL(sched_op_compat) -NEXT_HYPERCALL(platform_op) -NEXT_HYPERCALL(set_debugreg) -NEXT_HYPERCALL(get_debugreg) -NEXT_HYPERCALL(update_descriptor) -NEXT_HYPERCALL(ni) -NEXT_HYPERCALL(memory_op) -NEXT_HYPERCALL(multicall) -NEXT_HYPERCALL(update_va_mapping) -NEXT_HYPERCALL(set_timer_op) -NEXT_HYPERCALL(event_channel_op_compat) -NEXT_HYPERCALL(xen_version) -NEXT_HYPERCALL(console_io) -NEXT_HYPERCALL(physdev_op_compat) -NEXT_HYPERCALL(grant_table_op) -NEXT_HYPERCALL(vm_assist) -NEXT_HYPERCALL(update_va_mapping_otherdomain) -NEXT_HYPERCALL(iret) -NEXT_HYPERCALL(vcpu_op) -NEXT_HYPERCALL(set_segment_base) -NEXT_HYPERCALL(mmuext_op) -NEXT_HYPERCALL(xsm_op) -NEXT_HYPERCALL(nmi_op) -NEXT_HYPERCALL(sched_op) -NEXT_HYPERCALL(callback_op) -NEXT_HYPERCALL(xenoprof_op) -NEXT_HYPERCALL(event_channel_op) -NEXT_HYPERCALL(physdev_op) -NEXT_HYPERCALL(hvm_op) -NEXT_HYPERCALL(sysctl) -NEXT_HYPERCALL(domctl) -NEXT_HYPERCALL(kexec_op) -NEXT_HYPERCALL(tmem_op) /* 38 */ -ENTRY(xen_hypercall_rsvr) - .skip 320 -NEXT_HYPERCALL(mca) /* 48 */ -NEXT_HYPERCALL(arch_1) -NEXT_HYPERCALL(arch_2) -NEXT_HYPERCALL(arch_3) -NEXT_HYPERCALL(arch_4) -NEXT_HYPERCALL(arch_5) -NEXT_HYPERCALL(arch_6) + .skip PAGE_SIZE + +#define HYPERCALL(n) \ + .equ xen_hypercall_##n, hypercall_page + __HYPERVISOR_##n * 32; \ + .type xen_hypercall_##n, function; .size xen_hypercall_##n, 32 +#include <asm/xen-hypercalls.h> +#undef HYPERCALL + .balign PAGE_SIZE .popsection
Instead of manually list each hypercall in arch/x86/xen/xen-head.S use the auto generated symbol list. This also corrects the wrong address of xen_hypercall_mca which was located 32 bytes higher than it should. Symbol addresses have been verified to match the correct ones via objdump output. Based-on-patch-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Juergen Gross <jgross@suse.com> --- arch/x86/xen/xen-head.S | 62 ++++++++----------------------------------------- 1 file changed, 10 insertions(+), 52 deletions(-)