Trying to compute the address of a procedure fails when the inferior is not running: (gdb) p foo'address No registers. To reproduce, use the trivial Ada program pasted at the end of this email, and compile it with: % gnatmake -g foo Then try the command above. The problem is inside eval.c:evaluate_subexp_for_address, in the case handling the OP_VAR_VALUE case. Unless we are in EVAL_AVOID_SIDE_EFFECT mode, we end up doing: if (noside == EVAL_AVOID_SIDE_EFFECTS) [...] else return locate_var_value (var, block_innermost_frame (exp->elts[pc + 1].block)); In particular, we are trying to get the block_innermost_frame, which doesn't exist in our case. The attached patch changes that to first check that we need a frame to get the object address, otherwise, we locate the value without a frame. 2008-01-01 Paul N. Hilfinger * eval.c (evaluate_subexp_for_address): Provide frame address to locate_var_value only if it will be needed. I also wrote a tiny testcase that verifies the fix. 2008-01-01 Joel Brobecker * gdb.ada/fun_addr/foo.adb: New file. * gdb.ada/fun_addr.exp: New testcase. All tested on x86-linux, no regression. The patch has also been in AdaCore's tree since Aug 2003 (shame on us!). OK to commit? Thanks, -- Joel procedure Foo is begin null; end Foo;