Re: rolling 5.3.92 tomorrow

Jim Blandy
2003-09-13T00:54:55Z

Andrew Cagney <ac131313@redhat.com> writes:
> > http://sources.redhat.com/gdb/bugs/378
> > ``GNU/Linux'' ``Linux kernel''
>
> The ARI's complaining about regressions in ppc-linux-tdep.c

I think this is because I forgot to apply this patch to the 60 branch,
too. I'll do so now.

2003-06-24 Jim Blandy <jimb@redhat.com>

* ppc-linux-tdep.c: More "Linux" -> "GNU/Linux".

*** gdb/ppc-linux-tdep.c.~1.36.~ 2003-06-24 18:06:07.000000000 -0500
--- gdb/ppc-linux-tdep.c 2003-06-24 18:09:02.000000000 -0500
***************
*** 731,737 ****
}

! /* If DESC is the address of a 64-bit PowerPC Linux function
descriptor, return the descriptor's entry point. */
static CORE_ADDR
ppc64_desc_entry_point (CORE_ADDR desc)
--- 731,737 ----
}

! /* 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,915 ****
}

! /* Support for CONVERT_FROM_FUNC_PTR_ADDR(ADDR) on PPC64 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. */

/* Return real function address if ADDR (a function pointer) is in the data
space and is therefore a special function pointer. */
--- 894,915 ----
}

! /* 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 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,935 ****
}

! /* On 64-bit PowerPC 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
--- 929,935 ----
}

! /* 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,1068 ****

if (tdep->wordsize == 8)
{
! /* Handle PPC64 Linux function pointers (which are really
function descriptors). */
set_gdbarch_convert_from_func_ptr_addr
(gdbarch, ppc64_linux_convert_from_func_ptr_addr);
--- 1062,1068 ----

if (tdep->wordsize == 8)
{
! /* 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);