|
From: Julian S. <js...@ac...> - 2005-11-15 11:45:05
|
On Tuesday 15 November 2005 11:17, Paul Mackerras wrote: > Josef Weidendorfer writes: > > 1) There is a "strange function" with a single instruction "blrl". > > It is called quite often at the start of any code in /lib/ld.so, > > address 0x04027528; ld.so is mapped starting from 0x04000000. > > In the current PPC32 ELF ABI, there is a blrl instruction in the word > before the start of the GOT (global offset table). Shared libraries > use a bl GOT-4 to get the address of the GOT into LR in > position-independent code. I wouldn't consider the bl and blrl to > denote a function call. That would be nice. It's a bit like the the x86 idiom "call lbl; lbl: pop %reg" to get the current PC into %reg, which the x86 front end treats as a single entity. The problem is that the bl and blrl are in different BBs and so it's difficult to get the insn decoder to treat them as a single entity. I think the problem Josef was having is that although the bl is manifestly a call, the blrl is not obviously a return, and so callgrind's call-stack tracking stuff was seeing a lot of calls with no returns. > What particular aspect of that are you asking about? I think this is resolved now -- a query was being made to the wrong part of the system. J |