Aw: Re: how to open elf file image from inside genode? libbacktrace question
Uwe
geno.de at public-files.de
Thu Apr 8 16:25:40 CEST 2021
> Gesendet: Donnerstag, 08. April 2021 um 15:23 Uhr
> Von: "Josef Söntgen" <josef.soentgen at genode-labs.com>
> An: "Alexander Tormasov via users" <users at lists.genode.org>
> Betreff: Re: how to open elf file image from inside genode? libbacktrace question
>
> Hallo Alexander,
>
> > Returning to my question, could I use posix open(«/test-go») to open
> > my binary from which I run executable, if I have the following code in
> > run file:
> > […]
>
> Yes, using 'open()' is the way to go. As libbacktrace hardcodes a few
Is that really a good idea? Depending on vfs for
something as bas(e)ic as stack tracing seems
to me as overly broad. Because the needed
capability is already a (private) member of
the environment as _binary- >cap(). I only
need to find a way to make it accessible by
POSIX later. Or make it directly accessible by
the stack tracing part.
> options you could piggy-back on one of them. I picked the '/proc/self/exe'
> option:
>
> ! <start name="test-go" caps="250">
> ! <resource name="RAM" quantum="12M"/>
> ! <config verbose="yes" ld_verbose="yes">
> ! <vfs>
> ! <dir name="dev"> <log/> </dir>
> !
> ! <dir name="proc">
> ! <dir name="self">
> ! <rom name="exe" label="test-go"/>
> ! </dir>
> ! </dir>
> ! </vfs>
> ! <libc stdout="/dev/log" stderr="/dev/log"/>
> ! </config>
> ! </start>
>
> With this VFS configuration in place libbacktrace opens the binary
> successfully. However, you will be greeted with the by now infamous
> deadlock ahead error message when using '-smp 2':
>
> ! [init -> test-go] Error: deadlock ahead, mutex=0x164040, return ip=0xf3383
>
> The mutex in question is the 'Linker::mutex()' object. Again this is due
> to the fact that as side-effect of 'dl_iterate_phdr' a jump-slot
> relocation for 'mknod' takes place (*). Why that is I have not checked.
>
> Now we are not entirely sure if taking the mutex in 'dl_iterate_phdr' is
> strictly necessary - that is something we have to investigate. Removing
> the mutex allows the 'go_app' to run through. So you are free to do the
> same. But to be clear, we do not know if this leads to other regressions.
> We are going to look into that.
>
>
> (*) You can instrument that by applying the patch I attached that
> makes the linker verbose and shows you the object and index for
> the relocation:
>
> ! […]
> ! [init -> test-go] LD: SLOT libc.lib.so 0x20c
> ! [init -> test-go] LD: SLOT binary 0xe
> ! [init -> test-go] Error: deadlock ahead, mutex=0x164040, return ip=0xf3383
>
> With this information you can check to which symbol the index
> belongs to:
>
> $ readelf --dyn-syms test-go|grep '\<14:'
> 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mknod
>
>
> Regards
> Josef
>
> --
> Josef Söntgen
> Genode Labs
>
> http://www.genode-labs.com/ · http://genode.org/
> _______________________________________________
> Genode users mailing list
> users at lists.genode.org
> https://lists.genode.org/listinfo/users
More information about the users
mailing list