2012/2/29 Oscar Dávila <[email protected]>

>
> 2012/2/29 Oscar Dávila <[email protected]>
>
>>
>> 2012/2/25 Gilles Chanteperdrix <[email protected]>
>>
>>> On 02/24/2012 11:55 PM, Oscar Dávila wrote:
>>> > 2012/2/23 Gilles Chanteperdrix <[email protected]>
>>> >
>>> >> On 02/23/2012 11:43 PM, Oscar Dávila wrote:
>>> >>> 2012/2/14 Gilles Chanteperdrix <[email protected]>
>>> >>>
>>> >>>> On 02/14/2012 06:54 PM, Oscar Dávila wrote:
>>> >>>>> I compiled Xenomai succesfully, but when i try to run an example it
>>> >>>> freezes
>>> >>>>> / machine look up, any help will be apreciated, thanks.
>>> >>>>>
>>> >>>>> Here is some info about the system, its a Debian 6.0 with a
>>> >>>>> kernel 2.6.35.9, xenomai-2.6.0, the adeos
>>> >>>>> patch adeos-ipipe-2.6.35.9-x86-2.8-04.patch and Im also using the
>>> >>>>> nmi_watchdog=2 in the boot kernel options.
>>> >>>>
>>> >>>> Please reproduce the bug:
>>> >>>> - in text mode, so as to have the full bug trace;
>>> >>>> - with frame pointers enabled;
>>> >>>> - with highest kernel verbosity for BUGs and backtraces.
>>> >>>>
>>> >>>
>>> >>> How do i do this last point? i mean, i already compile kernel with
>>> frame
>>> >>> pointers enabled, also i already ran it in text mode, and i active
>>> all
>>> >> the
>>> >>> xenomai debug kernel options. i saw some other debug options in
>>> kernel
>>> >>> hacking, do i have to active those ones too?
>>> >>
>>> >> The stack trace looks fine. Could you show us the disassembly of the
>>> >> __ipipe_sync_stage function?
>>> >>
>>> >>
>>> > Here is what i think is the disassembly of the __ipipe_sync_stage
>>> function,
>>> > the full disassembly of the core.c file is in
>>> > http://odavilar.0x1fee3.org/xenomai/__ipipe_sync_stage
>>>
>>> Please obtain the disassembly with objdump -d vmlinx, so that we get the
>>> addresses corresponding with the instructions. Without the addresses, we
>>> do not know where to look.
>>>
>>
>> I need some help here, i've already dump the vmlinux image, but i get the
>> asm with addresses but without the source so i don't know how to get the
>> __ipipe_sync_stage function, y tried objdump -S vmlinux but didnt worked,
>> do i have to check an option in the .config of the kernel to be able to get
>> the source?
>>
>>
>> Thanks again.
>>
>>
> Finally i could get the dump
>
>
> post-prompt
> No breakpoints or watchpoints.
>
> breakpoints-table-end
>
> post-prompt
> Dump of assembler code for function __ipipe_sync_stage:
> 0xc106d376 <__ipipe_sync_stage+0>:    push   %ebp
> 0xc106d377 <__ipipe_sync_stage+1>:    mov    %esp,%ebp
> 0xc106d379 <__ipipe_sync_stage+3>:    push   %edi
> 0xc106d37a <__ipipe_sync_stage+4>:    push   %esi
> 0xc106d37b <__ipipe_sync_stage+5>:    push   %ebx
> 0xc106d37c <__ipipe_sync_stage+6>:    sub    $0x28,%esp
> 0xc106d37f <__ipipe_sync_stage+9>:    mov    $0xc1439694,%edx
> 0xc106d384 <__ipipe_sync_stage+14>:   mov    %fs:0xc1432f14,%eax
> 0xc106d38a <__ipipe_sync_stage+20>:   mov    (%eax,%edx,1),%esi
> 0xc106d38d <__ipipe_sync_stage+23>:   mov    $0xc1433cf4,%edx
> 0xc106d392 <__ipipe_sync_stage+28>:   add    %edx,%eax
> 0xc106d394 <__ipipe_sync_stage+30>:   imul   $0x1668,(%esi),%ecx
> 0xc106d39a <__ipipe_sync_stage+36>:   add    %ecx,%eax
> 0xc106d39c <__ipipe_sync_stage+38>:   btsl   $0x0,(%eax)
> 0xc106d3a0 <__ipipe_sync_stage+42>:   lea    0x4(%esi),%ecx
> 0xc106d3a3 <__ipipe_sync_stage+45>:   mov    %ecx,-0x20(%ebp)
> 0xc106d3a6 <__ipipe_sync_stage+48>:   mov    $0xc143302c,%ebx
> 0xc106d3ab <__ipipe_sync_stage+53>:   mov    %ebx,-0x10(%ebp)
> 0xc106d3ae <__ipipe_sync_stage+56>:   mov    %edx,-0x28(%ebp)
> 0xc106d3b1 <__ipipe_sync_stage+59>:   lea    0x10(%eax),%edx
> 0xc106d3b4 <__ipipe_sync_stage+62>:   mov    %edx,-0x14(%ebp)
> 0xc106d3b7 <__ipipe_sync_stage+65>:   lea    0x8(%eax),%ecx
> 0xc106d3ba <__ipipe_sync_stage+68>:   mov    %ecx,-0x18(%ebp)
> 0xc106d3bd <__ipipe_sync_stage+71>:   lea    0x4(%eax),%ebx
> 0xc106d3c0 <__ipipe_sync_stage+74>:   mov    %ebx,-0x1c(%ebp)
> 0xc106d3c3 <__ipipe_sync_stage+77>:   mov    %esi,-0x30(%ebp)
> 0xc106d3c6 <__ipipe_sync_stage+80>:   mov    0x4(%eax),%edx
> 0xc106d3c9 <__ipipe_sync_stage+83>:   test   %edx,%edx
> 0xc106d3cb <__ipipe_sync_stage+85>:   je     0xc106d51b 
> <__ipipe_sync_stage+421>
> 0xc106d3d1 <__ipipe_sync_stage+91>:   bsr    %edx,%edx
> 0xc106d3d4 <__ipipe_sync_stage+94>:   mov    0x8(%eax,%edx,4),%ecx
> 0xc106d3d8 <__ipipe_sync_stage+98>:   test   %ecx,%ecx
> 0xc106d3da <__ipipe_sync_stage+100>:  je     0xc106d51b 
> <__ipipe_sync_stage+421>
> 0xc106d3e0 <__ipipe_sync_stage+106>:  bsr    %ecx,%ecx
> 0xc106d3e3 <__ipipe_sync_stage+109>:  mov    %edx,%ebx
> 0xc106d3e5 <__ipipe_sync_stage+111>:  shl    $0x5,%ebx
> 0xc106d3e8 <__ipipe_sync_stage+114>:  add    %ebx,%ecx
> 0xc106d3ea <__ipipe_sync_stage+116>:  lea    0x4(%ecx),%edi
> 0xc106d3ed <__ipipe_sync_stage+119>:  mov    (%eax,%edi,4),%ebx
> 0xc106d3f0 <__ipipe_sync_stage+122>:  test   %ebx,%ebx
> 0xc106d3f2 <__ipipe_sync_stage+124>:  je     0xc106d51b 
> <__ipipe_sync_stage+421>
> 0xc106d3f8 <__ipipe_sync_stage+130>:  bsr    %ebx,%esi
> 0xc106d3fb <__ipipe_sync_stage+133>:  mov    %ecx,%ebx
> 0xc106d3fd <__ipipe_sync_stage+135>:  shl    $0x5,%ebx
> 0xc106d400 <__ipipe_sync_stage+138>:  mov    %ebx,-0x24(%ebp)
> 0xc106d403 <__ipipe_sync_stage+141>:  mov    -0x24(%ebp),%ebx
> 0xc106d406 <__ipipe_sync_stage+144>:  add    %esi,%ebx
> 0xc106d408 <__ipipe_sync_stage+146>:  mov    -0x14(%ebp),%esi
> 0xc106d40b <__ipipe_sync_stage+149>:  btr    %ebx,(%esi)
> 0xc106d40e <__ipipe_sync_stage+152>:  cmpl   $0x0,(%eax,%edi,4)
> 0xc106d412 <__ipipe_sync_stage+156>:  jne    0xc106d427 
> <__ipipe_sync_stage+177>
> 0xc106d414 <__ipipe_sync_stage+158>:  mov    -0x18(%ebp),%esi
> 0xc106d417 <__ipipe_sync_stage+161>:  btr    %ecx,(%esi)
> 0xc106d41a <__ipipe_sync_stage+164>:  cmpl   $0x0,0x8(%eax,%edx,4)
> 0xc106d41f <__ipipe_sync_stage+169>:  jne    0xc106d427 
> <__ipipe_sync_stage+177>
> 0xc106d421 <__ipipe_sync_stage+171>:  mov    -0x1c(%ebp),%ecx
> 0xc106d424 <__ipipe_sync_stage+174>:  btr    %edx,(%ecx)
> 0xc106d427 <__ipipe_sync_stage+177>:  test   %ebx,%ebx
> 0xc106d429 <__ipipe_sync_stage+179>:  js     0xc106d51b 
> <__ipipe_sync_stage+421>
> 0xc106d42f <__ipipe_sync_stage+185>:  lea    0x2(%ebx),%edx
> 0xc106d432 <__ipipe_sync_stage+188>:  shl    $0x7,%edx
> 0xc106d435 <__ipipe_sync_stage+191>:  mov    -0x30(%ebp),%esi
> 0xc106d438 <__ipipe_sync_stage+194>:  testb  $0x20,(%esi,%edx,1)
> 0xc106d43c <__ipipe_sync_stage+198>:  jne    0xc106d3c6 
> <__ipipe_sync_stage+80>
> 0xc106d43e <__ipipe_sync_stage+200>:  mov    -0x20(%ebp),%eax
> 0xc106d441 <__ipipe_sync_stage+203>:  cmp    0xc13c6fd0,%eax
> 0xc106d447 <__ipipe_sync_stage+209>:  je     0xc106d44a 
> <__ipipe_sync_stage+212>
> 0xc106d449 <__ipipe_sync_stage+211>:  sti
> 0xc106d44a <__ipipe_sync_stage+212>:  cmp    $0xc150c080,%esi
> 0xc106d450 <__ipipe_sync_stage+218>:  je     0xc106d468 
> <__ipipe_sync_stage+242>
> 0xc106d452 <__ipipe_sync_stage+220>:  lea    0x2(%ebx),%ecx
> 0xc106d455 <__ipipe_sync_stage+223>:  shl    $0x7,%ecx
> 0xc106d458 <__ipipe_sync_stage+226>:  mov    0xc(%ecx,%esi,1),%edx
> 0xc106d45c <__ipipe_sync_stage+230>:  mov    %ebx,%eax
> 0xc106d45e <__ipipe_sync_stage+232>:  call   *0x8(%esi,%ecx,1)
> 0xc106d462 <__ipipe_sync_stage+236>:  cli
> 0xc106d463 <__ipipe_sync_stage+237>:  jmp    0xc106d4f9 
> <__ipipe_sync_stage+387>
> 0xc106d468 <__ipipe_sync_stage+242>:  lea    -0x520(%ebx),%eax
> 0xc106d46e <__ipipe_sync_stage+248>:  cmp    $0x1f,%eax
> 0xc106d471 <__ipipe_sync_stage+251>:  lea    0x2(%ebx),%edi
> 0xc106d474 <__ipipe_sync_stage+254>:  ja     0xc106d4a9 
> <__ipipe_sync_stage+307>
> 0xc106d476 <__ipipe_sync_stage+256>:  call   0xc102d215 <irq_enter>
> 0xc106d47b <__ipipe_sync_stage+261>:  mov    %edi,%ecx
> 0xc106d47d <__ipipe_sync_stage+263>:  shl    $0x7,%ecx
> 0xc106d480 <__ipipe_sync_stage+266>:  mov    -0x3eaf3f74(%ecx),%edx
> 0xc106d486 <__ipipe_sync_stage+272>:  mov    %ebx,%eax
> 0xc106d488 <__ipipe_sync_stage+274>:  call   *-0x3eaf3f78(%ecx)
> 0xc106d48e <__ipipe_sync_stage+280>:  call   0xc102d523 <irq_exit>
> 0xc106d493 <__ipipe_sync_stage+285>:  cli
> 0xc106d494 <__ipipe_sync_stage+286>:  mov    %esp,%eax
> 0xc106d496 <__ipipe_sync_stage+288>:  and    $0xffffe000,%eax
> 0xc106d49b <__ipipe_sync_stage+293>:  cmpl   $0x0,0x14(%eax)
> 0xc106d49f <__ipipe_sync_stage+297>:  jne    0xc106d4f9 
> <__ipipe_sync_stage+387>
> 0xc106d4a1 <__ipipe_sync_stage+299>:  testb  $0x8,0x8(%eax)
> 0xc106d4a5 <__ipipe_sync_stage+303>:  je     0xc106d4f9 
> <__ipipe_sync_stage+387>
> 0xc106d4a7 <__ipipe_sync_stage+305>:  jmp    0xc106d4a1 
> <__ipipe_sync_stage+299>
> 0xc106d4a9 <__ipipe_sync_stage+307>:  shl    $0x7,%edi
> 0xc106d4ac <__ipipe_sync_stage+310>:  mov    -0x3eaf3f78(%edi),%edx
> 0xc106d4b2 <__ipipe_sync_stage+316>:  mov    %fs:0xc1432f14,%edi
> 0xc106d4b9 <__ipipe_sync_stage+323>:  add    -0x10(%ebp),%edi
> 0xc106d4bc <__ipipe_sync_stage+326>:  mov    %ebx,%eax
> 0xc106d4be <__ipipe_sync_stage+328>:  mov    %edx,-0x2c(%ebp)
> 0xc106d4c1 <__ipipe_sync_stage+331>:  call   0xc10145c3 
> <__ipipe_get_ioapic_irq_vector>
> 0xc106d4c6 <__ipipe_sync_stage+336>:  not    %eax
> 0xc106d4c8 <__ipipe_sync_stage+338>:  mov    %eax,0x2c(%edi)
> 0xc106d4cb <__ipipe_sync_stage+341>:  mov    %ebx,%eax
> 0xc106d4cd <__ipipe_sync_stage+343>:  not    %eax
> 0xc106d4cf <__ipipe_sync_stage+345>:  mov    -0x2c(%ebp),%edx
> 0xc106d4d2 <__ipipe_sync_stage+348>:  pushf
> 0xc106d4d3 <__ipipe_sync_stage+349>:  orl    $0x200,(%esp)
> 0xc106d4da <__ipipe_sync_stage+356>:  push   %cs
> 0xc106d4db <__ipipe_sync_stage+357>:  push   $0xc106d4f7
> 0xc106d4e0 <__ipipe_sync_stage+362>:  push   %eax
> 0xc106d4e1 <__ipipe_sync_stage+363>:  push   %gs
> 0xc106d4e3 <__ipipe_sync_stage+365>:  push   %fs
> 0xc106d4e5 <__ipipe_sync_stage+367>:  push   %es
> 0xc106d4e6 <__ipipe_sync_stage+368>:  push   %ds
> 0xc106d4e7 <__ipipe_sync_stage+369>:  push   %eax
> 0xc106d4e8 <__ipipe_sync_stage+370>:  push   %ebp
> 0xc106d4e9 <__ipipe_sync_stage+371>:  push   %edi
> 0xc106d4ea <__ipipe_sync_stage+372>:  push   %esi
> 0xc106d4eb <__ipipe_sync_stage+373>:  push   %edx
> 0xc106d4ec <__ipipe_sync_stage+374>:  push   %ecx
> 0xc106d4ed <__ipipe_sync_stage+375>:  push   %ebx
> 0xc106d4ee <__ipipe_sync_stage+376>:  mov    %edi,%eax
> 0xc106d4f0 <__ipipe_sync_stage+378>:  call   *%edx
> 0xc106d4f2 <__ipipe_sync_stage+380>:  jmp    0xc1269fd8
> 0xc106d4f7 <__ipipe_sync_stage+385>:  cli
> 0xc106d4f8 <__ipipe_sync_stage+386>:  cli
> 0xc106d4f9 <__ipipe_sync_stage+387>:  mov    %fs:0xc1432f14,%ecx
> 0xc106d500 <__ipipe_sync_stage+394>:  mov    $0xc1439694,%edx
> 0xc106d505 <__ipipe_sync_stage+399>:  mov    -0x28(%ebp),%ebx
> 0xc106d508 <__ipipe_sync_stage+402>:  lea    (%ecx,%ebx,1),%eax
> 0xc106d50b <__ipipe_sync_stage+405>:  mov    (%ecx,%edx,1),%edx
> 0xc106d50e <__ipipe_sync_stage+408>:  imul   $0x1668,(%edx),%edx
> 0xc106d514 <__ipipe_sync_stage+414>:  add    %edx,%eax
> 0xc106d516 <__ipipe_sync_stage+416>:  jmp    0xc106d3b1 
> <__ipipe_sync_stage+59>
> 0xc106d51b <__ipipe_sync_stage+421>:  btrl   $0x0,(%eax)
> 0xc106d51f <__ipipe_sync_stage+425>:  add    $0x28,%esp
> 0xc106d522 <__ipipe_sync_stage+428>:  pop    %ebx
> 0xc106d523 <__ipipe_sync_stage+429>:  pop    %esi
> 0xc106d524 <__ipipe_sync_stage+430>:  pop    %edi
> 0xc106d525 <__ipipe_sync_stage+431>:  pop    %ebp
> 0xc106d526 <__ipipe_sync_stage+432>:  ret
> End of assembler dump.
>
> post-prompt
> No breakpoints or watchpoints.
>
>
> breakpoints-table-end
>
> Thanks again!
>
>
http://odavilar.0x1fee3.org/dump__ipipe_sync_stage

c106d376 <__ipipe_sync_stage>:
 * return of this routine.
 *
 * This routine must be called with hw interrupts off.
 */
void __ipipe_sync_stage(void)
{
c106d376:       55                      push   %ebp
c106d377:       89 e5                   mov    %esp,%ebp
c106d379:       57                      push   %edi
c106d37a:       56                      push   %esi
c106d37b:       53                      push   %ebx
c106d37c:       83 ec 28                sub    $0x28,%esp
        struct ipipe_percpu_domain_data *p;
        struct ipipe_domain *ipd;
        int irq;

        ipd = __ipipe_current_domain;
c106d37f:       ba 94 96 43 c1          mov    $0xc1439694,%edx
c106d384:       64 a1 14 2f 43 c1       mov    %fs:0xc1432f14,%eax
c106d38a:       8b 34 10                mov    (%eax,%edx,1),%esi
        p = ipipe_cpudom_ptr(ipd);
c106d38d:       ba f4 3c 43 c1          mov    $0xc1433cf4,%edx
c106d392:       01 d0                   add    %edx,%eax
c106d394:       69 0e 68 16 00 00       imul   $0x1668,(%esi),%ecx
c106d39a:       01 c8                   add    %ecx,%eax
c106d39c:       0f ba 28 00             btsl   $0x0,(%eax)
                barrier();

                if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
                        continue;

                if (!__ipipe_pipeline_head_p(ipd))
c106d3a0:       8d 4e 04                lea    0x4(%esi),%ecx
c106d3a3:       89 4d e0                mov    %ecx,-0x20(%ebp)
void __ipipe_end_edge_irq(unsigned irq, struct irq_desc *desc);

static inline void __do_root_xirq(ipipe_irq_handler_t handler,
                                  unsigned int irq)
{
        struct pt_regs *regs = &__raw_get_cpu_var(__ipipe_tick_regs);
c106d3a6:       bb 2c 30 43 c1          mov    $0xc143302c,%ebx
c106d3ab:       89 5d f0                mov    %ebx,-0x10(%ebp)
                        __ipipe_do_root_xirq(ipd, irq);
                        local_irq_disable_hw();
                        root_stall_after_handler();
                }

                p = ipipe_cpudom_ptr(__ipipe_current_domain);
c106d3ae:       89 55 d8                mov    %edx,-0x28(%ebp)
        clear_bit(nr, addr);
}

static inline void __clear_bit(int nr, volatile unsigned long *addr)
{
        asm volatile("btr %1,%0" : ADDR : "Ir" (nr));
c106d3b1:       8d 50 10                lea    0x10(%eax),%edx
c106d3b4:       89 55 ec                mov    %edx,-0x14(%ebp)
c106d3b7:       8d 48 08                lea    0x8(%eax),%ecx
c106d3ba:       89 4d e8                mov    %ecx,-0x18(%ebp)
c106d3bd:       8d 58 04                lea    0x4(%eax),%ebx
c106d3c0:       89 5d e4                mov    %ebx,-0x1c(%ebp)
c106d3c3:       89 75 d0                mov    %esi,-0x30(%ebp)
{
        int l0b, l1b, l2b;
        unsigned long l0m, l1m, l2m;
        unsigned int irq;

        l0m = p->irqpend_himap;
c106d3c6:       8b 50 04                mov    0x4(%eax),%edx
        if (unlikely(l0m == 0))
c106d3c9:       85 d2                   test   %edx,%edx
c106d3cb:       0f 84 4a 01 00 00       je     c106d51b <__xirq_end+0x24>

int __ipipe_handle_irq(struct pt_regs *regs);

static inline unsigned long __ipipe_ffnz(unsigned long ul)
{
      __asm__("bsrl %1, %0":"=r"(ul)
c106d3d1:       0f bd d2                bsr    %edx,%edx
                return -1;

        l0b = __ipipe_ffnz(l0m);
        l1m = p->irqpend_mdmap[l0b];
c106d3d4:       8b 4c 90 08             mov    0x8(%eax,%edx,4),%ecx
        if (unlikely(l1m == 0))
c106d3d8:       85 c9                   test   %ecx,%ecx
c106d3da:       0f 84 3b 01 00 00       je     c106d51b <__xirq_end+0x24>
c106d3e0:       0f bd c9                bsr    %ecx,%ecx
                return -1;

        l1b = __ipipe_ffnz(l1m) + l0b * BITS_PER_LONG;
c106d3e3:       89 d3                   mov    %edx,%ebx
c106d3e5:       c1 e3 05                shl    $0x5,%ebx
c106d3e8:       01 d9                   add    %ebx,%ecx
        l2m = p->irqpend_lomap[l1b];
c106d3ea:       8d 79 04                lea    0x4(%ecx),%edi
c106d3ed:       8b 1c b8                mov    (%eax,%edi,4),%ebx
        if (unlikely(l2m == 0))
c106d3f0:       85 db                   test   %ebx,%ebx
c106d3f2:       0f 84 23 01 00 00       je     c106d51b <__xirq_end+0x24>
c106d3f8:       0f bd f3                bsr    %ebx,%esi
                return -1;

        l2b = __ipipe_ffnz(l2m);
        irq = l1b * BITS_PER_LONG + l2b;
c106d3fb:       89 cb                   mov    %ecx,%ebx
c106d3fd:       c1 e3 05                shl    $0x5,%ebx
c106d400:       89 5d dc                mov    %ebx,-0x24(%ebp)
c106d403:       8b 5d dc                mov    -0x24(%ebp),%ebx
c106d406:       01 f3                   add    %esi,%ebx
c106d408:       8b 75 ec                mov    -0x14(%ebp),%esi
c106d40b:       0f b3 1e                btr    %ebx,(%esi)

        __clear_bit(irq, p->irqpend_lomap);
        if (p->irqpend_lomap[l1b] == 0) {
c106d40e:       83 3c b8 00             cmpl   $0x0,(%eax,%edi,4)
c106d412:       75 13                   jne    c106d427 
<__ipipe_sync_stage+0xb1>
c106d414:       8b 75 e8                mov    -0x18(%ebp),%esi
c106d417:       0f b3 0e                btr    %ecx,(%esi)
                __clear_bit(l1b, p->irqpend_mdmap);
                if (p->irqpend_mdmap[l0b] == 0)
c106d41a:       83 7c 90 08 00          cmpl   $0x0,0x8(%eax,%edx,4)
c106d41f:       75 06                   jne    c106d427 
<__ipipe_sync_stage+0xb1>
c106d421:       8b 4d e4                mov    -0x1c(%ebp),%ecx
c106d424:       0f b3 11                btr    %edx,(%ecx)
        if (ipd == ipipe_root_domain)
                trace_hardirqs_off();

        for (;;) {
                irq = __ipipe_next_irq(p);
                if (irq < 0)
c106d427:       85 db                   test   %ebx,%ebx
c106d429:       0f 88 ec 00 00 00       js     c106d51b <__xirq_end+0x24>
                 * that all updates to maps are done before the
                 * handler gets called.
                 */
                barrier();

                if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
c106d42f:       8d 53 02                lea    0x2(%ebx),%edx
c106d432:       c1 e2 07                shl    $0x7,%edx
c106d435:       8b 75 d0                mov    -0x30(%ebp),%esi
c106d438:       f6 04 16 20             testb  $0x20,(%esi,%edx,1)
c106d43c:       75 88                   jne    c106d3c6 
<__ipipe_sync_stage+0x50>
                        continue;

                if (!__ipipe_pipeline_head_p(ipd))
c106d43e:       8b 45 e0                mov    -0x20(%ebp),%eax
c106d441:       3b 05 d0 6f 3c c1       cmp    0xc13c6fd0,%eax
c106d447:       74 01                   je     c106d44a 
<__ipipe_sync_stage+0xd4>
                        local_irq_enable_hw();
c106d449:       fb                      sti

                if (likely(ipd != ipipe_root_domain)) {
c106d44a:       81 fe 80 c0 50 c1       cmp    $0xc150c080,%esi
c106d450:       74 16                   je     c106d468 
<__ipipe_sync_stage+0xf2>
                        ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie);
c106d452:       8d 4b 02                lea    0x2(%ebx),%ecx
c106d455:       c1 e1 07                shl    $0x7,%ecx
c106d458:       8b 54 31 0c             mov    0xc(%ecx,%esi,1),%edx
c106d45c:       89 d8                   mov    %ebx,%eax
c106d45e:       ff 54 0e 08             call   *0x8(%esi,%ecx,1)
                        __ipipe_run_irqtail(irq);
                        local_irq_disable_hw();
c106d462:       fa                      cli
c106d463:       e9 91 00 00 00          jmp    c106d4f9 <__xirq_end+0x2>
                } else if (ipipe_virtual_irq_p(irq)) {
c106d468:       8d 83 e0 fa ff ff       lea    -0x520(%ebx),%eax
c106d46e:       83 f8 1f                cmp    $0x1f,%eax
c106d471:       8d 7b 02                lea    0x2(%ebx),%edi
c106d474:       77 33                   ja     c106d4a9 
<__ipipe_sync_stage+0x133>
                        irq_enter();
c106d476:       e8 9a fd fb ff          call   c102d215 <irq_enter>
                        ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie);
c106d47b:       89 f9                   mov    %edi,%ecx
c106d47d:       c1 e1 07                shl    $0x7,%ecx
c106d480:       8b 91 8c c0 50 c1       mov    -0x3eaf3f74(%ecx),%edx
c106d486:       89 d8                   mov    %ebx,%eax
c106d488:       ff 91 88 c0 50 c1       call   *-0x3eaf3f78(%ecx)
                        irq_exit();
c106d48e:       e8 90 00 fc ff          call   c102d523 <irq_exit>
                        local_irq_disable_hw();
c106d493:       fa                      cli
c106d494:       89 e0                   mov    %esp,%eax
c106d496:       25 00 e0 ff ff          and    $0xffffe000,%eax
                        root_stall_after_handler();
                        while (__ipipe_check_root_resched())
c106d49b:       83 78 14 00             cmpl   $0x0,0x14(%eax)
c106d49f:       75 58                   jne    c106d4f9 <__xirq_end+0x2>
c106d4a1:       f6 40 08 08             testb  $0x8,0x8(%eax)
c106d4a5:       74 52                   je     c106d4f9 <__xirq_end+0x2>
c106d4a7:       eb f8                   jmp    c106d4a1 
<__ipipe_sync_stage+0x12b>
                                __ipipe_preempt_schedule_irq();
                } else {
                        __ipipe_do_root_xirq(ipd, irq);
c106d4a9:       c1 e7 07                shl    $0x7,%edi
c106d4ac:       8b 97 88 c0 50 c1       mov    -0x3eaf3f78(%edi),%edx
void __ipipe_end_edge_irq(unsigned irq, struct irq_desc *desc);

static inline void __do_root_xirq(ipipe_irq_handler_t handler,
                                  unsigned int irq)
{
        struct pt_regs *regs = &__raw_get_cpu_var(__ipipe_tick_regs);
c106d4b2:       64 8b 3d 14 2f 43 c1    mov    %fs:0xc1432f14,%edi
c106d4b9:       03 7d f0                add    -0x10(%ebp),%edi

static inline unsigned __ipipe_get_irq_vector(int irq)
{
#ifdef CONFIG_X86_IO_APIC
        unsigned __ipipe_get_ioapic_irq_vector(int irq);
        return __ipipe_get_ioapic_irq_vector(irq);
c106d4bc:       89 d8                   mov    %ebx,%eax
c106d4be:       89 55 d4                mov    %edx,-0x2c(%ebp)
c106d4c1:       e8 fd 70 fa ff          call   c10145c3 
<__ipipe_get_ioapic_irq_vector>

        regs->orig_ax = ~__ipipe_get_irq_vector(irq);
c106d4c6:       f7 d0                   not    %eax
c106d4c8:       89 47 2c                mov    %eax,0x2c(%edi)

        __asm__ __volatile__("pushfl\n\t"
c106d4cb:       89 d8                   mov    %ebx,%eax
c106d4cd:       f7 d0                   not    %eax
c106d4cf:       8b 55 d4                mov    -0x2c(%ebp),%edx
c106d4d2:       9c                      pushf
c106d4d3:       81 0c 24 00 02 00 00    orl    $0x200,(%esp)
c106d4da:       0e                      push   %cs
c106d4db:       68 f7 d4 06 c1          push   $0xc106d4f7
c106d4e0:       50                      push   %eax
c106d4e1:       0f a8                   push   %gs
c106d4e3:       0f a0                   push   %fs
c106d4e5:       06                      push   %es
c106d4e6:       1e                      push   %ds
c106d4e7:       50                      push   %eax
c106d4e8:       55                      push   %ebp
c106d4e9:       57                      push   %edi
c106d4ea:       56                      push   %esi
c106d4eb:       52                      push   %edx
c106d4ec:       51                      push   %ecx
c106d4ed:       53                      push   %ebx
c106d4ee:       89 f8                   mov    %edi,%eax
c106d4f0:       ff d2                   call   *%edx
c106d4f2:       e9 e1 ca 1f 00          jmp    c1269fd8 <__kprobes_text_start>

c106d4f7 <__xirq_end>:
c106d4f7:       fa                      cli
                        local_irq_disable_hw();
c106d4f8:       fa                      cli
                        root_stall_after_handler();
                }

                p = ipipe_cpudom_ptr(__ipipe_current_domain);
c106d4f9:       64 8b 0d 14 2f 43 c1    mov    %fs:0xc1432f14,%ecx
c106d500:       ba 94 96 43 c1          mov    $0xc1439694,%edx
c106d505:       8b 5d d8                mov    -0x28(%ebp),%ebx
c106d508:       8d 04 19                lea    (%ecx,%ebx,1),%eax
c106d50b:       8b 14 11                mov    (%ecx,%edx,1),%edx
c106d50e:       69 12 68 16 00 00       imul   $0x1668,(%edx),%edx
c106d514:       01 d0                   add    %edx,%eax
c106d516:       e9 96 fe ff ff          jmp    c106d3b1 
<__ipipe_sync_stage+0x3b>
c106d51b:       0f ba 30 00             btrl   $0x0,(%eax)

        if (ipd == ipipe_root_domain)
                trace_hardirqs_on();

        __clear_bit(IPIPE_STALL_FLAG, &p->status);
}
c106d51f:       83 c4 28                add    $0x28,%esp
c106d522:       5b                      pop    %ebx
c106d523:       5e                      pop    %esi
c106d524:       5f                      pop    %edi
c106d525:       5d                      pop    %ebp
c106d526:       c3                      ret


<http://odavilar.0x1fee3.org/dump__ipipe_sync_stage> Another dump now with
the source in it.

Maybe it can be more helpful

Thanks.

-- 
Atentamente:
Oscar Dávila Ramírez
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to