With target board unix/-fPIE/-pie and gdb.arch/amd64-entry-value-param.exp, we get: ... FAIL: gdb.arch/amd64-entry-value-param.exp: call 1: p y FAIL: gdb.arch/amd64-entry-value-param.exp: call 1: p b FAIL: gdb.arch/amd64-entry-value-param.exp: call 2: p y FAIL: gdb.arch/amd64-entry-value-param.exp: call 2: p b FAIL: gdb.arch/amd64-entry-value-param.exp: call 3: p y FAIL: gdb.arch/amd64-entry-value-param.exp: call 3: p b ... Reproduce first FAIL on command line: ... $ gdb ./build/gdb/testsuite/outputs/gdb.arch/amd64-entry-value-param/amd64-entry-value-param -batch -ex "b foo" -ex run -ex "p y" Breakpoint 1 at 0x650: file gdb.arch/amd64-entry-value-param.c, line 26. Breakpoint 1, foo (x=10, y=<optimized out>, z=3) at gdb.arch/amd64-entry-value-param.c:26 26 gdb.arch/amd64-entry-value-param.c: Bestand of map bestaat niet. $1 = <optimized out> ... as opposed to this without -fPIE/-pie: ... $ gdb ./build/gdb/testsuite/outputs/gdb.arch/amd64-entry-value-param/amd64-entry-value-param -batch -ex "b foo" -ex run -ex "p y" Breakpoint 1 at 0x4004c0: file gdb.arch/amd64-entry-value-param.c, line 26. Breakpoint 1, foo (x=x@entry=10, y=2, z=3) at gdb.arch/amd64-entry-value-param.c:26 26 gdb.arch/amd64-entry-value-param.c: Bestand of map bestaat niet. $1 = 2 ...
Setting a breakpoint on throw_error, we get: ... Thread 1 "gdb" hit Breakpoint 2, throw_error (error=NO_ENTRY_VALUE_ERROR, fmt=0xb57318 "DW_OP_entry_value resolving cannot find DW_TAG_call_site %s in %s") at src/gdb/gdbsupport/common-exceptions.c:222 222 va_start (args, fmt); (gdb) bt #0 throw_error (error=NO_ENTRY_VALUE_ERROR, fmt=0xb57318 "DW_OP_entry_value resolving cannot find DW_TAG_call_site %s in %s") at src/gdb/gdbsupport/common-exceptions.c:222 #1 0x0000000000479158 in call_site_for_pc (gdbarch=0x1a9a730, pc=93824992233083) at src/gdb/block.c:237 #2 0x000000000059b023 in call_site_find_chain_1 (gdbarch=0x1a9a730, caller_pc=93824992233083, callee_pc=93824992233040) at src/gdb/dwarf2loc.c:1097 #3 0x000000000059b3fc in call_site_find_chain (gdbarch=0x1a9a730, caller_pc=93824992233083, callee_pc=93824992233040) at src/gdb/dwarf2loc.c:1201 #4 0x000000000058c41e in dwarf2_tailcall_sniffer_first (this_frame=0x1a4db00, tailcall_cachep=0x1a4dc08, entry_cfa_sp_offsetp=0x0) at src/gdb/dwarf2-frame-tailcall.c:391 #5 0x000000000058f3f8 in dwarf2_frame_prev_register (this_frame=0x1a4db00, this_cache=0x1a4db18, regnum=16) at src/gdb/dwarf2-frame.c:1236 #6 0x0000000000629105 in frame_unwind_register_value (next_frame=0x1a4db00, regnum=16) at src/gdb/frame.c:1229 #7 0x0000000000628ca4 in frame_register_unwind (next_frame=0x1a4db00, regnum=16, optimizedp=0x7fffffffc5bc, unavailablep=0x7fffffffc5b8, lvalp=0x7fffffffc5a8, addrp=0x7fffffffc5b0, realnump=0x7fffffffc5ac, bufferp=0x7fffffffc5e8 "") at src/gdb/frame.c:1132 #8 0x0000000000628f95 in frame_unwind_register (next_frame=0x1a4db00, regnum=16, buf=0x7fffffffc5e8 "") at src/gdb/frame.c:1188 #9 0x000000000069a36e in i386_unwind_pc (gdbarch=0x1a9a730, next_frame=0x1a4db00) at src/gdb/i386-tdep.c:1967 #10 0x000000000063bf53 in gdbarch_unwind_pc (gdbarch=0x1a9a730, next_frame=0x1a4db00) at src/gdb/gdbarch.c:3085 #11 0x0000000000628616 in frame_unwind_pc (this_frame=0x1a4db00) at src/gdb/frame.c:928 #12 0x000000000062b536 in get_frame_pc (frame=0x1b8ef80) at src/gdb/frame.c:2399 #13 0x000000000062b614 in get_frame_address_in_block (this_frame=0x1b8ef80) at src/gdb/frame.c:2429 #14 0x00000000006d8352 in inline_frame_sniffer (self=0xbe83e0 <inline_frame_unwind>, this_frame=0x1b8ef80, this_cache=0x1b8ef98) at src/gdb/inline-frame.c:204 #15 0x0000000000626491 in frame_unwind_try_unwinder (this_frame=0x1b8ef80, this_cache=0x1b8ef98, unwinder=0xbe83e0 <inline_frame_unwind>) at src/gdb/frame-unwind.c:107 #16 0x00000000006265fe in frame_unwind_find_by_frame (this_frame=0x1b8ef80, this_cache=0x1b8ef98) at src/gdb/frame-unwind.c:165 #17 0x0000000000627a57 in compute_frame_id (fi=0x1b8ef80) at src/gdb/frame.c:546 #18 0x000000000062a777 in get_prev_frame_if_no_cycle (this_frame=0x1a4db00) at src/gdb/frame.c:1927 #19 0x000000000062ae87 in get_prev_frame_always_1 (this_frame=0x1a4db00) at src/gdb/frame.c:2108 #20 0x000000000062aeaf in get_prev_frame_always (this_frame=0x1a4db00) at src/gdb/frame.c:2124 #21 0x000000000062b43a in get_prev_frame (this_frame=0x1a4db00) at src/gdb/frame.c:2376 #22 0x000000000059bbb4 in value_of_dwarf_reg_entry (type=0x1a164e0, frame=0x1a4db00, kind=CALL_SITE_PARAMETER_DWARF_REG, kind_u=...) at src/gdb/dwarf2loc.c:1449 #23 0x000000000059bd5f in value_of_dwarf_block_entry (type=0x1a164e0, frame=0x1a4db00, block=0x1a30085 "U\aK", block_len=1) at src/gdb/dwarf2loc.c:1501 #24 0x000000000059ffff in locexpr_read_variable_at_entry (symbol=0x1a64610, frame=0x1a4db00) at src/gdb/dwarf2loc.c:3543 #25 0x0000000000866ad8 in read_frame_arg (fp_opts=..., sym=0x1a64610, frame=0x1a4db00, argp=0x7fffffffcb80, entryargp=0x7fffffffcba0) at src/gdb/stack.c:496 #26 0x00000000008675b7 in print_frame_args (fp_opts=..., func=0x1a645a0, frame=0x1a4db00, num=-1, stream=0x1a6e070) at src/gdb/stack.c:818 #27 0x000000000086873e in print_frame (fp_opts=..., frame=0x1a4db00, print_level=0, print_what=SRC_AND_LOC, print_args=1, sal=...) at src/gdb/stack.c:1332 #28 0x0000000000867d54 in print_frame_info (fp_opts=..., frame=0x1a4db00, print_level=0, print_what=SRC_AND_LOC, print_args=1, set_current_sal=1) at src/gdb/stack.c:1031 #29 0x00000000008662d6 in print_stack_frame (frame=0x1a4db00, print_level=0, print_what=SRC_AND_LOC, set_current_sal=1) at src/gdb/stack.c:305 #30 0x00000000006d1423 in print_stop_location (ws=0x7fffffffd020) at src/gdb/infrun.c:7809 #31 0x00000000006d148a in print_stop_event (uiout=0x1a18a00, displays=true) at src/gdb/infrun.c:7826 #32 0x00000000008fae0f in tui_on_normal_stop (bs=0x1ab9fe0, print_frame=1) at src/gdb/tui/tui-interp.c:99 #33 0x0000000000445d3a in std::_Function_handler<void (bpstats*, int), void (*)(bpstats*, int)>::_M_invoke(std::_Any_data const&, bpstats*&&, int&&) (__functor=..., __args#0=@0x7fffffffd140: 0x1ab9fe0, __args#1=@0x7fffffffd13c: 1) at /usr/include/c++/8/bits/std_function.h:297 #34 0x00000000006d5a14 in std::function<void (bpstats*, int)>::operator()(bpstats*, int) const (this=0x131b220, __args#0=0x1ab9fe0, __args#1=1) at /usr/include/c++/8/bits/std_function.h:687 #35 0x00000000006d51be in gdb::observers::observable<bpstats*, int>::notify ( this=0x11f72a0 <gdb::observers::normal_stop>, args#0=0x1ab9fe0, args#1=1) at src/gdb/gdbsupport/observable.h:106 #36 0x00000000006d1b5e in normal_stop () at src/gdb/infrun.c:8098 #37 0x00000000006c8b87 in fetch_inferior_event (client_data=0x0) at src/gdb/infrun.c:3781 #38 0x00000000006b087b in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at src/gdb/inf-loop.c:43 #39 0x000000000070223c in handle_target_event (error=0, client_data=0x0) at src/gdb/linux-nat.c:4352 #40 0x000000000060de3d in handle_file_event (file_ptr=0x1a5b670, ready_mask=1) at src/gdb/event-loop.c:731 #41 0x000000000060e3e0 in gdb_wait_for_event (block=0) at src/gdb/event-loop.c:857 #42 0x000000000060d2b1 in gdb_do_one_event () at src/gdb/event-loop.c:321 #43 0x00000000008d7cbb in wait_sync_command_done () at src/gdb/top.c:510 #44 0x00000000008d7d33 in maybe_wait_sync_command_done (was_sync=0) at src/gdb/top.c:527 #45 0x00000000008d8144 in execute_command (p=0x7fffffffe134 "", from_tty=0) at src/gdb/top.c:629 #46 0x0000000000726e66 in catch_command_errors (command=0x8d7d4c <execute_command(char const*, int)>, arg=0x7fffffffe131 "run", from_tty=0) at src/gdb/main.c:372 #47 0x0000000000728065 in captured_main_1 (context=0x7fffffffda70) at src/gdb/main.c:1136 #48 0x00000000007281a5 in captured_main (data=0x7fffffffda70) at src/gdb/main.c:1161 #49 0x0000000000728210 in gdb_main (args=0x7fffffffda70) at src/gdb/main.c:1186 #50 0x00000000004123f9 in main (argc=13, argv=0x7fffffffdb78) at src/gdb/gdb.c:32 ...
Hmm, AFAIU, we call read_call_site_scope and try to update the pc to have the relocated value: ... baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); ... pc = attr_value_as_address (attr) + baseaddr; pc = gdbarch_adjust_dwarf2_addr (gdbarch, pc); ... but unfortunately, objfile_relocate1 has not been called yet, so baseaddr is 0.
Created attachment 11943 [details] Tentative patch This patch makes the test-case pass with -fPIE/-pie.
https://sourceware.org/ml/gdb-patches/2019-08/msg00215.html
Another try: https://sourceware.org/pipermail/gdb-patches/2021-September/182270.html
Fixed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=b0b8879e292218bfb27584515e98a46379c9c666