* Re: Fw: Re: 2.6.21-rc5-mm3 [not found] <20070330103958.16b738aa.akpm@linux-foundation.org> @ 2007-03-30 19:31 ` Andi Kleen 2007-03-31 9:11 ` Ingo Molnar ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Andi Kleen @ 2007-03-30 19:31 UTC (permalink / raw) To: Andrew Morton Cc: Jan Beulich, Ingo Molnar, Michal Piotrowski, Andrew Morton, Thomas Gleixner, linux-kernel > > BUG: NMI Watchdog detected LOCKUP on CPU0, eip c014ce9c, registers: I suspect it is just because his console is too slow and then unwinding took too long and it happened to hit the unwinder. You did use a slow console, right? I suppose it just needs a strategic touch_nmi_watchdog. Will add that. > Modules linked in: ide_cd cdrom rtc unix > CPU: 0 > EIP: 0060:[<c014ce9c>] Not tainted VLI > EFLAGS: 00000093 (2.6.21-rc5-mm3 #10) > EIP is at read_pointer+0x49/0x2d8 > eax: c7a8dd04 ebx: 00000000 ecx: 00000000 edx: c043d19c > esi: c043d184 edi: c043d19c ebp: c7a8dbf4 esp: c7a8dbbc > ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068 > Process udevd (pid: 864, ti=c7a8c000 task=c97cd4d0 task.ti=c7a8c000) > Stack: 0000000b c7a8dc70 c7a8dbf4 c014d6d0 c7a8dd04 c043e454 c7a8dbf4 c011fdd1 > c043e404 c043e454 c043d190 0005cd94 c043d184 c7a8dd04 c7a8dd14 c014dd3a > 00000000 00000000 00000000 00000000 c7a8df44 c7a8dd74 c741eefb 00000008 > Call Trace: > [<c014dd3a>] unwind+0x414/0xfa2 > [<c010510d>] dump_trace_unwind+0xb4/0xe5 > [<c014ce4d>] unwind_init_running+0x25/0x2b > [<c01051a1>] dump_trace+0x63/0x1eb > [<c010ad39>] save_stack_trace+0x23/0x42 > [<c01393c9>] update_cpu_base_expires_next+0x56/0x5a > [<c013a475>] hrtimer_interrupt+0x17c/0x1b8 > [<c0115e8e>] smp_apic_timer_interrupt+0x72/0x85 > [<c0104bef>] apic_timer_interrupt+0x33/0x38 > [<c014320c>] lock_release+0x1d2/0x1da > [<c013a7ef>] up_read+0x19/0x2e > [<c011b800>] do_page_fault+0x28f/0x55b > [<c034d191>] error_code+0x79/0x80 > [<c020c23e>] __put_user_4+0x12/0x18 > DWARF2 unwinder stuck at __put_user_4+0x12/0x18 > Leftover inexact backtrace: > [<c01040d6>] ret_from_fork+0x6/0x1c Hmpf. I saw it once in child_rip here too. Then I wanted to reproduce it to report properly and couldn't again. I had a few other backtraces that were all non stuck with child_rip then on essentially the same kernel. Something weird is going on. > [<c013a475>] hrtimer_interrupt+0x17c/0x1b8 > [<c0115e8e>] smp_apic_timer_interrupt+0x72/0x85 > [<c0104bef>] apic_timer_interrupt+0x33/0x38 > [<c020c184>] __get_user_4+0x14/0x17 > DWARF2 unwinder stuck at __get_user_4+0x14/0x17 > Leftover inexact backtrace: Now that is weird. Never seen before. Jan, any ideas? What is your gcc/compiler, Michal? -Andi Were there any strange binutils in use, Michal? > [<c018b42f>] do_execve+0xdd/0x210 > [<c0102497>] sys_execve+0x3f/0x62 > [<c01041c2>] sysenter_past_esp+0x5f/0x99 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Fw: Re: 2.6.21-rc5-mm3 2007-03-30 19:31 ` Fw: Re: 2.6.21-rc5-mm3 Andi Kleen @ 2007-03-31 9:11 ` Ingo Molnar 2007-03-31 11:19 ` Michal Piotrowski 2007-04-02 7:31 ` Jan Beulich 2 siblings, 0 replies; 5+ messages in thread From: Ingo Molnar @ 2007-03-31 9:11 UTC (permalink / raw) To: Andi Kleen Cc: Andrew Morton, Jan Beulich, Michal Piotrowski, Thomas Gleixner, linux-kernel * Andi Kleen <ak@suse.de> wrote: > > [<c01040d6>] ret_from_fork+0x6/0x1c > > Hmpf. I saw it once in child_rip here too. Then I wanted to reproduce > it to report properly and couldn't again. I had a few other backtraces > that were all non stuck with child_rip then on essentially the same > kernel. Something weird is going on. find below a colorful unwinder crash, on an i386 UNWIND_STACK + FRAME_POINTERS kernel. It crashed on the context-> dereference: /* Should be after the line below, but somewhere in early boot context comes out corrupted and we can't reference it -AK */ if (ops->stack(data, "IRQ") < 0) break; stack = (unsigned long*)context->previous_esp; if (!stack) break; the comment suggests that such a crash isnt without precedence, but my crash wasnt during early bootup, it was on a working system. Ingo --------------> [<c0106442>] dump_trace+0x78/0x210 [<c010660f>] show_trace_log_lvl+0x35/0x54 [<c0106a77>] show_trace+0x2c/0x2e [<c0106aa2>] dump_stack+0x29/0x2b [<c01637fa>] check_critical_timing+0x26a/0x37e [<c0163e7f>] time_hardirqs_on+0xac/0xc2 [<c014d385>] trace_hardirqs_on+0x16b/0x172 [<c010533a>] restore_nocheck+0x12/0x15 [<c02a007b>] acpi_rs_get_address_common+0x63/0x71 [<c06bc000>] init_thread_union+0x0/0x1000 DWARF2 unwinder stuck at init_thread_union+0x0/0x1000 Leftover inexact backtrace: BUG: unable to handle kernel paging request at virtual address 70252034 printing eip: c0106592 *pde = 00000000 stopped custom tracer. Oops: 0000 [#1] PREEMPT SMP Modules linked in: CPU: 0 EIP: 0060:[<c0106592>] Not tainted VLI EFLAGS: 00010046 (2.6.21-rc5-rt6 #83) EIP is at dump_trace+0x1c8/0x210 eax: 00000000 ebx: c06bce10 ecx: fffd85a4 edx: c064728c esi: 70252000 edi: 70252070 ebp: c06bce10 esp: c06bcda4 ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068 preempt:00000002 Process swapper (pid: 0, ti=c06bc000 task=c0645280 task.ti=c06bc000) Stack: c055faad c059b2f4 c06bc000 00000000 c02ae350 00000000 00000000 00000000 00000000 c4b83528 0000007b 0000007b 00000000 00000000 c06bc000 00000060 00000000 c0645288 00000068 c0645280 0835b643 c064728c c055faad c011c8f4 Call Trace: [<c010660f>] show_trace_log_lvl+0x35/0x54 [<c0106a77>] show_trace+0x2c/0x2e [<c0106aa2>] dump_stack+0x29/0x2b [<c01637fa>] check_critical_timing+0x26a/0x37e [<c0163e7f>] time_hardirqs_on+0xac/0xc2 [<c014d385>] trace_hardirqs_on+0x16b/0x172 [<c010533a>] restore_nocheck+0x12/0x15 [<c02a007b>] acpi_rs_get_address_common+0x63/0x71 [<c06bc000>] init_thread_union+0x0/0x1000 DWARF2 unwinder stuck at init_thread_union+0x0/0x1000 Leftover inexact backtrace: BUG: unable to handle kernel paging request at virtual address 70252034 printing eip: c0106592 *pde = 00000000 Oops: 0000 [#2] PREEMPT SMP Modules linked in: CPU: 0 EIP: 0060:[<c0106592>] Not tainted VLI EFLAGS: 00010046 (2.6.21-rc5-rt6 #83) EIP is at dump_trace+0x1c8/0x210 eax: 00000000 ebx: c06bcc34 ecx: fffd85b7 edx: c064728c esi: 70252000 edi: 70252070 ebp: c06bcc34 esp: c06bcbc8 ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068 preempt:00000002 Process swapper (pid: 0, ti=c06bc000 task=c0645280 task.ti=c06bc000) Stack: c0550554 c059b2f4 c06bc000 00000000 c02ae350 00000000 00000000 00000000 00000000 c4b83528 c064007b fffd007b c06400d8 ffffffff c06bc000 00000060 00010046 c0645288 00000068 c0645280 00000019 c064728c c0550554 c011c8f4 Call Trace: [<c010660f>] show_trace_log_lvl+0x35/0x54 [<c01066db>] show_stack_log_lvl+0xad/0xc5 [<c010691a>] show_registers+0x227/0x31d [<c0106d37>] die+0x137/0x21d [<c0487550>] do_page_fault+0x4c1/0x5a8 [<c048585c>] error_code+0x7c/0x84 [<c0106592>] dump_trace+0x1c8/0x210 [<c010660f>] show_trace_log_lvl+0x35/0x54 [<c0106a77>] show_trace+0x2c/0x2e [<c0106aa2>] dump_stack+0x29/0x2b [<c01637fa>] check_critical_timing+0x26a/0x37e [<c0163e7f>] time_hardirqs_on+0xac/0xc2 [<c014d385>] trace_hardirqs_on+0x16b/0x172 [<c010533a>] restore_nocheck+0x12/0x15 [<c02a007b>] acpi_rs_get_address_common+0x63/0x71 [<c06bc000>] init_thread_union+0x0/0x1000 DWARF2 unwinder stuck at init_thread_union+0x0/0x1000 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Fw: Re: 2.6.21-rc5-mm3 2007-03-30 19:31 ` Fw: Re: 2.6.21-rc5-mm3 Andi Kleen 2007-03-31 9:11 ` Ingo Molnar @ 2007-03-31 11:19 ` Michal Piotrowski 2007-03-31 13:11 ` Michal Piotrowski 2007-04-02 7:31 ` Jan Beulich 2 siblings, 1 reply; 5+ messages in thread From: Michal Piotrowski @ 2007-03-31 11:19 UTC (permalink / raw) To: Andi Kleen Cc: Andrew Morton, Jan Beulich, Ingo Molnar, Michal Piotrowski, Thomas Gleixner, linux-kernel Andi Kleen napisał(a): >> BUG: NMI Watchdog detected LOCKUP on CPU0, eip c014ce9c, registers: > > I suspect it is just because his console is too slow and then unwinding > took too long and it happened to hit the unwinder. > > You did use a slow console, right? console=ttyS0,115200n8 > > I suppose it just needs a strategic touch_nmi_watchdog. Will add that. > >> Modules linked in: ide_cd cdrom rtc unix >> CPU: 0 >> EIP: 0060:[<c014ce9c>] Not tainted VLI >> EFLAGS: 00000093 (2.6.21-rc5-mm3 #10) >> EIP is at read_pointer+0x49/0x2d8 >> eax: c7a8dd04 ebx: 00000000 ecx: 00000000 edx: c043d19c >> esi: c043d184 edi: c043d19c ebp: c7a8dbf4 esp: c7a8dbbc >> ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068 >> Process udevd (pid: 864, ti=c7a8c000 task=c97cd4d0 task.ti=c7a8c000) >> Stack: 0000000b c7a8dc70 c7a8dbf4 c014d6d0 c7a8dd04 c043e454 c7a8dbf4 c011fdd1 >> c043e404 c043e454 c043d190 0005cd94 c043d184 c7a8dd04 c7a8dd14 c014dd3a >> 00000000 00000000 00000000 00000000 c7a8df44 c7a8dd74 c741eefb 00000008 >> Call Trace: >> [<c014dd3a>] unwind+0x414/0xfa2 >> [<c010510d>] dump_trace_unwind+0xb4/0xe5 >> [<c014ce4d>] unwind_init_running+0x25/0x2b >> [<c01051a1>] dump_trace+0x63/0x1eb >> [<c010ad39>] save_stack_trace+0x23/0x42 >> [<c01393c9>] update_cpu_base_expires_next+0x56/0x5a >> [<c013a475>] hrtimer_interrupt+0x17c/0x1b8 >> [<c0115e8e>] smp_apic_timer_interrupt+0x72/0x85 >> [<c0104bef>] apic_timer_interrupt+0x33/0x38 >> [<c014320c>] lock_release+0x1d2/0x1da >> [<c013a7ef>] up_read+0x19/0x2e >> [<c011b800>] do_page_fault+0x28f/0x55b >> [<c034d191>] error_code+0x79/0x80 >> [<c020c23e>] __put_user_4+0x12/0x18 >> DWARF2 unwinder stuck at __put_user_4+0x12/0x18 >> Leftover inexact backtrace: >> [<c01040d6>] ret_from_fork+0x6/0x1c > > Hmpf. I saw it once in child_rip here too. Then I wanted to reproduce it to report > properly and couldn't again. I had a few other backtraces that were all non stuck > with child_rip then on essentially the same kernel. Something weird is going on. > >> [<c013a475>] hrtimer_interrupt+0x17c/0x1b8 >> [<c0115e8e>] smp_apic_timer_interrupt+0x72/0x85 >> [<c0104bef>] apic_timer_interrupt+0x33/0x38 >> [<c020c184>] __get_user_4+0x14/0x17 >> DWARF2 unwinder stuck at __get_user_4+0x14/0x17 >> Leftover inexact backtrace: > > Now that is weird. Never seen before. Jan, any ideas? > > What is your gcc/compiler, Michal? gcc --version gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-51) > > -Andi > > > Were there any strange binutils in use, Michal? I don't remember when I had problems with this compiler. > >> [<c018b42f>] do_execve+0xdd/0x210 >> [<c0102497>] sys_execve+0x3f/0x62 >> [<c01041c2>] sysenter_past_esp+0x5f/0x99 > Regards, Michal -- Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Fw: Re: 2.6.21-rc5-mm3 2007-03-31 11:19 ` Michal Piotrowski @ 2007-03-31 13:11 ` Michal Piotrowski 0 siblings, 0 replies; 5+ messages in thread From: Michal Piotrowski @ 2007-03-31 13:11 UTC (permalink / raw) To: Andi Kleen Cc: Andrew Morton, Jan Beulich, Ingo Molnar, Michal Piotrowski, Thomas Gleixner, linux-kernel On 31/03/07, Michal Piotrowski <michal.k.k.piotrowski@gmail.com> wrote: > > Were there any strange binutils in use, Michal? > > I don't remember when I had problems with this compiler. ^^^ (sorry, to many bottles of beer) ld --version GNU ld version 2.17.50.0.6-2.fc6 20061020 Regards, Michal -- Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Fw: Re: 2.6.21-rc5-mm3 2007-03-30 19:31 ` Fw: Re: 2.6.21-rc5-mm3 Andi Kleen 2007-03-31 9:11 ` Ingo Molnar 2007-03-31 11:19 ` Michal Piotrowski @ 2007-04-02 7:31 ` Jan Beulich 2 siblings, 0 replies; 5+ messages in thread From: Jan Beulich @ 2007-04-02 7:31 UTC (permalink / raw) To: Andi Kleen Cc: Ingo Molnar, Michal Piotrowski, Thomas Gleixner, Andrew Morton, linux-kernel >> [<c020c23e>] __put_user_4+0x12/0x18 >> DWARF2 unwinder stuck at __put_user_4+0x12/0x18 >> Leftover inexact backtrace: >> [<c01040d6>] ret_from_fork+0x6/0x1c > >Hmpf. I saw it once in child_rip here too. Then I wanted to reproduce it to report >properly and couldn't again. I had a few other backtraces that were all non stuck >with child_rip then on essentially the same kernel. Something weird is going on. > >> [<c013a475>] hrtimer_interrupt+0x17c/0x1b8 >> [<c0115e8e>] smp_apic_timer_interrupt+0x72/0x85 >> [<c0104bef>] apic_timer_interrupt+0x33/0x38 >> [<c020c184>] __get_user_4+0x14/0x17 >> DWARF2 unwinder stuck at __get_user_4+0x14/0x17 >> Leftover inexact backtrace: > >Now that is weird. Never seen before. Jan, any ideas? Not weird at all - these functions simply aren't annotated (i.e. I assume you forgot to apply the respective patch when you re-added the unwinder). As I don't have this as a standalone patch anymore, I'll include the full diff for arch/i386/lib/ below - this is likely to apply. Jan Index: head-2007-03-19/arch/i386/lib/checksum.S =================================================================== --- head-2007-03-19.orig/arch/i386/lib/checksum.S 2007-02-04 19:44:54.000000000 +0100 +++ head-2007-03-19/arch/i386/lib/checksum.S 2007-03-21 12:29:15.000000000 +0100 @@ -25,6 +25,8 @@ * 2 of the License, or (at your option) any later version. */ +#include <linux/linkage.h> +#include <asm/dwarf2.h> #include <asm/errno.h> /* @@ -36,8 +38,6 @@ unsigned int csum_partial(const unsigned */ .text -.align 4 -.globl csum_partial #ifndef CONFIG_X86_USE_PPRO_CHECKSUM @@ -48,9 +48,14 @@ unsigned int csum_partial(const unsigned * Fortunately, it is easy to convert 2-byte alignment to 4-byte * alignment for the unrolled loop. */ -csum_partial: +ENTRY(csum_partial) + CFI_STARTPROC pushl %esi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET esi, 0 pushl %ebx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: unsigned char *buff @@ -128,16 +133,27 @@ csum_partial: roll $8, %eax 8: popl %ebx + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE ebx popl %esi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE esi ret + CFI_ENDPROC +ENDPROC(csum_partial) #else /* Version for PentiumII/PPro */ -csum_partial: +ENTRY(csum_partial) + CFI_STARTPROC pushl %esi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET esi, 0 pushl %ebx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: const unsigned char *buf @@ -245,8 +261,14 @@ csum_partial: roll $8, %eax 90: popl %ebx + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE ebx popl %esi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE esi ret + CFI_ENDPROC +ENDPROC(csum_partial) #endif @@ -278,19 +300,24 @@ unsigned int csum_partial_copy_generic ( .long 9999b, 6002f ; \ .previous -.align 4 -.globl csum_partial_copy_generic - #ifndef CONFIG_X86_USE_PPRO_CHECKSUM #define ARGBASE 16 #define FP 12 -csum_partial_copy_generic: +ENTRY(csum_partial_copy_generic) + CFI_STARTPROC subl $4,%esp + CFI_ADJUST_CFA_OFFSET 4 pushl %edi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET edi, 0 pushl %esi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET esi, 0 pushl %ebx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebx, 0 movl ARGBASE+16(%esp),%eax # sum movl ARGBASE+12(%esp),%ecx # len movl ARGBASE+4(%esp),%esi # src @@ -400,10 +427,19 @@ DST( movb %cl, (%edi) ) .previous popl %ebx + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE ebx popl %esi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE esi popl %edi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE edi popl %ecx # equivalent to addl $4,%esp + CFI_ADJUST_CFA_OFFSET -4 ret + CFI_ENDPROC +ENDPROC(csum_partial_copy_generic) #else @@ -421,10 +457,17 @@ DST( movb %cl, (%edi) ) #define ARGBASE 12 -csum_partial_copy_generic: +ENTRY(csum_partial_copy_generic) + CFI_STARTPROC pushl %ebx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebx, 0 pushl %edi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET edi, 0 pushl %esi + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET esi, 0 movl ARGBASE+4(%esp),%esi #src movl ARGBASE+8(%esp),%edi #dst movl ARGBASE+12(%esp),%ecx #len @@ -485,9 +528,17 @@ DST( movb %dl, (%edi) ) .previous popl %esi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE esi popl %edi + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE edi popl %ebx + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE ebx ret + CFI_ENDPROC +ENDPROC(csum_partial_copy_generic) #undef ROUND #undef ROUND1 Index: head-2007-03-19/arch/i386/lib/getuser.S =================================================================== --- head-2007-03-19.orig/arch/i386/lib/getuser.S 2007-02-04 19:44:54.000000000 +0100 +++ head-2007-03-19/arch/i386/lib/getuser.S 2007-03-21 12:29:15.000000000 +0100 @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ +#include <linux/linkage.h> +#include <asm/dwarf2.h> #include <asm/thread_info.h> @@ -24,19 +26,19 @@ */ .text -.align 4 -.globl __get_user_1 -__get_user_1: +ENTRY(__get_user_1) + CFI_STARTPROC GET_THREAD_INFO(%edx) cmpl TI_addr_limit(%edx),%eax jae bad_get_user 1: movzbl (%eax),%edx xorl %eax,%eax ret + CFI_ENDPROC +ENDPROC(__get_user_1) -.align 4 -.globl __get_user_2 -__get_user_2: +ENTRY(__get_user_2) + CFI_STARTPROC addl $1,%eax jc bad_get_user GET_THREAD_INFO(%edx) @@ -45,10 +47,11 @@ __get_user_2: 2: movzwl -1(%eax),%edx xorl %eax,%eax ret + CFI_ENDPROC +ENDPROC(__get_user_2) -.align 4 -.globl __get_user_4 -__get_user_4: +ENTRY(__get_user_4) + CFI_STARTPROC addl $3,%eax jc bad_get_user GET_THREAD_INFO(%edx) @@ -57,11 +60,16 @@ __get_user_4: 3: movl -3(%eax),%edx xorl %eax,%eax ret + CFI_ENDPROC +ENDPROC(__get_user_4) bad_get_user: + CFI_STARTPROC xorl %edx,%edx movl $-14,%eax ret + CFI_ENDPROC +END(bad_get_user) .section __ex_table,"a" .long 1b,bad_get_user Index: head-2007-03-19/arch/i386/lib/putuser.S =================================================================== --- head-2007-03-19.orig/arch/i386/lib/putuser.S 2007-02-04 19:44:54.000000000 +0100 +++ head-2007-03-19/arch/i386/lib/putuser.S 2007-03-21 12:29:15.000000000 +0100 @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ +#include <linux/linkage.h> +#include <asm/dwarf2.h> #include <asm/thread_info.h> @@ -23,23 +25,28 @@ * as they get called from within inline assembly. */ -#define ENTER pushl %ebx ; GET_THREAD_INFO(%ebx) -#define EXIT popl %ebx ; ret +#define ENTER CFI_STARTPROC ; \ + pushl %ebx ; \ + CFI_ADJUST_CFA_OFFSET 4 ; \ + CFI_REL_OFFSET ebx, 0 ; \ + GET_THREAD_INFO(%ebx) +#define EXIT popl %ebx ; \ + CFI_ADJUST_CFA_OFFSET -4 ; \ + CFI_RESTORE ebx ; \ + ret ; \ + CFI_ENDPROC .text -.align 4 -.globl __put_user_1 -__put_user_1: +ENTRY(__put_user_1) ENTER cmpl TI_addr_limit(%ebx),%ecx jae bad_put_user 1: movb %al,(%ecx) xorl %eax,%eax EXIT +ENDPROC(__put_user_1) -.align 4 -.globl __put_user_2 -__put_user_2: +ENTRY(__put_user_2) ENTER movl TI_addr_limit(%ebx),%ebx subl $1,%ebx @@ -48,10 +55,9 @@ __put_user_2: 2: movw %ax,(%ecx) xorl %eax,%eax EXIT +ENDPROC(__put_user_2) -.align 4 -.globl __put_user_4 -__put_user_4: +ENTRY(__put_user_4) ENTER movl TI_addr_limit(%ebx),%ebx subl $3,%ebx @@ -60,10 +66,9 @@ __put_user_4: 3: movl %eax,(%ecx) xorl %eax,%eax EXIT +ENDPROC(__put_user_4) -.align 4 -.globl __put_user_8 -__put_user_8: +ENTRY(__put_user_8) ENTER movl TI_addr_limit(%ebx),%ebx subl $7,%ebx @@ -73,10 +78,16 @@ __put_user_8: 5: movl %edx,4(%ecx) xorl %eax,%eax EXIT +ENDPROC(__put_user_8) bad_put_user: + CFI_STARTPROC simple + CFI_DEF_CFA esp, 2*4 + CFI_OFFSET eip, -1*4 + CFI_OFFSET ebx, -2*4 movl $-14,%eax EXIT +END(bad_put_user) .section __ex_table,"a" .long 1b,bad_put_user ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-04-02 7:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20070330103958.16b738aa.akpm@linux-foundation.org>
2007-03-30 19:31 ` Fw: Re: 2.6.21-rc5-mm3 Andi Kleen
2007-03-31 9:11 ` Ingo Molnar
2007-03-31 11:19 ` Michal Piotrowski
2007-03-31 13:11 ` Michal Piotrowski
2007-04-02 7:31 ` Jan Beulich
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox