From e538d2d7ba1de7fe8bcfe090b71cd503f25f1ca8 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Tue, 24 Jun 2003 23:09:22 +0000 Subject: [PATCH] * ppc-linux-tdep.c: More "Linux" -> "GNU/Linux". --- gdb/ChangeLog | 2 ++ gdb/ppc-linux-tdep.c | 34 +++++++++++++++++----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7c0b6c9..2093b4c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,7 @@ 2003-06-24 Jim Blandy + * ppc-linux-tdep.c: More "Linux" -> "GNU/Linux". + * ppc-linux-tdep.c (ppc64_linux_convert_from_func_ptr_addr): New function. (ppc_linux_init_abi): Register it as the diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 269e16d..05b0510 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -731,7 +731,7 @@ insn_ds_field (unsigned int insn) } -/* If DESC is the address of a 64-bit PowerPC Linux function +/* If DESC is the address of a 64-bit PowerPC GNU/Linux function descriptor, return the descriptor's entry point. */ static CORE_ADDR ppc64_desc_entry_point (CORE_ADDR desc) @@ -894,22 +894,22 @@ ppc64_skip_trampoline_code (CORE_ADDR pc) } -/* Support for CONVERT_FROM_FUNC_PTR_ADDR(ADDR) on PPC64 Linux. +/* Support for CONVERT_FROM_FUNC_PTR_ADDR(ADDR) on PPC64 GNU/Linux. Usually a function pointer's representation is simply the address - of the function. On Linux on the 64-bit PowerPC however, a function - pointer is represented by a pointer to a TOC entry. This TOC entry - contains three words, the first word is the address of the - function, the second word is the TOC pointer (r2), and the third - word is the static chain value. Throughout GDB it is currently - assumed that a function pointer contains the address of the - function, which is not easy to fix. In addition, the conversion of - a function address to a function pointer would require allocation - of a TOC entry in the inferior's memory space, with all its - drawbacks. To be able to call C++ virtual methods in the inferior - (which are called via function pointers), find_function_addr uses - this function to get the function address from a function - pointer. */ + of the function. On GNU/Linux on the 64-bit PowerPC however, a + function pointer is represented by a pointer to a TOC entry. This + TOC entry contains three words, the first word is the address of + the function, the second word is the TOC pointer (r2), and the + third word is the static chain value. Throughout GDB it is + currently assumed that a function pointer contains the address of + the function, which is not easy to fix. In addition, the + conversion of a function address to a function pointer would + require allocation of a TOC entry in the inferior's memory space, + with all its drawbacks. To be able to call C++ virtual methods in + the inferior (which are called via function pointers), + find_function_addr uses this function to get the function address + from a function pointer. */ /* Return real function address if ADDR (a function pointer) is in the data space and is therefore a special function pointer. */ @@ -929,7 +929,7 @@ ppc64_linux_convert_from_func_ptr_addr (CORE_ADDR addr) } -/* On 64-bit PowerPC Linux, the ELF header's e_entry field is the +/* On 64-bit PowerPC GNU/Linux, the ELF header's e_entry field is the address of a function descriptor for the entry point function, not the actual entry point itself. So to find the actual address at which execution should begin, we need to fetch the function's entry @@ -1062,7 +1062,7 @@ ppc_linux_init_abi (struct gdbarch_info info, if (tdep->wordsize == 8) { - /* Handle PPC64 Linux function pointers (which are really + /* Handle PPC64 GNU/Linux function pointers (which are really function descriptors). */ set_gdbarch_convert_from_func_ptr_addr (gdbarch, ppc64_linux_convert_from_func_ptr_addr); -- 2.7.4