AIX5 changes.
This commit is contained in:
parent
b3810801a5
commit
698cb3f077
|
@ -1,3 +1,16 @@
|
|||
2000-11-07 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* ia64-tdep.c (native_find_global_pointer): New global variable.
|
||||
(struct gdbarch_tdep): Add member find_global_pointer.
|
||||
(ia64_gdbarch_init): Initialize find_global_pointer member. Also,
|
||||
tell the gdbarch machinery that we have floating point registers.
|
||||
(FIND_GLOBAL_POINTER): New macro.
|
||||
(generic_elf_find_global_pointer): Renamed from find_global_pointer.
|
||||
(find_func_descr, ia64_push_return_address): Call
|
||||
FIND_GLOBAL_POINTER instead of find_global_pointer.
|
||||
(process_note_abi_tag_sections): Enable code previously disabled
|
||||
by #if 0.
|
||||
|
||||
2000-11-07 Daniel Berlin <dberlin@redhat.com>
|
||||
|
||||
* dwarf2read.c: Revert June 5th change for caching of types,
|
||||
|
|
|
@ -30,6 +30,19 @@
|
|||
#include "elf/common.h" /* for DT_PLTGOT value */
|
||||
#include "elf-bfd.h"
|
||||
|
||||
/* Hook for determining the global pointer when calling functions in
|
||||
the inferior under AIX. The initialization code in ia64-aix-nat.c
|
||||
sets this hook to the address of a function which will find the
|
||||
global pointer for a given address.
|
||||
|
||||
The generic code which uses the dynamic section in the inferior for
|
||||
finding the global pointer is not of much use on AIX since the
|
||||
values obtained from the inferior have not been relocated. */
|
||||
|
||||
CORE_ADDR (*native_find_global_pointer) (CORE_ADDR) = 0;
|
||||
|
||||
/* An enumeration of the different IA-64 instruction types. */
|
||||
|
||||
typedef enum instruction_type
|
||||
{
|
||||
A, /* Integer ALU ; I-unit or M-unit */
|
||||
|
@ -219,9 +232,13 @@ struct gdbarch_tdep
|
|||
/* OS specific function which, given a frame address
|
||||
and register number, returns the offset to the
|
||||
given register from the start of the frame. */
|
||||
CORE_ADDR (*find_global_pointer) (CORE_ADDR);
|
||||
};
|
||||
|
||||
#define SIGCONTEXT_REGISTER_ADDRESS (gdbarch_tdep (current_gdbarch)->sigcontext_register_address)
|
||||
#define SIGCONTEXT_REGISTER_ADDRESS \
|
||||
(gdbarch_tdep (current_gdbarch)->sigcontext_register_address)
|
||||
#define FIND_GLOBAL_POINTER \
|
||||
(gdbarch_tdep (current_gdbarch)->find_global_pointer)
|
||||
|
||||
static char *
|
||||
ia64_register_name (int reg)
|
||||
|
@ -1470,7 +1487,7 @@ is_float_or_hfa_type (struct type *t)
|
|||
d_un.d_ptr value is the global pointer. */
|
||||
|
||||
static CORE_ADDR
|
||||
find_global_pointer (CORE_ADDR faddr)
|
||||
generic_elf_find_global_pointer (CORE_ADDR faddr)
|
||||
{
|
||||
struct obj_section *faddr_sect;
|
||||
|
||||
|
@ -1591,7 +1608,7 @@ find_func_descr (CORE_ADDR faddr, CORE_ADDR *fdaptr)
|
|||
fdesc = *fdaptr;
|
||||
*fdaptr += 16;
|
||||
|
||||
global_pointer = find_global_pointer (faddr);
|
||||
global_pointer = FIND_GLOBAL_POINTER (faddr);
|
||||
|
||||
if (global_pointer == 0)
|
||||
global_pointer = read_register (IA64_GR1_REGNUM);
|
||||
|
@ -1772,7 +1789,7 @@ ia64_push_arguments (int nargs, value_ptr *args, CORE_ADDR sp,
|
|||
CORE_ADDR
|
||||
ia64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
|
||||
{
|
||||
CORE_ADDR global_pointer = find_global_pointer (pc);
|
||||
CORE_ADDR global_pointer = FIND_GLOBAL_POINTER (pc);
|
||||
|
||||
if (global_pointer != 0)
|
||||
write_register (IA64_GR1_REGNUM, global_pointer);
|
||||
|
@ -1898,14 +1915,12 @@ process_note_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
|
|||
case 0 :
|
||||
*os_ident_ptr = ELFOSABI_LINUX;
|
||||
break;
|
||||
#if 0 /* FIXME: Enable after internal repository is synced with sourceware */
|
||||
case 1 :
|
||||
*os_ident_ptr = ELFOSABI_HURD;
|
||||
break;
|
||||
case 2 :
|
||||
*os_ident_ptr = ELFOSABI_SOLARIS;
|
||||
break;
|
||||
#endif
|
||||
default :
|
||||
internal_error (
|
||||
"process_note_abi_sections: unknown OS number %d", os_number);
|
||||
|
@ -1959,6 +1974,19 @@ ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
else
|
||||
tdep->sigcontext_register_address = 0;
|
||||
|
||||
/* We know that Linux won't have to resort to the native_find_global_pointer
|
||||
hackery. But that's the only one we know about so far, so if
|
||||
native_find_global_pointer is set to something non-zero, then use
|
||||
it. Otherwise fall back to using generic_elf_find_global_pointer.
|
||||
This arrangement should (in theory) allow us to cross debug Linux
|
||||
binaries from an AIX machine. */
|
||||
if (os_ident == ELFOSABI_LINUX)
|
||||
tdep->find_global_pointer = generic_elf_find_global_pointer;
|
||||
else if (native_find_global_pointer != 0)
|
||||
tdep->find_global_pointer = native_find_global_pointer;
|
||||
else
|
||||
tdep->find_global_pointer = generic_elf_find_global_pointer;
|
||||
|
||||
set_gdbarch_short_bit (gdbarch, 16);
|
||||
set_gdbarch_int_bit (gdbarch, 32);
|
||||
set_gdbarch_long_bit (gdbarch, 64);
|
||||
|
@ -1972,6 +2000,7 @@ ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
set_gdbarch_sp_regnum (gdbarch, sp_regnum);
|
||||
set_gdbarch_fp_regnum (gdbarch, fp_regnum);
|
||||
set_gdbarch_pc_regnum (gdbarch, pc_regnum);
|
||||
set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
|
||||
|
||||
set_gdbarch_register_name (gdbarch, ia64_register_name);
|
||||
set_gdbarch_register_size (gdbarch, 8);
|
||||
|
|
Loading…
Reference in New Issue