Debugging without GDB - stack print?
Christian Prochaska
christian.prochaska at genode-labs.com
Mon Aug 26 15:08:44 CEST 2019
Hi Alexander,
On 26.08.19 11:18, Alexander Tormasov via users wrote:
> I do not find any information about other libs used by my application. It is not printed in log, only init, init->timer and init->log_terminal:
> virtual address layout of core:
> overall [0000000000002000,0000000200000000)
> core image [0000000002000000,000000000362a000)
> ipc buffer [000000000362a000,000000000362b000)
> boot_info [000000000362b000,000000000362d000)
> stack area [0000000040000000,0000000050000000)
> ...
> [init -> timer] 0x40000000 .. 0x4fffffff: stack area
> [init -> timer] 0x30000 .. 0x197fff: ld.lib.so
> [init -> log_terminal] 0x40000000 .. 0x4fffffff: stack area
> [init -> log_terminal] 0x30000 .. 0x197fff: ld.lib.so
> [init] child "timer" announces service "Timer"
> [init] child "log_terminal" announces service "Terminal"
> Warning: void Genode::Rpc_cap_factory::free(Genode::Native_capability) not implemented - resources leaked: 0x10
> no RM attachment (READ pf_addr=0x0 pf_ip=0xa95b1 from pager_object: pd='init -> test-go' thread='ep')
> Warning: invalid signal-context capability
> Warning: page-fault, pager_object: pd='init -> test-go' thread='ep' ip=0xa95b1 pf-addr=0x0
>
> This is all what I have in log (by the way, same address for stack and ld.lib.so mean that this is different process and virtual address spaces?).
core, init, timer, log_terminal, test-go, ... are different processes
with their individual address spaces. So it looks like the page fault
happened already before ld.lib.so could print the memory layout for
'[init -> test-go]'.
> And, for fault address inside debug/ld-sel4.lib.so
> page fault IP address 0xa95b1
> Objdump show hat first address inside is from 49440 - is it real address which will be in memory?
> /genode/build/x86_64/debug/ld-sel4.lib.so: file format elf64-x86-64
>
>
> Disassembly of section .init:
>
> 0000000000049440 <_init>:
> _init():
> /genode/repos/base/src/lib/ldso/startup/startup.cc:36<http://startup.cc:36>
> void _init(void) __attribute__((used,section(".init")));
>
> void _init(void)
> {
> /* call static constructors */
> for(ld_hook *func = _lctors_end; func > _lctors_start + 1; (*--func)());
> 49440: 48 8d 05 f9 ff ff ff lea -0x7(%rip),%rax # 49440 <_init>
> Does it mean that it exactly correspond (page fault IP address 0xa95b1) place below, or I should subtract something from it (not clear still for me exact list of modules in memory)?
> ...
> /genode/repos/base/src/lib/base/thread.cc:51<http://thread.cc:51>
> Ram_allocator * const ram = env_stack_area_ram_allocator;
> a959f: 48 b8 88 07 00 00 00 movabs $0x788,%rax
> a95a6: 00 00 00
> a95a9: 49 8b 44 05 00 mov 0x0(%r13,%rax,1),%rax
> a95ae: 48 8b 30 mov (%rax),%rsi
> /genode/repos/base/src/lib/base/thread.cc:52<http://thread.cc:52>
> Ram_dataspace_capability const ds_cap = ram->alloc(ds_size);
> a95b1: 48 8b 06 mov (%rsi),%rax
> a95b4: 4c 8b 40 10 mov 0x10(%rax),%r8
> a95b8: 4e 3b 04 29 cmp (%rcx,%r13,1),%r8
> a95bc: 0f 85 5e 02 00 00 jne a9820 <Genode::Stack::size(unsigned long)+0x330>
> _ZN6Genode25Constrained_ram_allocator5allocEmNS_15Cache_attributeE():
> /genode/repos/base/include/base/ram_allocator.h:89
> Ram_quota_guard::Reservation ram (_ram_guard, Ram_quota{page_aligned_size});
> a95c2: 48 8b 5e 10 mov 0x10(%rsi),%rbx
>
For ld.lib.so and test-go, the address corresponds exactly. So, the page
fault appears to occur at
Ram_dataspace_capability const ds_cap = ram->alloc(ds_size);
Maybe 'env_stack_area_ram_allocator' (thread.cc:51) has not been
initialized?
> I wonder if your test application really needs to be started with Noux though. If it doesn't need fork() or execve(), it would
> probably be easier not to use Noux.
>
> I suppose that some of emulation of generic libc implemented inside noux (like used inside libgo getpid/pthread/etc) - and this is the main reason why I try to link it.
> May be I am wrong ?
I would try a simple "hello world" application without Noux first and
hope that libgo does not need fork, execve, wait or getpid for that.
pthreads should also work without Noux.
Christian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.genode.org/pipermail/users/attachments/20190826/8d124cff/attachment.sig>
More information about the users
mailing list