Jun Koi wrote: > Hi, > > In x86, GETPC() is implemented as below: > > # define GETPC() ((void *)((unsigned long)__builtin_return_address(0) - 1)) > > As I understand, it gets the returned address on the stack, then > subtract 1 to get back to the above address. > > Imagine we have code like this (pseudo asm code): > > .... > CALL <relative address> > <next-insn> > .... > > When we call GETPC, we get the address of <next-insn>, and subtract 1. > But the problem is that the CALL insn is more than 1 byte, so how can > GETPC() gives us the address of the CALL insn above? > > I guess I must misunderstood something here ....
IIRC, the result of GETPC is used for a range check. So you just have to ensure that it points somewhere into the translated code sequence of the current target instruction. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux