According to gcc-4.7, "void bla(void)" is incompatible with "asmlinkage void bla(void)". As asmlinkage expands to __attribute__((regparm(0))), it is correct. The patch adds the missing asmlinkage to function declarations affected. It is needed for 4.1 and 4.2. Signed-off-by: Bastian Blank <waldi@debian.org> --- Origin: debian Forwarded: no Last-Update: 2012-06-15 --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/arch/x86/i8259.c +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/arch/x86/i8259.c @@ -62,7 +62,7 @@ IRQ(x,8), IRQ(x,9), IRQ(x,a), IRQ(x,b), \ IRQ(x,c), IRQ(x,d), IRQ(x,e), IRQ(x,f) - static void (*interrupt[])(void) = { + static void (*asmlinkage interrupt[])(void) = { IRQLIST_16(0x0), IRQLIST_16(0x1), IRQLIST_16(0x2), IRQLIST_16(0x3), IRQLIST_16(0x4), IRQLIST_16(0x5), IRQLIST_16(0x6), IRQLIST_16(0x7), IRQLIST_16(0x8), IRQLIST_16(0x9), IRQLIST_16(0xa), IRQLIST_16(0xb), --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/include/asm-x86/hvm/svm/intr.h +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/include/asm-x86/hvm/svm/intr.h @@ -21,6 +21,8 @@ #ifndef __ASM_X86_HVM_SVM_INTR_H__ #define __ASM_X86_HVM_SVM_INTR_H__ -void svm_intr_assist(void); +#include <asm/config.h> + +asmlinkage void svm_intr_assist(void); #endif /* __ASM_X86_HVM_SVM_INTR_H__ */ --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/include/asm-x86/hvm/vmx/vmx.h +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/include/asm-x86/hvm/vmx/vmx.h @@ -63,7 +63,7 @@ void vmx_asm_vmexit_handler(struct cpu_user_regs); void vmx_asm_do_vmentry(void); -void vmx_intr_assist(void); +asmlinkage void vmx_intr_assist(void); void vmx_do_resume(struct vcpu *); void vmx_vlapic_msr_changed(struct vcpu *v); void vmx_realmode(struct cpu_user_regs *regs); -- There is a multi-legged creature crawling on your shoulder. -- Spock, "A Taste of Armageddon", stardate 3193.9
>>> On 19.06.12 at 21:12, Bastian Blank <waldi@debian.org> wrote: > According to gcc-4.7, "void bla(void)" is incompatible with "asmlinkage > void bla(void)". As asmlinkage expands to __attribute__((regparm(0))), > it is correct. > > The patch adds the missing asmlinkage to function declarations affected. > It is needed for 4.1 and 4.2.Iirc Keir had already taken steps towards removing all the (pointless) asmlinkage annotations, so if there are any left I think we''d rather see them removed than made consistent. Additionally I doubt there is such a problem in current -unstable, as the result of Keir''s work was to have asmlinkage defined to nothing on x86 (so I can''t see how gcc would be able to diagnose any inconsistencies). Is Debian (and 4.1) perhaps rather in need of some backport? Jan> Signed-off-by: Bastian Blank <waldi@debian.org> > > --- > Origin: debian > Forwarded: no > Last-Update: 2012-06-15 > > --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/arch/x86/i8259.c > +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/arch/x86/i8259.c > @@ -62,7 +62,7 @@ > IRQ(x,8), IRQ(x,9), IRQ(x,a), IRQ(x,b), \ > IRQ(x,c), IRQ(x,d), IRQ(x,e), IRQ(x,f) > > - static void (*interrupt[])(void) = { > + static void (*asmlinkage interrupt[])(void) = { > IRQLIST_16(0x0), IRQLIST_16(0x1), IRQLIST_16(0x2), IRQLIST_16(0x3), > IRQLIST_16(0x4), IRQLIST_16(0x5), IRQLIST_16(0x6), IRQLIST_16(0x7), > IRQLIST_16(0x8), IRQLIST_16(0x9), IRQLIST_16(0xa), IRQLIST_16(0xb), > --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/include/asm-x86/hvm/svm/intr.h > +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/include/asm-x86/hvm/svm/intr.h > @@ -21,6 +21,8 @@ > #ifndef __ASM_X86_HVM_SVM_INTR_H__ > #define __ASM_X86_HVM_SVM_INTR_H__ > > -void svm_intr_assist(void); > +#include <asm/config.h> > + > +asmlinkage void svm_intr_assist(void);Furthermore, this ...> #endif /* __ASM_X86_HVM_SVM_INTR_H__ */ > --- xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2.orig/xen/include/asm-x86/hvm/vmx/vmx.h > +++ xen-4.1.3~rc1+hg-20120614.a9c0a89c08f2/xen/include/asm-x86/hvm/vmx/vmx.h > @@ -63,7 +63,7 @@ > > void vmx_asm_vmexit_handler(struct cpu_user_regs); > void vmx_asm_do_vmentry(void); > -void vmx_intr_assist(void); > +asmlinkage void vmx_intr_assist(void);... and this declaration could be dropped altogether (as having call sites in assembly files only). Jan> void vmx_do_resume(struct vcpu *); > void vmx_vlapic_msr_changed(struct vcpu *v); > void vmx_realmode(struct cpu_user_regs *regs); > -- > There is a multi-legged creature crawling on your shoulder. > -- Spock, "A Taste of Armageddon", stardate 3193.9 > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
On Wed, Jun 20, 2012 at 08:59:55AM +0100, Jan Beulich wrote:> Iirc Keir had already taken steps towards removing all the > (pointless) asmlinkage annotations, so if there are any left I > think we''d rather see them removed than made consistent.I see a lot of them and always not on both declaration and definition. | xen/arch/arm/traps.c:asmlinkage void __div0(void) | xen/arch/arm/traps.c:asmlinkage void do_trap_undefined_instruction(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_supervisor_call(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_prefetch_abort(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_data_abort(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_hypervisor(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_irq(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void do_trap_fiq(struct cpu_user_regs *regs) | xen/arch/arm/traps.c:asmlinkage void leave_hypervisor_tail(void) | xen/common/softirq.c:asmlinkage void do_softirq(void) | xen/include/acpi/acpixf.h:acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state); | xen/include/acpi/acpixf.h:acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void); | xen/include/xen/softirq.h:asmlinkage void do_softirq(void); It is not longer problematic because asmlinkage is always defined empty, but it is still there. Bastian -- We have found all life forms in the galaxy are capable of superior development. -- Kirk, "The Gamesters of Triskelion", stardate 3211.7
On Tue, 19 Jun 2012, Bastian Blank wrote:> According to gcc-4.7, "void bla(void)" is incompatible with "asmlinkage > void bla(void)". As asmlinkage expands to __attribute__((regparm(0))), > it is correct. > > The patch adds the missing asmlinkage to function declarations affected. > It is needed for 4.1 and 4.2. > > Signed-off-by: Bastian Blank <waldi@debian.org>This is only relevant for 4.1 . In 4.2 asmlinkage got flattened to a no-op in changeset 24511 http://xenbits.xen.org/hg/staging/xen-unstable.hg/rev/a141f6d64916 . It would be a good idea to get this problem fixed for 4.1.3 but backporting the change from 4.2 might be a better idea. Michael Young
On 20/06/2012 09:12, "Bastian Blank" <waldi@debian.org> wrote:> On Wed, Jun 20, 2012 at 08:59:55AM +0100, Jan Beulich wrote: >> Iirc Keir had already taken steps towards removing all the >> (pointless) asmlinkage annotations, so if there are any left I >> think we''d rather see them removed than made consistent. > > I see a lot of them and always not on both declaration and definition.Most of the below are in arch/arm, no relevance to x86. The few others are acceptable, only acpi_enter_sleep_state() has a ''non-matching'' definition in arch/x86, but of course x86 asmlinkage is a no-op so it''s fine. I have backported my xen-unstable patch to 4.0 and 4.1, so you should find those trees build okay now. -- Keir> | xen/arch/arm/traps.c:asmlinkage void __div0(void) > | xen/arch/arm/traps.c:asmlinkage void do_trap_undefined_instruction(struct > cpu_user_regs *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_supervisor_call(struct > cpu_user_regs *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_prefetch_abort(struct > cpu_user_regs *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_data_abort(struct cpu_user_regs > *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_hypervisor(struct cpu_user_regs > *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_irq(struct cpu_user_regs *regs) > | xen/arch/arm/traps.c:asmlinkage void do_trap_fiq(struct cpu_user_regs *regs) > | xen/arch/arm/traps.c:asmlinkage void leave_hypervisor_tail(void) > | xen/common/softirq.c:asmlinkage void do_softirq(void) > | xen/include/acpi/acpixf.h:acpi_status asmlinkage acpi_enter_sleep_state(u8 > sleep_state); > | xen/include/acpi/acpixf.h:acpi_status asmlinkage > acpi_enter_sleep_state_s4bios(void); > | xen/include/xen/softirq.h:asmlinkage void do_softirq(void); > > It is not longer problematic because asmlinkage is always defined > empty, but it is still there. > > Bastian
On 20/06/2012 09:28, "M A Young" <m.a.young@durham.ac.uk> wrote:> On Tue, 19 Jun 2012, Bastian Blank wrote: > >> According to gcc-4.7, "void bla(void)" is incompatible with "asmlinkage >> void bla(void)". As asmlinkage expands to __attribute__((regparm(0))), >> it is correct. >> >> The patch adds the missing asmlinkage to function declarations affected. >> It is needed for 4.1 and 4.2. >> >> Signed-off-by: Bastian Blank <waldi@debian.org> > > This is only relevant for 4.1 . In 4.2 asmlinkage got flattened to a no-op > in changeset 24511 > http://xenbits.xen.org/hg/staging/xen-unstable.hg/rev/a141f6d64916 . It > would be a good idea to get this problem fixed for 4.1.3 but backporting > the change from 4.2 might be a better idea.Done, and for forthcoming 4.0.4-rc3 too.> Michael Young > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel