From: "Jan Beulich" Subject: Re: [PATCH] linux/x86-64: fix unwind information Date: Thu, 05 Apr 2007 12:29:03 +0100 Message-ID: <4614F99F.76E4.0078.0@novell.com> References: <4613CC4B.76E4.0078.0@novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part88AFD76F.0__=" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part88AFD76F.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Sorry for this, when adjusting our internal patch I let a CFI_SIGNAL_FRAME slip through. Attaching a fixed version. Jan >>> Keir Fraser 05.04.07 13:01 >>> On 4/4/07 15:03, "Jan Beulich" wrote: > Mostly adjusting mis-merges dating back to the 2.6.14 merge. > > Signed-off-by: Jan Beulich I reverted this one as it breaks the build (with gcc 3.3.4 at least). -- Keir /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S: Assembler messages: /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:249: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:810: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:906: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:945: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:10: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1145: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1150: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1154: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1158: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1166: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1193: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1200: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1204: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1208: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1212: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1216: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1230: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1234: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1241: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1247: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1252: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1256: Error: invalid character '_' in mnemonic /local/scratch/xenrt/xenrtbuildF6Kuiu/build/linux-2.6.18-xen/arch/x86_64/ker nel/entry-xen.S:1260: Error: invalid character '_' in mnemonic make[6]: *** [arch/x86_64/kernel/entry-xen.o] Error 1 make[5]: *** [arch/x86_64/kernel] Error 2 --=__Part88AFD76F.0__= Content-Type: text/plain; name="xenlinux-x86_64-syscall-unwind.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="xenlinux-x86_64-syscall-unwind.patch" Subject: fix unwind information Mostly adjusting mis-merges dating back to the 2.6.14 merge. Signed-off-by: Jan Beulich Index: head-2007-03-19/arch/x86_64/kernel/entry-xen.S =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- head-2007-03-19.orig/arch/x86_64/kernel/entry-xen.S 2007-03-26 = 17:16:47.000000000 +0200 +++ head-2007-03-19/arch/x86_64/kernel/entry-xen.S 2007-03-29 = 17:24:29.000000000 +0200 @@ -201,6 +201,19 @@ rff_trace: END(ret_from_fork) =20 /* + * initial frame state for interrupts and exceptions + */ + .macro _frame ref + CFI_STARTPROC simple + CFI_DEF_CFA rsp,SS+8-\ref + /*CFI_REL_OFFSET ss,SS-\ref*/ + CFI_REL_OFFSET rsp,RSP-\ref + /*CFI_REL_OFFSET rflags,EFLAGS-\ref*/ + /*CFI_REL_OFFSET cs,CS-\ref*/ + CFI_REL_OFFSET rip,RIP-\ref + .endm + +/* * System call entry. Upto 6 arguments in registers are supported. * * SYSCALL does not save anything on the stack and does not change the @@ -232,10 +246,7 @@ END(ret_from_fork) */ =09 =20 ENTRY(system_call) - CFI_STARTPROC simple - CFI_DEF_CFA rsp,PDA_STACKOFFSET - CFI_REGISTER rip,rcx - /*CFI_REGISTER rflags,r11*/ + _frame (RIP-0x10) SAVE_ARGS -8,0 movq %rax,ORIG_RAX-ARGOFFSET(%rsp)=20 /* @@ -273,9 +284,7 @@ sysret_check: =09 */ TRACE_IRQS_ON XEN_UNBLOCK_EVENTS(%rsi) =20 - CFI_REGISTER rip,rcx RESTORE_ARGS 0,8,0 - /*CFI_REGISTER rflags,r11*/ HYPERVISOR_IRET VGCF_IN_SYSCALL =20 /* Handle reschedules */ @@ -505,24 +514,16 @@ ENTRY(stub_rt_sigreturn) CFI_ENDPROC END(stub_rt_sigreturn) =20 -/* - * initial frame state for interrupts and exceptions - */ - .macro _frame ref - CFI_STARTPROC simple - CFI_DEF_CFA rsp,SS+8-\ref - /*CFI_REL_OFFSET ss,SS-\ref*/ - CFI_REL_OFFSET rsp,RSP-\ref - /*CFI_REL_OFFSET rflags,EFLAGS-\ref*/ - /*CFI_REL_OFFSET cs,CS-\ref*/ - CFI_REL_OFFSET rip,RIP-\ref - .endm - /* initial frame state for interrupts (and exceptions without error code) = */ -#define INTR_FRAME _frame RIP +#define INTR_FRAME _frame (RIP-0x10); \ + CFI_REL_OFFSET rcx,0; \ + CFI_REL_OFFSET r11,8 + /* initial frame state for exceptions with error code (and interrupts = with vector already pushed) */ -#define XCPT_FRAME _frame ORIG_RAX +#define XCPT_FRAME _frame (RIP-0x18); \ + CFI_REL_OFFSET rcx,0; \ + CFI_REL_OFFSET r11,8 =20 /*=20 * Interrupt exit. @@ -599,8 +600,9 @@ ENTRY(retint_kernel) #endif=09 =20 CFI_ENDPROC -END(common_interrupt) +END(retint_check) =09 +#ifndef CONFIG_XEN /* * APIC interrupts. */ =09 @@ -613,7 +615,6 @@ END(common_interrupt) CFI_ENDPROC .endm =20 -#ifndef CONFIG_XEN ENTRY(thermal_interrupt) apicinterrupt THERMAL_APIC_VECTOR,smp_thermal_interrupt END(thermal_interrupt) @@ -668,12 +669,16 @@ END(spurious_interrupt) .macro zeroentry sym INTR_FRAME movq (%rsp),%rcx + CFI_RESTORE rcx movq 8(%rsp),%r11 + CFI_RESTORE r11 addq $0x10,%rsp /* skip rcx and r11 */ + CFI_ADJUST_CFA_OFFSET -0x10 pushq $0 /* push error code/oldrax */=20 CFI_ADJUST_CFA_OFFSET 8 pushq %rax /* push real oldrax to the rdi slot */=20 CFI_ADJUST_CFA_OFFSET 8 + CFI_REL_OFFSET rax,0 leaq \sym(%rip),%rax jmp error_entry CFI_ENDPROC @@ -682,10 +687,14 @@ END(spurious_interrupt) .macro errorentry sym XCPT_FRAME movq (%rsp),%rcx + CFI_RESTORE rcx movq 8(%rsp),%r11 + CFI_RESTORE r11 addq $0x10,%rsp /* rsp points to the error code */ + CFI_ADJUST_CFA_OFFSET -0x10 pushq %rax CFI_ADJUST_CFA_OFFSET 8 + CFI_REL_OFFSET rax,0 leaq \sym(%rip),%rax jmp error_entry CFI_ENDPROC @@ -799,6 +808,7 @@ paranoid_schedule\trace: */ =09 ENTRY(error_entry) _frame RDI + CFI_REL_OFFSET rax,0 /* rdi slot contains rax, oldrax contains error code */ cld=09 subq $14*8,%rsp @@ -806,6 +816,7 @@ KPROBE_ENTRY(error_entry) movq %rsi,13*8(%rsp) CFI_REL_OFFSET rsi,RSI movq 14*8(%rsp),%rsi /* load rax from rdi slot */ + CFI_REGISTER rax,rsi movq %rdx,12*8(%rsp) CFI_REL_OFFSET rdx,RDX movq %rcx,11*8(%rsp) @@ -839,6 +850,7 @@ KPROBE_ENTRY(error_entry) #endif =20 error_call_handler: movq %rdi, RDI(%rsp) =20 + CFI_REL_OFFSET rdi,RDI movq %rsp,%rdi movq ORIG_RAX(%rsp),%rsi # get error code=20 movq $-1,ORIG_RAX(%rsp) @@ -1186,7 +1197,7 @@ =20 ENTRY(overflow) zeroentry do_overflow -END(debug) +END(overflow) =20 ENTRY(bounds) zeroentry do_bounds --=__Part88AFD76F.0__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=__Part88AFD76F.0__=--