[okl4-developer] arm1176jz question on OKL4 2.1
Charles Wong
charlesw at ok-labs.com
Tue Apr 29 18:48:39 EST 2008
Hi Gabi,
To answer your three questions:
On 26/04/2008, at 1:08 PM, Gabi Voiculescu wrote:
> 1. For this I would like to ask how I can add more symbol
> information into the elf image (so I can use arm-linux-objdump -S-
> aka have the source text added). Is this feature available in OKL4 .
> 2.1?
We don't support adding source text to the elf image in 2.1
> 2. If not can you suggest additional parameters for me to give to
> the build system to get more output messages?
One way of getting some debug information is to turn on tracepoints in
kdb. I believe the build system enables tracepoints by default. If
that doesn't provide enough information i'm afraid you'll just have to
walk through the code - unless you have some way of getting an
execution trace.
> 3. Can you explain a little the purpose of the USER_UTCB_REF and
> CONFIG_ARM_THREAD_REGISTERS macros. If I see correctly the first is
> a pointer to a table, either stored in user area ram or in hardware
> through CP15 register accesses, depending on the second being
> undefined or not.
USER_UTCB_REF is a pointer to the utcb. CONFIG_ARM_THREAD_REGISTERS
is a flag for functionality that is not implemented in 2.1 so should
not be defined.
Oops, sorry about that. You are right to comment out #define
CONFIG_ARM_THREAD_REGISTERS!
> By the way: I think you meant to use
> #if !defined(CONFIG_ARM_THREAD_REGISTERS)
> USER_UTCB_REF = tcb->get_utcb_location();
> #else
> /* UTCB: Update User-RO Thread Register with UTCB */
> write_cp15_register(C15_pid, c0, 0x3, tcb->get_utcb_location());
> #endif
>
> instead of simply
>
> USER_UTCB_REF = tcb->get_utcb_location();
That's correct, except that since CONFIG_ARM_THREAD_REGISTERS should
not be defined so the #if-else will evaluate to just USER_UTCB_REF =
tcb->get_utcb_location();
I hope that helps.
Cheers
Charles
>
>
> in generic_space_t::activate. Since ARM1136 does not take that into
> account you probably didn't see it.
>
>
> Thank you
> Gabi Voiculescu
>
> *********************************************************************************************
> Below I have the output of the run (using parameters: project=l4test
> VERBOSE=1 VERBOSE_INIT=1 pistachio.enter_kdb = True):
>
> *********************************************************************************************
> OKL4 - (provider: Open Kernel Labs) built on Apr 25 2008 18:55:46
> using gcc version 3.4.4.
> Initialized tracebuffer @ 00240000
> Init spaceids for 256 spaces
> Initializing kernel space @ f001eb40...
> Initializing kernel debugger...
> Initializing interrupts...
> System running with strict alignment exceptions disabled
> System running with unaligned accesses enabled
> Processor Id => 410fb764: Extended Info, ARM1176, rev 4
> Initializing timer...
> [plat/timer.cc] init_clocks TIMER_IRQ = 40
> [platform/.../interrupt.cc:pb1176_unmask_irq] Mask: 40, dc_dist-
> >en_set[1] = 0x100
> [plat/timer.cc] init_clocks done
> Init mutexids for 256 mutexs
> Init clistids for 16 clists
> domain pairs: (0, 1)
> Initialising scheduler...
> Switching to idle thread
> Initializing root servers
> root-servers: utcb_area: eff00100 (64KB)
> creating root server (00000001)
> --- KD# System started (press 'g' to continue) ---
> > showtcb
> tcb/tid/name [current]: current
> === idle == TCB: f0087ea0 == ID: 1d1e1d1e = f001ea40/f001ea40 ==
> APRIO/EPRIO: 0xffffffff/0xffffffff ===
> UIP: 00000000 queues: rb space: f01026c8/0 pager: NIL_THRD
> USP: 00000000 tstate: RUNNING ready: NIL_THRD:NIL_THRD pdir :
> f4024000
> sndhd : NIL_THRD blocked : NIL_THRD:NIL_THRD waiting_for : NIL_THRD
> ts length : 0x2710 us, curr ts: 0x2710 us
> resources: 00000000 [ek]
> continuation: f0007968 preemption_cont: 00000000
> scheduler: NIL_THRD exception_handler: NIL_THRD
> partner: NIL_THRD saved partner: NIL_THRD saved state:
> ABORTED
> tcb_idx: 0
> references: T 00000000
> > go
> roottask read pagefault at ffffffff, ip=0012a58c - deny
> --- KD# roottask pagefault ---
> > showtcbext
> tcb/tid/name [current]: current
> === roottask == TCB: f0030000 == ID: 00000001 = eff00000/f0103000 ==
> APRIO/EPRIO: 0xff/0xff ===
> UIP: 0012a58c queues: rb space: f01026c8/0 pager: NIL_THRD
> USP: 00002fd8 tstate: RUNNING ready: NIL_THRD:NIL_THRD pdir :
> f4108000
> sndhd : NIL_THRD blocked : NIL_THRD:NIL_THRD waiting_for : NIL_THRD
> ts length : 0x2710 us, curr ts: 0x2328 us
> resources: 00000000 [ek]
> continuation: f000d820 preemption_cont: 00000000
> scheduler: roottask exception_handler: NIL_THRD
> partner: NIL_THRD saved partner: NIL_THRD saved state:
> RUNNING
> tcb_idx: 0
> references: T f010400c->f00300e0(I)
>
> user handle: 00000000 cop flags: 00
> preempt flags: 00 [~]
> incoming notify bits: 00000000 notify mask: 00000000
> last preempted_ip: 00000000 preempt_callback_ip: 0012c670
>
> mr( 0): 80000000 00003000 00240000 00040000 00000000 00000000
> 00000000 00000000
> mr( 8): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> mr(16): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> mr(24): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> Message Tag: 0 untyped, label = 8000, flags = -
>
> Acceptor: 00000000 (a) Error code: 0
> > go
> Assertion "get_saved_state() == thread_state_t::aborted" failed in
> file 'pistachio/src/thread.cc', line 702 (fn=f000af38)
> --- KD# assert ---
> > showtcbext
> tcb/tid/name [current]: current
> === roottask == TCB: f0030000 == ID: 00000001 = eff00000/f0103000 ==
> APRIO/EPRIO: 0xff/0xff ===
> UIP: 0012a58c queues: rb space: f01026c8/0 pager: NIL_THRD
> USP: 00002fd8 tstate: RUNNING ready: NIL_THRD:NIL_THRD pdir :
> f4108000
> sndhd : NIL_THRD blocked : NIL_THRD:NIL_THRD waiting_for : NIL_THRD
> ts length : 0x2710 us, curr ts: 0x2328 us
> resources: 00000000 [ek]
> continuation: f000d820 preemption_cont: 00000000
> scheduler: roottask exception_handler: NIL_THRD
> partner: NIL_THRD saved partner: NIL_THRD saved state:
> RUNNING
> tcb_idx: 0
> references: T f010400c->f00300e0(I)
>
> user handle: 00000000 cop flags: 00
> preempt flags: 00 [~]
> incoming notify bits: 00000000 notify mask: 00000000
> last preempted_ip: 00000000 preempt_callback_ip: 0012c670
>
> mr( 0): 80000000 00003000 00240000 00040000 00000000 00000000
> 00000000 00000000
> mr( 8): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> mr(16): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> mr(24): 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
> Message Tag: 0 untyped, label = 8000, flags = -
>
> Acceptor: 00000000 (a) Error code: 0
> >
>
> *********************************************************************************************
> Output from arm-linux-objdump -S ./build/images/image.elf
> *********************************************************************************************
> ......
> 0012a54c <l4test-malloc>:
> 12a54c: e3500000 cmp r0, #0 ; 0x0
> 12a550: e92d4070 stmdb sp!, {r4, r5, r6, lr}
> 12a554: 01a02000 moveq r2, r0
> 12a558: 0a000020 beq 12a5e0 <l4test-malloc+0x94>
> 12a55c: e2803007 add r3, r0, #7 ; 0x7
> 12a560: e1a031a3 mov r3, r3, lsr #3
> 12a564: e59f00ac ldr r0, [pc, #172] ; 12a618
> <l4test-$d>
> 12a568: e2835001 add r5, r3, #1 ; 0x1
> 12a56c: eb000817 bl 12c5d0 <l4test-
> okl4_mutex_count_lock>
> 12a570: e59f60a4 ldr r6, [pc, #164] ; 12a61c
> <l4test-$d+0x4>
> 12a574: e5962000 ldr r2, [r6]
> 12a578: e3520000 cmp r2, #0 ; 0x0
> 12a57c: e1a03002 mov r3, r2
> 12a580: 059f2098 ldreq r2, [pc, #152] ; 12a620
> <l4test-$d+0x8>
> 12a584: 05862000 streq r2, [r6]
> 12a588: 05822000 streq r2, [r2]
> 12a58c: e5924000 ldr r4, [r2]
> 12a590: 05823004 streq r3, [r2, #4]
> 12a594: ea000001 b 12a5a0 <l4test-malloc+0x54>
> 12a598: e1a02004 mov r2, r4
>
> *********************************************************************************************
> What I think is happening
> If I figured out things correctly, the program:
>
> - goes to CONTINUATION_FUNCTION(init_all_threads) from ./pistachio/
> src/schedule.cc
>
> - enters KDB (because of pistachio.kdb_enter =True in the command
> line)
>
> - calls the scheduler
>
> - in the end I get here:
> void generic_space_t::activate(tcb_t *tcb) from ./arch/arm/pistachio/
> v6/src/space.cc
> where I get a page fault on the first instruction.
>
>
>
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile.
> Try it now._______________________________________________
> Developer mailing list
> Developer at okl4.org
> https://lists.okl4.org/mailman/listinfo/developer
More information about the Developer
mailing list