Skip to content
  • Marcin Kościelnicki's avatar
    gdbserver/IPA: Export some functions via global function pointers. · 1cda1512
    Marcin Kościelnicki authored
    On powerpc64, qSymbol for a function returns the function code address,
    and not the descriptor address.  Since we emit code calling gdb_collect
    and some other functions, we need the descriptor (no way to know the
    proper TOC address without it).  To get the descriptor address, make
    global function pointer variables in the IPA pointing to the relevant
    functions and read them instead of asking for them directly via qSymbol.
    
    gdb/gdbserver/ChangeLog:
    
    	* linux-aarch64-ipa.c: Rename gdb_agent_get_raw_reg to get_raw_reg.
    	* linux-amd64-ipa.c: Likewise.
    	* linux-i386-ipa.c: Likewise.
    	* linux-s390-ipa.c: Likewise.
    	* tracepoint.c: IPA-export gdb_collect_ptr instead of gdb_collect,
    	ditto for get_raw_reg_ptr, get_trace_state_variable_value_ptr,
    	set_trace_state_variable_value_ptr.
    	(struct ipa_sym_addresses): Likewise.
    	(symbol_list): Likewise.
    	(install_fast_tracepoint): Dereference gdb_collect_ptr instead of
    	accessing gdb_collect directly.
    	(gdb_collect_ptr_type): New typedef.
    	(get_raw_reg_ptr_type): New typedef.
    	(get_trace_state_variable_value_ptr_type): New typedef.
    	(set_trace_state_variable_value_ptr_type): New typedef.
    	(gdb_collect_ptr): New global.
    	(get_raw_reg_ptr): New global.
    	(get_trace_state_variable_value_ptr): New global.
    	(set_trace_state_variable_value_ptr): New global.
    	(get_raw_reg_func_addr): Dereference get_raw_reg_ptr instead of
    	accessing get_raw_reg directly.
    	(get_get_tsv_func_addr): Likewise for
    	get_trace_state_variable_value_ptr.
    	(get_set_tsv_func_addr): Likewise for
    	set_trace_state_variable_value_ptr.
    	* tracepoint.h: Rename gdb_agent_get_raw_reg to get_raw_reg.
    1cda1512