ChangeLog:
authorUlrich Weigand <uweigand@de.ibm.com>
Sat, 3 May 2008 17:16:44 +0000 (17:16 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Sat, 3 May 2008 17:16:44 +0000 (17:16 +0000)
* Makefile.in (ppc_linux_tdep_h): New macro.
(powerpc_32l_c, powerpc_altivec32_c, powerpc_altivec32l_c): Likewise.
(powerpc_64l_c, powerpc_altivec64_c, powerpc_altivec64l_c): Likewise.
(powerpc_e500l_c): Likewise.
(ppc-linux-nat.o): Update dependencies.
(ppc-linux-tdep.o): Update dependencies.
(rs6000-tdep.o): Update dependencies.

* ppc-tdep.h (ppc_linux_memory_remove_breakpoint): Remove.
(ppc_linux_svr4_fetch_link_map_offsets): Remove.
(ppc_linux_gregset, ppc_linux_fpregset): Move to ppc-linux-tdep.h
(ppc_supply_reg, ppc_collect_reg): Add prototypes.
(tdesc_powerpc_e500): Remove.

* rs6000.c: Include "features/rs6000/powerpc-altivec32.c"
and "features/rs6000/powerpc-altivec64.c".
(ppc_supply_reg, ppc_collect_reg): Make global.
(variants): Use tdesc_powerpc_32 for "powerpc" and
tdesc_powerpc_altivec64 for "powerpc64".
(_initialize_rs6000_tdep): Initialize AltiVec descriptions.

* ppc-linux-tdep.h: New file.

* ppc-linux-tdep.c: Include "ppc-linux-tdep.c".
Include "features/rs6000/powerpc-32l.c".
Include "features/rs6000/powerpc-altivec32l.c".
Include "features/rs6000/powerpc-64l.c".
Include "features/rs6000/powerpc-altivec64l.c".
Include "features/rs6000/powerpc-e500l.c".
(ppc_linux_supply_gregset): New function.
(ppc_linux_collect_gregset): Handle orig_r3 and trap registers.
(ppc32_linux_gregset): Use ppc_linux_supply_gregset.
(ppc64_linux_gregset): Likewise.
(ppc_linux_sigtramp_cache): Handle orig_r3 and trap registers.
(ppc_linux_trap_reg_p): New function.
(ppc_linux_write_pc): New function.
(ppc_linux_core_read_description): New function.
(ppc_linux_init_abi): Install ppc_linux_write_pc and
ppc_linux_core_read_description.  Install orig_r3 and trap
registers if present in the target description.
(_initialize_ppc_linux_tdep): Initialize Linux target descriptions.

* ppc-linux-nat.c: Include "ppc-linux-tdep.h".
(PT_ORIG_R3, PT_TRAP): Define if necessary.
(ppc_register_u_addr): Handle orig_r3 and trap registers.
(fetch_ppc_registers): Likewise.
(store_ppc_registers): Likewise.
(store_register): Likewise.
(ppc_linux_read_description): Check whether AltiVec is supported.
Check whether inferior is 32-bit or 64-bit.  Return the appropriate
Linux target description.

* features/Makefile (WHICH): Use rs6000/powerpc-32l and
rs6000/powerpc-altivec32l instead of rs6000/powerpc-32.
Use rs6000/powerpc-64l and rs6000/powerpc-altivec64l instead
of rs6000/powerpc-64.  Use rs6000/powerpc-e500l instead of
rs6000/powerpc-e500.  Update -expedite variables accordingly.

* features/rs6000/power-spe.xml: Use regnum 73 for "acc".
* features/rs6000/powerpc-32.xml: Do not include power-altivec.xml.
* features/rs6000/powerpc-64.xml: Do not include power-altivec.xml.
* features/rs6000/powerpc-e500.c: Regenerate.
* features/rs6000/powerpc-32.c: Regenerate.
* features/rs6000/powerpc-64.c: Regenerate.

* features/rs6000/power-linux.xml: New file.
* features/rs6000/power64-linux.xml: New file.
* features/rs6000/powerpc-32l.xml: New file.
* features/rs6000/powerpc-altivec32l.xml: New file.
* features/rs6000/powerpc-64l.xml: New file.
* features/rs6000/powerpc-altivec64l.xml: New file.
* features/rs6000/powerpc-e500l.xml: New file.
* features/rs6000/powerpc-32l.c: New (generated) file.
* features/rs6000/powerpc-altivec32l.c: New (generated) file.
* features/rs6000/powerpc-64l.c: New (generated) file.
* features/rs6000/powerpc-altivec64l.c: New (generated) file.
* features/rs6000/powerpc-e500l.xml: New (generated) file.

* regformats/reg-ppc.dat: Remove.
* regformats/reg-ppc64.dat: Remove.
* regformats/rs6000/powerpc-32.dat: Remove.
* regformats/rs6000/powerpc-64.dat: Remove.
* regformats/rs6000/powerpc-e500.dat: Remove.
* regformats/rs6000/powerpc-32l.dat: New (generated) file.
* regformats/rs6000/powerpc-altivec32l.dat: New (generated) file.
* regformats/rs6000/powerpc-64l.dat: New (generated) file.
* regformats/rs6000/powerpc-altivec64l.dat: New (generated) file.
* regformats/rs6000/powerpc-e500l.dat: New (generated) file.

gdbserver/ChangeLog:

* configure.srv (powerpc*-*-linux*): Set srv_regobj to
powerpc-32l.o, powerpc-altivec32l.o, powerpc-e500l.o,
powerpc-64l.o, and powerpc-altivec64l.o.
Remove rs6000/powerpc-32.xml, rs6000/powerpc-64.xml, and
rs6000/powerpc-e500.xml; add rs6000/powerpc-32l.xml,
rs6000/powerpc-altivec32l.xml, rs6000/powerpc-e500l.xml,
rs6000/powerpc-64l.xml, rs6000/powerpc-altivec64l.xml,
rs6000/power-linux.xml, and rs6000/power64-linux.xml
to srv_xmlfiles.

* Makefile.in (reg-ppc.o, reg-ppc.c): Remove, replace by ...
(powerpc-32l.o, powerpc-32l.c): ... these new rules.
(powerpc-32.o, powerpc-32.c): Remove, replace by ...
(powerpc-altivec32l.o, powerpc-altivec32l.c): ... these new rules.
(powerpc-e500.o, powerpc-e500.c): Remove, replace by ...
(powerpc-e500l.o, powerpc-e500l.c): ... these new rules.
(reg-ppc64.o, reg-ppc64.c): Remove, replace by ...
(powerpc-64l.o, powerpc-64l.c): ... these new rules.
(powerpc-64.o, powerpc-64.c): Remove, replace by ...
(powerpc-altivec64l.o, powerpc-altivec64l.c): ... these new rules.
(clean): Update.

* linux-ppc-low.c (init_registers_ppc): Remove, replace by ...
(init_registers_powerpc_32l): ... this new prototype.
(init_registers_powerpc_32): Remove, replace by ...
(init_registers_powerpc_altivec32l): ... this new prototype.
(init_registers_powerpc_e500): Remove, replace by ...
(init_registers_powerpc_e500l): ... this new prototype.
(init_registers_ppc64): Remove, replace by ...
(init_registers_powerpc_64l): ... this new prototype.
(init_registers_powerpc_64): Remove, replace by ...
(init_registers_powerpc_altivec64l): ... this new prototype.
(ppc_num_regs): Set to 73.
(PT_ORIG_R3, PT_TRAP): Define if necessary.
(ppc_regmap, ppc_regmap_e500): Add values for orig_r3 and trap.
(ppc_cannot_store_register): Handle orig_r3 and trap.
(ppc_arch_setup): Update init_registers_... calls.
(ppc_fill_gregset): Handle orig_r3 and trap.

* inferiors.c (clear_inferiors): Reset current_inferior.

40 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/features/Makefile
gdb/features/rs6000/power-linux.xml [new file with mode: 0644]
gdb/features/rs6000/power-spe.xml
gdb/features/rs6000/power64-linux.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-32.c
gdb/features/rs6000/powerpc-32.xml
gdb/features/rs6000/powerpc-32l.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-32l.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-64.c
gdb/features/rs6000/powerpc-64.xml
gdb/features/rs6000/powerpc-64l.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-64l.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec32.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec32.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec32l.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec32l.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec64.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec64.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec64l.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-altivec64l.xml [new file with mode: 0644]
gdb/features/rs6000/powerpc-e500.c
gdb/features/rs6000/powerpc-e500l.c [new file with mode: 0644]
gdb/features/rs6000/powerpc-e500l.xml [new file with mode: 0644]
gdb/gdbserver/ChangeLog
gdb/gdbserver/Makefile.in
gdb/gdbserver/configure.srv
gdb/gdbserver/inferiors.c
gdb/gdbserver/linux-ppc-low.c
gdb/ppc-linux-nat.c
gdb/ppc-linux-tdep.c
gdb/ppc-linux-tdep.h [new file with mode: 0644]
gdb/ppc-tdep.h
gdb/regformats/rs6000/powerpc-32l.dat [moved from gdb/regformats/reg-ppc.dat with 81% similarity]
gdb/regformats/rs6000/powerpc-64l.dat [moved from gdb/regformats/reg-ppc64.dat with 81% similarity]
gdb/regformats/rs6000/powerpc-altivec32l.dat [moved from gdb/regformats/rs6000/powerpc-32.dat with 85% similarity]
gdb/regformats/rs6000/powerpc-altivec64l.dat [moved from gdb/regformats/rs6000/powerpc-64.dat with 85% similarity]
gdb/regformats/rs6000/powerpc-e500l.dat [moved from gdb/regformats/rs6000/powerpc-e500.dat with 82% similarity]
gdb/rs6000-tdep.c

index 7aed927..a15345a 100644 (file)
@@ -1,3 +1,94 @@
+2008-05-03  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * Makefile.in (ppc_linux_tdep_h): New macro.
+       (powerpc_32l_c, powerpc_altivec32_c, powerpc_altivec32l_c): Likewise.
+       (powerpc_64l_c, powerpc_altivec64_c, powerpc_altivec64l_c): Likewise.
+       (powerpc_e500l_c): Likewise.
+       (ppc-linux-nat.o): Update dependencies.
+       (ppc-linux-tdep.o): Update dependencies.
+       (rs6000-tdep.o): Update dependencies.
+
+       * ppc-tdep.h (ppc_linux_memory_remove_breakpoint): Remove.
+       (ppc_linux_svr4_fetch_link_map_offsets): Remove.
+       (ppc_linux_gregset, ppc_linux_fpregset): Move to ppc-linux-tdep.h
+       (ppc_supply_reg, ppc_collect_reg): Add prototypes.
+       (tdesc_powerpc_e500): Remove.
+
+       * rs6000.c: Include "features/rs6000/powerpc-altivec32.c"
+       and "features/rs6000/powerpc-altivec64.c".
+       (ppc_supply_reg, ppc_collect_reg): Make global.
+       (variants): Use tdesc_powerpc_32 for "powerpc" and
+       tdesc_powerpc_altivec64 for "powerpc64".
+       (_initialize_rs6000_tdep): Initialize AltiVec descriptions.
+
+       * ppc-linux-tdep.h: New file.
+
+       * ppc-linux-tdep.c: Include "ppc-linux-tdep.c".
+       Include "features/rs6000/powerpc-32l.c".
+       Include "features/rs6000/powerpc-altivec32l.c".
+       Include "features/rs6000/powerpc-64l.c".
+       Include "features/rs6000/powerpc-altivec64l.c".
+       Include "features/rs6000/powerpc-e500l.c".
+       (ppc_linux_supply_gregset): New function.
+       (ppc_linux_collect_gregset): Handle orig_r3 and trap registers.
+       (ppc32_linux_gregset): Use ppc_linux_supply_gregset.
+       (ppc64_linux_gregset): Likewise.
+       (ppc_linux_sigtramp_cache): Handle orig_r3 and trap registers.
+       (ppc_linux_trap_reg_p): New function.
+       (ppc_linux_write_pc): New function.
+       (ppc_linux_core_read_description): New function.
+       (ppc_linux_init_abi): Install ppc_linux_write_pc and
+       ppc_linux_core_read_description.  Install orig_r3 and trap
+       registers if present in the target description.
+       (_initialize_ppc_linux_tdep): Initialize Linux target descriptions.
+
+       * ppc-linux-nat.c: Include "ppc-linux-tdep.h".
+       (PT_ORIG_R3, PT_TRAP): Define if necessary.
+       (ppc_register_u_addr): Handle orig_r3 and trap registers.
+       (fetch_ppc_registers): Likewise.
+       (store_ppc_registers): Likewise.
+       (store_register): Likewise.
+       (ppc_linux_read_description): Check whether AltiVec is supported.
+       Check whether inferior is 32-bit or 64-bit.  Return the appropriate
+       Linux target description.
+
+       * features/Makefile (WHICH): Use rs6000/powerpc-32l and
+       rs6000/powerpc-altivec32l instead of rs6000/powerpc-32.
+       Use rs6000/powerpc-64l and rs6000/powerpc-altivec64l instead
+       of rs6000/powerpc-64.  Use rs6000/powerpc-e500l instead of
+       rs6000/powerpc-e500.  Update -expedite variables accordingly.
+
+       * features/rs6000/power-spe.xml: Use regnum 73 for "acc".
+       * features/rs6000/powerpc-32.xml: Do not include power-altivec.xml.
+       * features/rs6000/powerpc-64.xml: Do not include power-altivec.xml.
+       * features/rs6000/powerpc-e500.c: Regenerate.
+       * features/rs6000/powerpc-32.c: Regenerate.
+       * features/rs6000/powerpc-64.c: Regenerate.
+
+       * features/rs6000/power-linux.xml: New file.
+       * features/rs6000/power64-linux.xml: New file.
+       * features/rs6000/powerpc-32l.xml: New file.
+       * features/rs6000/powerpc-altivec32l.xml: New file.
+       * features/rs6000/powerpc-64l.xml: New file.
+       * features/rs6000/powerpc-altivec64l.xml: New file.
+       * features/rs6000/powerpc-e500l.xml: New file.
+       * features/rs6000/powerpc-32l.c: New (generated) file.
+       * features/rs6000/powerpc-altivec32l.c: New (generated) file.
+       * features/rs6000/powerpc-64l.c: New (generated) file.
+       * features/rs6000/powerpc-altivec64l.c: New (generated) file.
+       * features/rs6000/powerpc-e500l.xml: New (generated) file.
+
+       * regformats/reg-ppc.dat: Remove.
+       * regformats/reg-ppc64.dat: Remove.
+       * regformats/rs6000/powerpc-32.dat: Remove.
+       * regformats/rs6000/powerpc-64.dat: Remove.
+       * regformats/rs6000/powerpc-e500.dat: Remove.
+       * regformats/rs6000/powerpc-32l.dat: New (generated) file.
+       * regformats/rs6000/powerpc-altivec32l.dat: New (generated) file.
+       * regformats/rs6000/powerpc-64l.dat: New (generated) file.
+       * regformats/rs6000/powerpc-altivec64l.dat: New (generated) file.
+       * regformats/rs6000/powerpc-e500l.dat: New (generated) file.
+
 2008-05-03  Pedro Alves  <pedro@codesourcery.com>
 
        * thread.c (delete_thread): Call observer_notify_thread_exit.
index 269ccf7..d120bd0 100644 (file)
@@ -859,6 +859,7 @@ p_lang_h = p-lang.h
 ppcnbsd_tdep_h = ppcnbsd-tdep.h
 ppcobsd_tdep_h = ppcobsd-tdep.h
 ppc_tdep_h = ppc-tdep.h
+ppc_linux_tdep_h = ppc-linux-tdep.h
 proc_utils_h = proc-utils.h
 prologue_value_h = prologue-value.h
 regcache_h = regcache.h
@@ -970,6 +971,9 @@ arm_with_iwmmxt_c = $(srcdir)/features/arm-with-iwmmxt.c $(features_headers)
 mips_linux_c = $(srcdir)/features/mips-linux.c $(features_headers)
 mips64_linux_c = $(srcdir)/features/mips64-linux.c $(features_headers)
 powerpc_32_c = $(srcdir)/features/rs6000/powerpc-32.c $(features_headers)
+powerpc_32l_c = $(srcdir)/features/rs6000/powerpc-32l.c $(features_headers)
+powerpc_altivec32_c = $(srcdir)/features/rs6000/powerpc-altivec32.c $(features_headers)
+powerpc_altivec32l_c = $(srcdir)/features/rs6000/powerpc-altivec32l.c $(features_headers)
 powerpc_403_c = $(srcdir)/features/rs6000/powerpc-403.c $(features_headers)
 powerpc_403gc_c = $(srcdir)/features/rs6000/powerpc-403gc.c $(features_headers)
 powerpc_505_c = $(srcdir)/features/rs6000/powerpc-505.c $(features_headers)
@@ -978,10 +982,14 @@ powerpc_602_c = $(srcdir)/features/rs6000/powerpc-602.c $(features_headers)
 powerpc_603_c = $(srcdir)/features/rs6000/powerpc-603.c $(features_headers)
 powerpc_604_c = $(srcdir)/features/rs6000/powerpc-604.c $(features_headers)
 powerpc_64_c = $(srcdir)/features/rs6000/powerpc-64.c $(features_headers)
+powerpc_64l_c = $(srcdir)/features/rs6000/powerpc-64l.c $(features_headers)
+powerpc_altivec64_c = $(srcdir)/features/rs6000/powerpc-altivec64.c $(features_headers)
+powerpc_altivec64l_c = $(srcdir)/features/rs6000/powerpc-altivec64l.c $(features_headers)
 powerpc_7400_c = $(srcdir)/features/rs6000/powerpc-7400.c $(features_headers)
 powerpc_750_c = $(srcdir)/features/rs6000/powerpc-750.c $(features_headers)
 powerpc_860_c = $(srcdir)/features/rs6000/powerpc-860.c $(features_headers)
 powerpc_e500_c = $(srcdir)/features/rs6000/powerpc-e500.c $(features_headers)
+powerpc_e500l_c = $(srcdir)/features/rs6000/powerpc-e500l.c $(features_headers)
 rs6000_c = $(srcdir)/features/rs6000/rs6000.c $(features_headers)
 
 # Header files that need to have srcdir added.  Note that in the cases
@@ -2592,13 +2600,15 @@ ppcbug-rom.o: ppcbug-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \
        $(serial_h) $(regcache_h)
 ppc-linux-nat.o: ppc-linux-nat.c $(defs_h) $(gdb_string_h) $(frame_h) \
        $(inferior_h) $(gdbcore_h) $(regcache_h) $(gdb_assert_h) \
-       $(gdb_wait_h) $(gregset_h) $(ppc_tdep_h) $(target_h) \
-       $(linux_nat_h)
+       $(gdb_wait_h) $(gregset_h) $(ppc_tdep_h) $(ppc_linux_tdep_h) \
+       $(target_h) $(linux_nat_h)
 ppc-linux-tdep.o: ppc-linux-tdep.c $(defs_h) $(frame_h) $(inferior_h) \
        $(symtab_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(symfile_h) \
        $(objfiles_h) $(regcache_h) $(value_h) $(osabi_h) $(regset_h) \
-       $(solib_svr4_h) $(ppc_tdep_h) $(trad_frame_h) $(frame_unwind_h) \
-       $(tramp_frame_h)
+       $(solib_svr4_h) $(ppc_tdep_h) $(ppc_linux_tdep_h) $(trad_frame_h) \
+       $(frame_unwind_h) $(tramp_frame_h) \
+       $(powerpc_32l_c) $(powerpc_altivec32l_c) $(powerpc_e500l_c) \
+       $(powerpc_64l_c) $(powerpc_altivec64l_c)
 ppcnbsd-nat.o: ppcnbsd-nat.c $(defs_h) $(inferior_h) $(gdb_assert_h) \
        $(gdbcore_h) $(regcache_h) $(bsd_kvm_h) $(ppc_tdep_h) \
        $(ppcnbsd_tdep_h) $(inf_ptrace_h)
@@ -2684,10 +2694,11 @@ rs6000-tdep.o: rs6000-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \
        $(ppc_tdep_h) $(gdb_assert_h) $(dis_asm_h) $(trad_frame_h) \
        $(frame_unwind_h) $(frame_base_h) $(rs6000_tdep_h) $(dwarf2_frame_h) \
        $(target_descriptions) $(user_regs_h) $(elf_ppc_h) \
-       $(powerpc_32_c) $(powerpc_403_c) $(powerpc_403gc_c) $(powerpc_505_c) \
-       $(powerpc_601_c) $(powerpc_602_c) $(powerpc_603_c) $(powerpc_604_c) \
-       $(powerpc_64_c) $(powerpc_7400_c) $(powerpc_750_c) $(powerpc_860_c) \
-       $(powerpc_e500_c) $(rs6000_c)
+       $(powerpc_32_c) $(powerpc_altivec32_c) $(powerpc_403_c) \
+       $(powerpc_403gc_c) $(powerpc_505_c)  $(powerpc_601_c) \
+       $(powerpc_602_c) $(powerpc_603_c) $(powerpc_604_c) \
+       $(powerpc_64_c) $(powerpc_altivec64_c) $(powerpc_7400_c) \
+       $(powerpc_750_c) $(powerpc_860_c) $(powerpc_e500_c) $(rs6000_c)
 rs6000-aix-tdep.o: rs6000-aix-tdep.c $(defs_h) $(gdb_string_h) $(osabi_h) \
        $(regcache_h) $(regset_h) $(rs6000_tdep_h) $(ppc_tdep_h)
 s390-nat.o: s390-nat.c $(defs_h) $(regcache_h) $(inferior_h) \
index cedc57a..378f764 100644 (file)
 #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
 
 WHICH = arm-with-iwmmxt mips-linux mips64-linux \
-       rs6000/powerpc-32 rs6000/powerpc-e500 rs6000/powerpc-64
+       rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
+       rs6000/powerpc-64l rs6000/powerpc-altivec64l
 
 # Record which registers should be sent to GDB by default after stop.
 arm-with-iwmmxt-expedite = r11,sp,pc
 mips-linux-expedite = r29,pc
 mips64-linux-expedite = r29,pc
-rs6000/powerpc-32-expedite = r1,pc
-rs6000/powerpc-e500-expedite = r1,pc
-rs6000/powerpc-64-expedite = r1,pc
+rs6000/powerpc-32l-expedite = r1,pc
+rs6000/powerpc-altivec32l-expedite = r1,pc
+rs6000/powerpc-e500l-expedite = r1,pc
+rs6000/powerpc-64l-expedite = r1,pc
+rs6000/powerpc-altivec64l-expedite = r1,pc
 
 XSLTPROC = xsltproc
 outdir = ../regformats
diff --git a/gdb/features/rs6000/power-linux.xml b/gdb/features/rs6000/power-linux.xml
new file mode 100644 (file)
index 0000000..1cb4517
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.power.linux">
+  <reg name="orig_r3" bitsize="32" regnum="71"/>
+  <reg name="trap" bitsize="32"/>
+</feature>
index d9488c0..ac76fa1 100644 (file)
@@ -40,6 +40,6 @@
   <reg name="ev30h" bitsize="32"/>
   <reg name="ev31h" bitsize="32"/>
 
-  <reg name="acc" bitsize="64" regnum="71"/>
+  <reg name="acc" bitsize="64" regnum="73"/>
   <reg name="spefscr" bitsize="32"/>
 </feature>
diff --git a/gdb/features/rs6000/power64-linux.xml b/gdb/features/rs6000/power64-linux.xml
new file mode 100644 (file)
index 0000000..52c0db6
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.power.linux">
+  <reg name="orig_r3" bitsize="64" regnum="71"/>
+  <reg name="trap" bitsize="64"/>
+</feature>
index 4c0ffbb..6f9be6b 100644 (file)
@@ -89,76 +89,5 @@ initialize_tdesc_powerpc_32 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  type = init_vector_type (field_type, 4);
-  TYPE_NAME (type) = xstrdup ("v4f");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int32");
-  type = init_vector_type (field_type, 4);
-  TYPE_NAME (type) = xstrdup ("v4i32");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int16");
-  type = init_vector_type (field_type, 8);
-  TYPE_NAME (type) = xstrdup ("v8i16");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int8");
-  type = init_vector_type (field_type, 16);
-  TYPE_NAME (type) = xstrdup ("v16i8");
-  tdesc_record_type (feature, type);
-
-  type = init_composite_type (NULL, TYPE_CODE_UNION);
-  TYPE_NAME (type) = xstrdup ("vec128");
-  field_type = tdesc_named_type (feature, "uint128");
-  append_composite_type_field (type, xstrdup ("uint128"), field_type);
-  field_type = tdesc_named_type (feature, "v4f");
-  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
-  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
-  tdesc_record_type (feature, type);
-
-  tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr1", 72, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr2", 73, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr3", 74, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr4", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr5", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr6", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr7", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr8", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr9", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr10", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr11", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr12", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr13", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr14", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr15", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr16", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr17", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr18", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr19", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr20", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr21", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr22", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr23", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr24", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr25", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr26", 97, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr27", 98, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr28", 99, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr29", 100, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr30", 101, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr31", 102, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
-  tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
-
   tdesc_powerpc_32 = result;
 }
index 3558c9c..697eba7 100644 (file)
@@ -13,5 +13,4 @@
   <architecture>powerpc:common</architecture>
   <xi:include href="power-core.xml"/>
   <xi:include href="power-fpu.xml"/>
-  <xi:include href="power-altivec.xml"/>
 </target>
diff --git a/gdb/features/rs6000/powerpc-32l.c b/gdb/features/rs6000/powerpc-32l.c
new file mode 100644 (file)
index 0000000..97e6bda
--- /dev/null
@@ -0,0 +1,97 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-32l.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_32l;
+static void
+initialize_tdesc_powerpc_32l (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
+
+  tdesc_powerpc_32l = result;
+}
diff --git a/gdb/features/rs6000/powerpc-32l.xml b/gdb/features/rs6000/powerpc-32l.xml
new file mode 100644 (file)
index 0000000..079c9d5
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes Linux-only special "registers".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common</architecture>
+  <xi:include href="power-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power-linux.xml"/>
+</target>
index 1a45672..afbaf44 100644 (file)
@@ -89,76 +89,5 @@ initialize_tdesc_powerpc_64 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  type = init_vector_type (field_type, 4);
-  TYPE_NAME (type) = xstrdup ("v4f");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int32");
-  type = init_vector_type (field_type, 4);
-  TYPE_NAME (type) = xstrdup ("v4i32");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int16");
-  type = init_vector_type (field_type, 8);
-  TYPE_NAME (type) = xstrdup ("v8i16");
-  tdesc_record_type (feature, type);
-
-  field_type = tdesc_named_type (feature, "int8");
-  type = init_vector_type (field_type, 16);
-  TYPE_NAME (type) = xstrdup ("v16i8");
-  tdesc_record_type (feature, type);
-
-  type = init_composite_type (NULL, TYPE_CODE_UNION);
-  TYPE_NAME (type) = xstrdup ("vec128");
-  field_type = tdesc_named_type (feature, "uint128");
-  append_composite_type_field (type, xstrdup ("uint128"), field_type);
-  field_type = tdesc_named_type (feature, "v4f");
-  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
-  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
-  tdesc_record_type (feature, type);
-
-  tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr1", 72, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr2", 73, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr3", 74, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr4", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr5", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr6", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr7", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr8", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr9", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr10", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr11", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr12", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr13", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr14", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr15", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr16", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr17", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr18", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr19", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr20", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr21", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr22", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr23", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr24", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr25", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr26", 97, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr27", 98, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr28", 99, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr29", 100, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr30", 101, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr31", 102, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
-  tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
-
   tdesc_powerpc_64 = result;
 }
index 3c9eba1..15ee85e 100644 (file)
@@ -13,5 +13,4 @@
   <architecture>powerpc:common64</architecture>
   <xi:include href="power64-core.xml"/>
   <xi:include href="power-fpu.xml"/>
-  <xi:include href="power-altivec.xml"/>
 </target>
diff --git a/gdb/features/rs6000/powerpc-64l.c b/gdb/features/rs6000/powerpc-64l.c
new file mode 100644 (file)
index 0000000..990c425
--- /dev/null
@@ -0,0 +1,97 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-64l.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_64l;
+static void
+initialize_tdesc_powerpc_64l (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
+
+  tdesc_powerpc_64l = result;
+}
diff --git a/gdb/features/rs6000/powerpc-64l.xml b/gdb/features/rs6000/powerpc-64l.xml
new file mode 100644 (file)
index 0000000..af81800
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes Linux-only special "registers".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common64</architecture>
+  <xi:include href="power64-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power64-linux.xml"/>
+</target>
diff --git a/gdb/features/rs6000/powerpc-altivec32.c b/gdb/features/rs6000/powerpc-altivec32.c
new file mode 100644 (file)
index 0000000..ff2aefa
--- /dev/null
@@ -0,0 +1,164 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-altivec32.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_altivec32;
+static void
+initialize_tdesc_powerpc_altivec32 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4f");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int32");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4i32");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int16");
+  type = init_vector_type (field_type, 8);
+  TYPE_NAME (type) = xstrdup ("v8i16");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int8");
+  type = init_vector_type (field_type, 16);
+  TYPE_NAME (type) = xstrdup ("v16i8");
+  tdesc_record_type (feature, type);
+
+  type = init_composite_type (NULL, TYPE_CODE_UNION);
+  TYPE_NAME (type) = xstrdup ("vec128");
+  field_type = tdesc_named_type (feature, "uint128");
+  append_composite_type_field (type, xstrdup ("uint128"), field_type);
+  field_type = tdesc_named_type (feature, "v4f");
+  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
+  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
+  tdesc_record_type (feature, type);
+
+  tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr1", 72, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr2", 73, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr3", 74, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr4", 75, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr5", 76, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr6", 77, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr7", 78, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr8", 79, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr9", 80, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr10", 81, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr11", 82, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr12", 83, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr13", 84, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr14", 85, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr15", 86, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr16", 87, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr17", 88, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr18", 89, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr19", 90, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr20", 91, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr21", 92, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr22", 93, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr23", 94, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr24", 95, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr25", 96, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr26", 97, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr27", 98, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr28", 99, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr29", 100, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr30", 101, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr31", 102, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
+  tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
+
+  tdesc_powerpc_altivec32 = result;
+}
diff --git a/gdb/features/rs6000/powerpc-altivec32.xml b/gdb/features/rs6000/powerpc-altivec32.xml
new file mode 100644 (file)
index 0000000..c8491db
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes AltiVec vector registers.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common</architecture>
+  <xi:include href="power-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power-altivec.xml"/>
+</target>
diff --git a/gdb/features/rs6000/powerpc-altivec32l.c b/gdb/features/rs6000/powerpc-altivec32l.c
new file mode 100644 (file)
index 0000000..c139c60
--- /dev/null
@@ -0,0 +1,168 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-altivec32l.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_altivec32l;
+static void
+initialize_tdesc_powerpc_altivec32l (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4f");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int32");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4i32");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int16");
+  type = init_vector_type (field_type, 8);
+  TYPE_NAME (type) = xstrdup ("v8i16");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int8");
+  type = init_vector_type (field_type, 16);
+  TYPE_NAME (type) = xstrdup ("v16i8");
+  tdesc_record_type (feature, type);
+
+  type = init_composite_type (NULL, TYPE_CODE_UNION);
+  TYPE_NAME (type) = xstrdup ("vec128");
+  field_type = tdesc_named_type (feature, "uint128");
+  append_composite_type_field (type, xstrdup ("uint128"), field_type);
+  field_type = tdesc_named_type (feature, "v4f");
+  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
+  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
+  tdesc_record_type (feature, type);
+
+  tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr1", 74, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr2", 75, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr3", 76, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr4", 77, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr5", 78, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr6", 79, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr7", 80, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr8", 81, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr9", 82, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr10", 83, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr11", 84, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr12", 85, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr13", 86, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr14", 87, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr15", 88, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr16", 89, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr17", 90, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr18", 91, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr19", 92, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr20", 93, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr21", 94, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr22", 95, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr23", 96, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr24", 97, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr25", 98, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr26", 99, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr27", 100, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr28", 101, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr29", 102, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr30", 103, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr31", 104, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
+  tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
+
+  tdesc_powerpc_altivec32l = result;
+}
diff --git a/gdb/features/rs6000/powerpc-altivec32l.xml b/gdb/features/rs6000/powerpc-altivec32l.xml
new file mode 100644 (file)
index 0000000..d0bde9b
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes Linux-only special "registers" and AltiVec
+     vector registers.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common</architecture>
+  <xi:include href="power-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power-linux.xml"/>
+  <xi:include href="power-altivec.xml"/>
+</target>
diff --git a/gdb/features/rs6000/powerpc-altivec64.c b/gdb/features/rs6000/powerpc-altivec64.c
new file mode 100644 (file)
index 0000000..404a92d
--- /dev/null
@@ -0,0 +1,164 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-altivec64.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_altivec64;
+static void
+initialize_tdesc_powerpc_altivec64 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4f");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int32");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4i32");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int16");
+  type = init_vector_type (field_type, 8);
+  TYPE_NAME (type) = xstrdup ("v8i16");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int8");
+  type = init_vector_type (field_type, 16);
+  TYPE_NAME (type) = xstrdup ("v16i8");
+  tdesc_record_type (feature, type);
+
+  type = init_composite_type (NULL, TYPE_CODE_UNION);
+  TYPE_NAME (type) = xstrdup ("vec128");
+  field_type = tdesc_named_type (feature, "uint128");
+  append_composite_type_field (type, xstrdup ("uint128"), field_type);
+  field_type = tdesc_named_type (feature, "v4f");
+  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
+  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
+  tdesc_record_type (feature, type);
+
+  tdesc_create_reg (feature, "vr0", 71, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr1", 72, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr2", 73, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr3", 74, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr4", 75, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr5", 76, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr6", 77, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr7", 78, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr8", 79, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr9", 80, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr10", 81, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr11", 82, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr12", 83, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr13", 84, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr14", 85, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr15", 86, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr16", 87, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr17", 88, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr18", 89, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr19", 90, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr20", 91, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr21", 92, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr22", 93, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr23", 94, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr24", 95, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr25", 96, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr26", 97, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr27", 98, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr28", 99, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr29", 100, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr30", 101, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr31", 102, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
+  tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
+
+  tdesc_powerpc_altivec64 = result;
+}
diff --git a/gdb/features/rs6000/powerpc-altivec64.xml b/gdb/features/rs6000/powerpc-altivec64.xml
new file mode 100644 (file)
index 0000000..173afe1
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes AltiVec vector registers.   -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common64</architecture>
+  <xi:include href="power64-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power-altivec.xml"/>
+</target>
diff --git a/gdb/features/rs6000/powerpc-altivec64l.c b/gdb/features/rs6000/powerpc-altivec64l.c
new file mode 100644 (file)
index 0000000..a5d4be7
--- /dev/null
@@ -0,0 +1,168 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-altivec64l.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_altivec64l;
+static void
+initialize_tdesc_powerpc_altivec64l (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4f");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int32");
+  type = init_vector_type (field_type, 4);
+  TYPE_NAME (type) = xstrdup ("v4i32");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int16");
+  type = init_vector_type (field_type, 8);
+  TYPE_NAME (type) = xstrdup ("v8i16");
+  tdesc_record_type (feature, type);
+
+  field_type = tdesc_named_type (feature, "int8");
+  type = init_vector_type (field_type, 16);
+  TYPE_NAME (type) = xstrdup ("v16i8");
+  tdesc_record_type (feature, type);
+
+  type = init_composite_type (NULL, TYPE_CODE_UNION);
+  TYPE_NAME (type) = xstrdup ("vec128");
+  field_type = tdesc_named_type (feature, "uint128");
+  append_composite_type_field (type, xstrdup ("uint128"), field_type);
+  field_type = tdesc_named_type (feature, "v4f");
+  append_composite_type_field (type, xstrdup ("v4_float"), field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  append_composite_type_field (type, xstrdup ("v4_int32"), field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  append_composite_type_field (type, xstrdup ("v8_int16"), field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  append_composite_type_field (type, xstrdup ("v16_int8"), field_type);
+  TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
+  tdesc_record_type (feature, type);
+
+  tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr1", 74, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr2", 75, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr3", 76, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr4", 77, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr5", 78, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr6", 79, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr7", 80, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr8", 81, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr9", 82, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr10", 83, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr11", 84, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr12", 85, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr13", 86, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr14", 87, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr15", 88, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr16", 89, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr17", 90, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr18", 91, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr19", 92, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr20", 93, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr21", 94, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr22", 95, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr23", 96, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr24", 97, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr25", 98, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr26", 99, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr27", 100, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr28", 101, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr29", 102, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr30", 103, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vr31", 104, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
+  tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
+
+  tdesc_powerpc_altivec64l = result;
+}
diff --git a/gdb/features/rs6000/powerpc-altivec64l.xml b/gdb/features/rs6000/powerpc-altivec64l.xml
new file mode 100644 (file)
index 0000000..86720b6
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
+     view of the PowerPC.  Includes Linux-only special "registers" and AltiVec
+     vector registers.   -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:common64</architecture>
+  <xi:include href="power64-core.xml"/>
+  <xi:include href="power-fpu.xml"/>
+  <xi:include href="power64-linux.xml"/>
+  <xi:include href="power-altivec.xml"/>
+</target>
index df409bb..968915f 100644 (file)
@@ -87,8 +87,8 @@ initialize_tdesc_powerpc_e500 (void)
   tdesc_create_reg (feature, "ev29h", 61, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev30h", 62, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev31h", 63, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "acc", 71, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "spefscr", 72, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "acc", 73, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "spefscr", 74, 1, NULL, 32, "int");
 
   tdesc_powerpc_e500 = result;
 }
diff --git a/gdb/features/rs6000/powerpc-e500l.c b/gdb/features/rs6000/powerpc-e500l.c
new file mode 100644 (file)
index 0000000..0c85e6f
--- /dev/null
@@ -0,0 +1,98 @@
+/* THIS FILE IS GENERATED.  Original: powerpc-e500l.xml */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_powerpc_e500l;
+static void
+initialize_tdesc_powerpc_e500l (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pc", 64, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "msr", 65, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "lr", 67, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.spe");
+  tdesc_create_reg (feature, "ev0h", 32, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev1h", 33, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev2h", 34, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev3h", 35, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev4h", 36, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev5h", 37, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev6h", 38, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev7h", 39, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev8h", 40, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev9h", 41, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev10h", 42, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev11h", 43, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev12h", 44, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev13h", 45, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev14h", 46, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev15h", 47, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev16h", 48, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev17h", 49, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev18h", 50, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev19h", 51, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev20h", 52, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev21h", 53, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev22h", 54, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev23h", 55, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev24h", 56, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev25h", 57, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev26h", 58, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev27h", 59, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev28h", 60, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev29h", 61, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev30h", 62, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ev31h", 63, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "acc", 73, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "spefscr", 74, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
+
+  tdesc_powerpc_e500l = result;
+}
diff --git a/gdb/features/rs6000/powerpc-e500l.xml b/gdb/features/rs6000/powerpc-e500l.xml
new file mode 100644 (file)
index 0000000..0a50239
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2008 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>powerpc:e500</architecture>
+  <xi:include href="power-core.xml"/>
+  <xi:include href="power-spe.xml"/>
+  <xi:include href="power-linux.xml"/>
+</target>
index ea0ba8b..da5402c 100644 (file)
@@ -1,3 +1,46 @@
+2008-05-03  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * configure.srv (powerpc*-*-linux*): Set srv_regobj to
+       powerpc-32l.o, powerpc-altivec32l.o, powerpc-e500l.o,
+       powerpc-64l.o, and powerpc-altivec64l.o.
+       Remove rs6000/powerpc-32.xml, rs6000/powerpc-64.xml, and
+       rs6000/powerpc-e500.xml; add rs6000/powerpc-32l.xml,
+       rs6000/powerpc-altivec32l.xml, rs6000/powerpc-e500l.xml,
+       rs6000/powerpc-64l.xml, rs6000/powerpc-altivec64l.xml,
+       rs6000/power-linux.xml, and rs6000/power64-linux.xml
+       to srv_xmlfiles.
+
+       * Makefile.in (reg-ppc.o, reg-ppc.c): Remove, replace by ...
+       (powerpc-32l.o, powerpc-32l.c): ... these new rules.
+       (powerpc-32.o, powerpc-32.c): Remove, replace by ...
+       (powerpc-altivec32l.o, powerpc-altivec32l.c): ... these new rules.
+       (powerpc-e500.o, powerpc-e500.c): Remove, replace by ...
+       (powerpc-e500l.o, powerpc-e500l.c): ... these new rules.
+       (reg-ppc64.o, reg-ppc64.c): Remove, replace by ...
+       (powerpc-64l.o, powerpc-64l.c): ... these new rules.
+       (powerpc-64.o, powerpc-64.c): Remove, replace by ...
+       (powerpc-altivec64l.o, powerpc-altivec64l.c): ... these new rules.
+       (clean): Update.
+
+       * linux-ppc-low.c (init_registers_ppc): Remove, replace by ...
+       (init_registers_powerpc_32l): ... this new prototype.
+       (init_registers_powerpc_32): Remove, replace by ...
+       (init_registers_powerpc_altivec32l): ... this new prototype.
+       (init_registers_powerpc_e500): Remove, replace by ...
+       (init_registers_powerpc_e500l): ... this new prototype.
+       (init_registers_ppc64): Remove, replace by ...
+       (init_registers_powerpc_64l): ... this new prototype.
+       (init_registers_powerpc_64): Remove, replace by ...
+       (init_registers_powerpc_altivec64l): ... this new prototype.
+       (ppc_num_regs): Set to 73.
+       (PT_ORIG_R3, PT_TRAP): Define if necessary.
+       (ppc_regmap, ppc_regmap_e500): Add values for orig_r3 and trap.
+       (ppc_cannot_store_register): Handle orig_r3 and trap.
+       (ppc_arch_setup): Update init_registers_... calls.
+       (ppc_fill_gregset): Handle orig_r3 and trap.
+
+       * inferiors.c (clear_inferiors): Reset current_inferior.
+
 2008-04-23  Paolo Bonzini  <bonzini@gnu.org>
 
         * acinclude.m4: Add override.m4.
index 1bdd7b7..9b040cc 100644 (file)
@@ -219,10 +219,11 @@ clean:
        rm -f version.c
        rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log
        rm -f reg-arm.c reg-i386.c reg-ia64.c reg-m32r.c reg-m68k.c
-       rm -f reg-ppc.c reg-sh.c reg-spu.c reg-x86-64.c reg-i386-linux.c
+       rm -f reg-sh.c reg-spu.c reg-x86-64.c reg-i386-linux.c
        rm -f reg-cris.c reg-crisv32.c reg-x86-64-linux.c reg-xtensa.c
        rm -f arm-with-iwmmxt.c mips-linux.c mips64-linux.c
-       rm -f powerpc-32.c powerpc-64.c powerpc-e500.c
+       rm -f powerpc-32l.c powerpc-64l.c powerpc-e500l.c
+       rm -f powerpc-altivec32l.c powerpc-altivec64l.c
        rm -f xml-builtin.c stamp-xml
 
 maintainer-clean realclean distclean: clean
@@ -360,21 +361,21 @@ mips-linux.c : $(srcdir)/../regformats/mips-linux.dat $(regdat_sh)
 mips64-linux.o : mips64-linux.c $(regdef_h)
 mips64-linux.c : $(srcdir)/../regformats/mips64-linux.dat $(regdat_sh)
        $(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips64-linux.dat mips64-linux.c
-reg-ppc.o : reg-ppc.c $(regdef_h)
-reg-ppc.c : $(srcdir)/../regformats/reg-ppc.dat $(regdat_sh)
-       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-ppc.dat reg-ppc.c
-reg-ppc64.o : reg-ppc64.c $(regdef_h)
-reg-ppc64.c : $(srcdir)/../regformats/reg-ppc64.dat $(regdat_sh)
-       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-ppc64.dat reg-ppc64.c
-powerpc-32.o : powerpc-32.c $(regdef_h)
-powerpc-32.c : $(srcdir)/../regformats/rs6000/powerpc-32.dat $(regdat_sh)
-       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-32.dat powerpc-32.c
-powerpc-e500.o : powerpc-e500.c $(regdef_h)
-powerpc-e500.c : $(srcdir)/../regformats/rs6000/powerpc-e500.dat $(regdat_sh)
-       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-e500.dat powerpc-e500.c
-powerpc-64.o : powerpc-64.c $(regdef_h)
-powerpc-64.c : $(srcdir)/../regformats/rs6000/powerpc-64.dat $(regdat_sh)
-       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-64.dat powerpc-64.c
+powerpc-32l.o : powerpc-32l.c $(regdef_h)
+powerpc-32l.c : $(srcdir)/../regformats/rs6000/powerpc-32l.dat $(regdat_sh)
+       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-32l.dat powerpc-32l.c
+powerpc-altivec32l.o : powerpc-altivec32l.c $(regdef_h)
+powerpc-altivec32l.c : $(srcdir)/../regformats/rs6000/powerpc-altivec32l.dat $(regdat_sh)
+       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-altivec32l.dat powerpc-altivec32l.c
+powerpc-e500l.o : powerpc-e500l.c $(regdef_h)
+powerpc-e500l.c : $(srcdir)/../regformats/rs6000/powerpc-e500l.dat $(regdat_sh)
+       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-e500l.dat powerpc-e500l.c
+powerpc-64l.o : powerpc-64l.c $(regdef_h)
+powerpc-64l.c : $(srcdir)/../regformats/rs6000/powerpc-64l.dat $(regdat_sh)
+       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-64l.dat powerpc-64l.c
+powerpc-altivec64l.o : powerpc-altivec64l.c $(regdef_h)
+powerpc-altivec64l.c : $(srcdir)/../regformats/rs6000/powerpc-altivec64l.dat $(regdat_sh)
+       $(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-altivec64l.dat powerpc-altivec64l.c
 reg-s390.o : reg-s390.c $(regdef_h)
 reg-s390.c : $(srcdir)/../regformats/reg-s390.dat $(regdat_sh)
        $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-s390.dat reg-s390.c
index c97e11e..74b6b95 100644 (file)
@@ -106,17 +106,24 @@ case "${target}" in
                        srv_linux_usrregs=yes
                        srv_linux_thread_db=yes
                        ;;
-  powerpc*-*-linux*)   srv_regobj="reg-ppc.o powerpc-32.o powerpc-e500.o"
-                       srv_regobj="${srv_regobj} reg-ppc64.o powerpc-64.o"
+  powerpc*-*-linux*)   srv_regobj="powerpc-32l.o"
+                       srv_regobj="${srv_regobj} powerpc-altivec32l.o"
+                       srv_regobj="${srv_regobj} powerpc-e500l.o"
+                       srv_regobj="${srv_regobj} powerpc-64l.o"
+                       srv_regobj="${srv_regobj} powerpc-altivec64l.o"
                        srv_tgtobj="linux-low.o linux-ppc-low.o"
-                       srv_xmlfiles="rs6000/powerpc-32.xml"
+                       srv_xmlfiles="rs6000/powerpc-32l.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power-altivec.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml"
-                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
-                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power64-core.xml"
+                       srv_xmlfiles="${srv_xmlfiles} rs6000/power64-linux.xml"
                        srv_linux_usrregs=yes
                        srv_linux_regsets=yes
                        srv_linux_thread_db=yes
index daf7aaf..f35cfa0 100644 (file)
@@ -302,6 +302,8 @@ clear_inferiors (void)
 
   clear_list (&all_threads);
   clear_list (&all_dlls);
+
+  current_inferior = NULL;
 }
 
 /* Two utility functions for a truly degenerate inferior_list: a simple
index 4c3e4ef..84f9d37 100644 (file)
 static unsigned long ppc_hwcap;
 
 
-/* Defined in auto-generated file reg-ppc.c.  */
-void init_registers_ppc (void);
-/* Defined in auto-generated file powerpc-32.c.  */
-void init_registers_powerpc_32 (void);
-/* Defined in auto-generated file powerpc-e500.c.  */
-void init_registers_powerpc_e500 (void);
-/* Defined in auto-generated file reg-ppc64.c.  */
-void init_registers_ppc64 (void);
-/* Defined in auto-generated file powerpc-64.c.  */
-void init_registers_powerpc_64 (void);
-
-#define ppc_num_regs 71
+/* Defined in auto-generated file powerpc-32l.c.  */
+void init_registers_powerpc_32l (void);
+/* Defined in auto-generated file powerpc-altivec32l.c.  */
+void init_registers_powerpc_altivec32l (void);
+/* Defined in auto-generated file powerpc-e500l.c.  */
+void init_registers_powerpc_e500l (void);
+/* Defined in auto-generated file powerpc-64l.c.  */
+void init_registers_powerpc_64l (void);
+/* Defined in auto-generated file powerpc-altivec64l.c.  */
+void init_registers_powerpc_altivec64l (void);
+
+#define ppc_num_regs 73
+
+/* This sometimes isn't defined.  */
+#ifndef PT_ORIG_R3
+#define PT_ORIG_R3 34
+#endif
+#ifndef PT_TRAP
+#define PT_TRAP 40
+#endif
 
 #ifdef __powerpc64__
 /* We use a constant for FPSCR instead of PT_FPSCR, because
@@ -65,7 +73,8 @@ static int ppc_regmap[] =
   PT_FPR0*8+192,  PT_FPR0*8+200,  PT_FPR0*8+208,  PT_FPR0*8+216,
   PT_FPR0*8+224,  PT_FPR0*8+232,  PT_FPR0*8+240,  PT_FPR0*8+248,
   PT_NIP * 8,    PT_MSR * 8,    PT_CCR * 8,    PT_LNK * 8,
-  PT_CTR * 8,    PT_XER * 8,    PT_FPR0*8 + 256 };
+  PT_CTR * 8,    PT_XER * 8,    PT_FPR0*8 + 256,
+  PT_ORIG_R3 * 8, PT_TRAP * 8 };
 #else
 /* Currently, don't check/send MQ.  */
 static int ppc_regmap[] =
@@ -86,7 +95,8 @@ static int ppc_regmap[] =
   PT_FPR0*4+192,  PT_FPR0*4+200,  PT_FPR0*4+208,  PT_FPR0*4+216,
   PT_FPR0*4+224,  PT_FPR0*4+232,  PT_FPR0*4+240,  PT_FPR0*4+248,
   PT_NIP * 4,    PT_MSR * 4,    PT_CCR * 4,    PT_LNK * 4,
-  PT_CTR * 4,    PT_XER * 4,    PT_FPSCR * 4
+  PT_CTR * 4,    PT_XER * 4,    PT_FPSCR * 4,
+  PT_ORIG_R3 * 4, PT_TRAP * 4
  };
 
 static int ppc_regmap_e500[] =
@@ -107,7 +117,8 @@ static int ppc_regmap_e500[] =
   -1,            -1,            -1,            -1,
   -1,            -1,            -1,            -1,
   PT_NIP * 4,    PT_MSR * 4,    PT_CCR * 4,    PT_LNK * 4,
-  PT_CTR * 4,    PT_XER * 4,    -1
+  PT_CTR * 4,    PT_XER * 4,    -1,
+  PT_ORIG_R3 * 4, PT_TRAP * 4
  };
 #endif
 
@@ -120,6 +131,11 @@ ppc_cannot_store_register (int regno)
     return 2;
 #endif
 
+  /* Some kernels do not allow us to store orig_r3 or trap.  */
+  if (regno == find_regno ("orig_r3")
+      || regno == find_regno ("trap"))
+    return 2;
+
   return 0;
 }
 
@@ -226,7 +242,7 @@ ppc_arch_setup (void)
   /* On a 64-bit host, assume 64-bit inferior process with no
      AltiVec registers.  Reset ppc_hwcap to ensure that the
      collect_register call below does not fail.  */
-  init_registers_ppc64 ();
+  init_registers_powerpc_64l ();
   ppc_hwcap = 0;
 
   /* Only if the high bit of the MSR is set, we actually have
@@ -236,18 +252,18 @@ ppc_arch_setup (void)
     {
       ppc_get_hwcap (&ppc_hwcap);
       if (ppc_hwcap & PPC_FEATURE_HAS_ALTIVEC)
-       init_registers_powerpc_64 ();
+       init_registers_powerpc_altivec64l ();
 
       return;
     }
 #endif
 
   /* OK, we have a 32-bit inferior.  */
-  init_registers_ppc ();
+  init_registers_powerpc_32l ();
 
   ppc_get_hwcap (&ppc_hwcap);
   if (ppc_hwcap & PPC_FEATURE_HAS_ALTIVEC)
-    init_registers_powerpc_32 ();
+    init_registers_powerpc_altivec32l ();
 
   /* On 32-bit machines, check for SPE registers.
      Set the low target's regmap field as appropriately.  */
@@ -255,7 +271,7 @@ ppc_arch_setup (void)
   the_low_target.regmap = ppc_regmap;
   if (ppc_hwcap & PPC_FEATURE_HAS_SPE)
     {
-      init_registers_powerpc_e500 ();
+      init_registers_powerpc_e500l ();
       the_low_target.regmap = ppc_regmap_e500;
    }
 #endif
@@ -292,6 +308,9 @@ static void ppc_fill_gregset (void *buf)
 
   for (i = 64; i < 70; i++)
     ppc_collect_ptrace_register (i, (char *) buf + ppc_regmap[i]);
+
+  for (i = 71; i < 73; i++)
+    ppc_collect_ptrace_register (i, (char *) buf + ppc_regmap[i]);
 }
 
 #ifndef PTRACE_GETVRREGS
index 5486588..f9ea838 100644 (file)
 /* Prototypes for supply_gregset etc. */
 #include "gregset.h"
 #include "ppc-tdep.h"
+#include "ppc-linux-tdep.h"
+
+/* This sometimes isn't defined.  */
+#ifndef PT_ORIG_R3
+#define PT_ORIG_R3 34
+#endif
+#ifndef PT_TRAP
+#define PT_TRAP 40
+#endif
 
 /* Glibc's headers don't define PTRACE_GETVRREGS so we cannot use a
    configure time check.  Some older glibc's (for instance 2.2.1)
@@ -200,6 +209,10 @@ ppc_register_u_addr (struct gdbarch *gdbarch, int regno)
 #endif
   if (regno == tdep->ppc_ps_regnum)
     u_addr = PT_MSR * wordsize;
+  if (regno == PPC_ORIG_R3_REGNUM)
+    u_addr = PT_ORIG_R3 * wordsize;
+  if (regno == PPC_TRAP_REGNUM)
+    u_addr = PT_TRAP * wordsize;
   if (tdep->ppc_fpscr_regnum >= 0
       && regno == tdep->ppc_fpscr_regnum)
     {
@@ -476,6 +489,11 @@ fetch_ppc_registers (struct regcache *regcache, int tid)
     fetch_register (regcache, tid, tdep->ppc_xer_regnum);
   if (tdep->ppc_mq_regnum != -1)
     fetch_register (regcache, tid, tdep->ppc_mq_regnum);
+  if (ppc_linux_trap_reg_p (gdbarch))
+    {
+      fetch_register (regcache, tid, PPC_ORIG_R3_REGNUM);
+      fetch_register (regcache, tid, PPC_TRAP_REGNUM);
+    }
   if (tdep->ppc_fpscr_regnum != -1)
     fetch_register (regcache, tid, tdep->ppc_fpscr_regnum);
   if (have_ptrace_getvrregs)
@@ -676,9 +694,12 @@ store_register (const struct regcache *regcache, int tid, int regno)
       regaddr += sizeof (long);
 
       if (errno == EIO 
-          && regno == tdep->ppc_fpscr_regnum)
+          && (regno == tdep->ppc_fpscr_regnum
+             || regno == PPC_ORIG_R3_REGNUM
+             || regno == PPC_TRAP_REGNUM))
        {
-         /* Some older kernel versions don't allow fpscr to be written.  */
+         /* Some older kernel versions don't allow fpscr, orig_r3
+            or trap to be written.  */
          continue;
        }
 
@@ -765,6 +786,11 @@ store_ppc_registers (const struct regcache *regcache, int tid)
     store_register (regcache, tid, tdep->ppc_mq_regnum);
   if (tdep->ppc_fpscr_regnum != -1)
     store_register (regcache, tid, tdep->ppc_fpscr_regnum);
+  if (ppc_linux_trap_reg_p (gdbarch))
+    {
+      store_register (regcache, tid, PPC_ORIG_R3_REGNUM);
+      store_register (regcache, tid, PPC_TRAP_REGNUM);
+    }
   if (have_ptrace_getvrregs)
     if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
       store_altivec_registers (regcache, tid);
@@ -962,28 +988,51 @@ fill_fpregset (const struct regcache *regcache,
 static const struct target_desc *
 ppc_linux_read_description (struct target_ops *ops)
 {
+  int altivec = 0;
+
+  int tid = TIDGET (inferior_ptid);
+  if (tid == 0)
+    tid = PIDGET (inferior_ptid);
+
   if (have_ptrace_getsetevrregs)
     {
       struct gdb_evrregset_t evrregset;
-      int tid = TIDGET (inferior_ptid);
-
-      if (tid == 0)
-       tid = PIDGET (inferior_ptid);
 
       if (ptrace (PTRACE_GETEVRREGS, tid, 0, &evrregset) >= 0)
-        return tdesc_powerpc_e500;
-      else
-        {
-          /* EIO means that the PTRACE_GETEVRREGS request isn't supported.  */
-          if (errno == EIO)
-           return NULL;
-         else
-            /* Anything else needs to be reported.  */
-            perror_with_name (_("Unable to fetch SPE registers"));
-       }
+        return tdesc_powerpc_e500l;
+
+      /* EIO means that the PTRACE_GETEVRREGS request isn't supported.
+        Anything else needs to be reported.  */
+      else if (errno != EIO)
+       perror_with_name (_("Unable to fetch SPE registers"));
+    }
+
+  if (have_ptrace_getvrregs)
+    {
+      gdb_vrregset_t vrregset;
+
+      if (ptrace (PTRACE_GETVRREGS, tid, 0, &vrregset) >= 0)
+        altivec = 1;
+
+      /* EIO means that the PTRACE_GETVRREGS request isn't supported.
+        Anything else needs to be reported.  */
+      else if (errno != EIO)
+       perror_with_name (_("Unable to fetch AltiVec registers"));
     }
 
-  return NULL;
+  /* Check for 64-bit inferior process.  This is the case when the host is
+     64-bit, and in addition the top bit of the MSR register is set.  */
+#ifdef __powerpc64__
+  {
+    long msr;
+    errno = 0;
+    msr = (long) ptrace (PTRACE_PEEKUSER, tid, PT_MSR * 8, 0);
+    if (errno == 0 && msr < 0)
+      return altivec? tdesc_powerpc_altivec64l : tdesc_powerpc_64l;
+  }
+#endif
+
+  return altivec? tdesc_powerpc_altivec32l : tdesc_powerpc_32l;
 }
 
 void _initialize_ppc_linux_nat (void);
index 44b66ac..2f776f5 100644 (file)
 #include "regset.h"
 #include "solib-svr4.h"
 #include "ppc-tdep.h"
+#include "ppc-linux-tdep.h"
 #include "trad-frame.h"
 #include "frame-unwind.h"
 #include "tramp-frame.h"
 
+#include "features/rs6000/powerpc-32l.c"
+#include "features/rs6000/powerpc-altivec32l.c"
+#include "features/rs6000/powerpc-64l.c"
+#include "features/rs6000/powerpc-altivec64l.c"
+#include "features/rs6000/powerpc-e500l.c"
+
 static CORE_ADDR
 ppc_linux_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 {
@@ -620,17 +627,60 @@ ppc_linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
   return addr;
 }
 
-/* This wrapper clears areas in the linux gregset not written by
-   ppc_collect_gregset.  */
+/* Wrappers to handle Linux-only registers.  */
+
+static void
+ppc_linux_supply_gregset (const struct regset *regset,
+                         struct regcache *regcache,
+                         int regnum, const void *gregs, size_t len)
+{
+  const struct ppc_reg_offsets *offsets = regset->descr;
+
+  ppc_supply_gregset (regset, regcache, regnum, gregs, len);
+
+  if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
+    {
+      /* "orig_r3" is stored 2 slots after "pc".  */
+      if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
+       ppc_supply_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
+                       offsets->pc_offset + 2 * offsets->gpr_size,
+                       offsets->gpr_size);
+
+      /* "trap" is stored 8 slots after "pc".  */
+      if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
+       ppc_supply_reg (regcache, PPC_TRAP_REGNUM, gregs,
+                       offsets->pc_offset + 8 * offsets->gpr_size,
+                       offsets->gpr_size);
+    }
+}
 
 static void
 ppc_linux_collect_gregset (const struct regset *regset,
                           const struct regcache *regcache,
                           int regnum, void *gregs, size_t len)
 {
+  const struct ppc_reg_offsets *offsets = regset->descr;
+
+  /* Clear areas in the linux gregset not written elsewhere.  */
   if (regnum == -1)
     memset (gregs, 0, len);
+
   ppc_collect_gregset (regset, regcache, regnum, gregs, len);
+
+  if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
+    {
+      /* "orig_r3" is stored 2 slots after "pc".  */
+      if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
+       ppc_collect_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
+                        offsets->pc_offset + 2 * offsets->gpr_size,
+                        offsets->gpr_size);
+
+      /* "trap" is stored 8 slots after "pc".  */
+      if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
+       ppc_collect_reg (regcache, PPC_TRAP_REGNUM, gregs,
+                        offsets->pc_offset + 8 * offsets->gpr_size,
+                        offsets->gpr_size);
+    }
 }
 
 /* Regset descriptions.  */
@@ -686,14 +736,14 @@ static const struct ppc_reg_offsets ppc64_linux_reg_offsets =
 
 static const struct regset ppc32_linux_gregset = {
   &ppc32_linux_reg_offsets,
-  ppc_supply_gregset,
+  ppc_linux_supply_gregset,
   ppc_linux_collect_gregset,
   NULL
 };
 
 static const struct regset ppc64_linux_gregset = {
   &ppc64_linux_reg_offsets,
-  ppc_supply_gregset,
+  ppc_linux_supply_gregset,
   ppc_linux_collect_gregset,
   NULL
 };
@@ -789,6 +839,14 @@ ppc_linux_sigtramp_cache (struct frame_info *this_frame,
   trad_frame_set_reg_addr (this_cache, tdep->ppc_cr_regnum,
                           gpregs + 38 * tdep->wordsize);
 
+  if (ppc_linux_trap_reg_p (gdbarch))
+    {
+      trad_frame_set_reg_addr (this_cache, PPC_ORIG_R3_REGNUM,
+                              gpregs + 34 * tdep->wordsize);
+      trad_frame_set_reg_addr (this_cache, PPC_TRAP_REGNUM,
+                              gpregs + 40 * tdep->wordsize);
+    }
+
   if (ppc_floating_point_unit_p (gdbarch))
     {
       /* Floating point registers.  */
@@ -895,11 +953,69 @@ static struct tramp_frame ppc64_linux_sighandler_tramp_frame = {
   ppc64_linux_sighandler_cache_init
 };
 
+
+/* Return 1 if PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM are usable.  */
+int
+ppc_linux_trap_reg_p (struct gdbarch *gdbarch)
+{
+  /* If we do not have a target description with registers, then
+     the special registers will not be included in the register set.  */
+  if (!tdesc_has_registers (gdbarch_target_desc (gdbarch)))
+    return 0;
+
+  /* If we do, then it is safe to check the size.  */
+  return register_size (gdbarch, PPC_ORIG_R3_REGNUM) > 0
+         && register_size (gdbarch, PPC_TRAP_REGNUM) > 0;
+}
+
+static void
+ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
+{
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+
+  regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch), pc);
+
+  /* Set special TRAP register to -1 to prevent the kernel from
+     messing with the PC we just installed, if we happen to be
+     within an interrupted system call that the kernel wants to
+     restart.
+
+     Note that after we return from the dummy call, the TRAP and
+     ORIG_R3 registers will be automatically restored, and the
+     kernel continues to restart the system call at this point.  */
+  if (ppc_linux_trap_reg_p (gdbarch))
+    regcache_cooked_write_unsigned (regcache, PPC_TRAP_REGNUM, -1);
+}
+
+static const struct target_desc *
+ppc_linux_core_read_description (struct gdbarch *gdbarch,
+                                struct target_ops *target,
+                                bfd *abfd)
+{
+  asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
+  asection *section = bfd_get_section_by_name (abfd, ".reg");
+  if (! section)
+    return NULL;
+
+  switch (bfd_section_size (abfd, section))
+    {
+    case 48 * 4:
+      return altivec? tdesc_powerpc_altivec32l : tdesc_powerpc_32l;
+
+    case 48 * 8:
+      return altivec? tdesc_powerpc_altivec64l : tdesc_powerpc_64l;
+
+    default:
+      return NULL;
+    }
+}
+
 static void
 ppc_linux_init_abi (struct gdbarch_info info,
                     struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
 
   /* PPC GNU/Linux uses either 64-bit or 128-bit long doubles; where
      128-bit, they are IBM long double, not IEEE quad long double as
@@ -914,6 +1030,9 @@ ppc_linux_init_abi (struct gdbarch_info info,
   set_gdbarch_convert_from_func_ptr_addr
     (gdbarch, ppc_linux_convert_from_func_ptr_addr);
 
+  /* Handle inferior calls during interrupted system calls.  */
+  set_gdbarch_write_pc (gdbarch, ppc_linux_write_pc);
+
   if (tdep->wordsize == 4)
     {
       /* Until November 2001, gcc did not comply with the 32 bit SysV
@@ -951,10 +1070,33 @@ ppc_linux_init_abi (struct gdbarch_info info,
       tramp_frame_prepend_unwinder (gdbarch, &ppc64_linux_sighandler_tramp_frame);
     }
   set_gdbarch_regset_from_core_section (gdbarch, ppc_linux_regset_from_core_section);
+  set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
                                              svr4_fetch_objfile_link_map);
+
+  if (tdesc_data)
+    {
+      const struct tdesc_feature *feature;
+
+      /* If we have target-described registers, then we can safely
+         reserve a number for PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM
+        (whether they are described or not).  */
+      gdb_assert (gdbarch_num_regs (gdbarch) <= PPC_ORIG_R3_REGNUM);
+      set_gdbarch_num_regs (gdbarch, PPC_TRAP_REGNUM + 1);
+
+      /* If they are present, then assign them to the reserved number.  */
+      feature = tdesc_find_feature (info.target_desc,
+                                    "org.gnu.gdb.power.linux");
+      if (feature != NULL)
+       {
+         tdesc_numbered_register (feature, tdesc_data,
+                                  PPC_ORIG_R3_REGNUM, "orig_r3");
+         tdesc_numbered_register (feature, tdesc_data,
+                                  PPC_TRAP_REGNUM, "trap");
+       }
+    }
 }
 
 void
@@ -968,4 +1110,11 @@ _initialize_ppc_linux_tdep (void)
                          ppc_linux_init_abi);
   gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
                          ppc_linux_init_abi);
+
+  /* Initialize the Linux target descriptions.  */
+  initialize_tdesc_powerpc_32l ();
+  initialize_tdesc_powerpc_altivec32l ();
+  initialize_tdesc_powerpc_64l ();
+  initialize_tdesc_powerpc_altivec64l ();
+  initialize_tdesc_powerpc_e500l ();
 }
diff --git a/gdb/ppc-linux-tdep.h b/gdb/ppc-linux-tdep.h
new file mode 100644 (file)
index 0000000..0ac76d3
--- /dev/null
@@ -0,0 +1,48 @@
+/* Target-dependent code for GDB, the GNU debugger.
+
+   Copyright (C) 2008 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef PPC_LINUX_TDEP_H
+#define PPC_LINUX_TDEP_H
+
+struct regset;
+
+/* From ppc-linux-tdep.c ... */
+const struct regset *ppc_linux_gregset (int);
+const struct regset *ppc_linux_fpregset (void);
+
+/* Extra register number constants.  The Linux kernel stores a
+   "trap" code and the original value of r3 into special "registers";
+   these need to be saved and restored when performing an inferior
+   call while the inferior was interrupted within a system call.  */
+enum {
+  PPC_ORIG_R3_REGNUM = PPC_NUM_REGS,
+  PPC_TRAP_REGNUM,
+};
+
+/* Return 1 if PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM are usable.  */
+int ppc_linux_trap_reg_p (struct gdbarch *gdbarch);
+
+/* Linux target descriptions.  */
+extern struct target_desc *tdesc_powerpc_32l;
+extern struct target_desc *tdesc_powerpc_altivec32l;
+extern struct target_desc *tdesc_powerpc_e500l;
+extern struct target_desc *tdesc_powerpc_64l;
+extern struct target_desc *tdesc_powerpc_altivec64l;
+
+#endif /* PPC_LINUX_TDEP_H */
index 63423c9..472371a 100644 (file)
@@ -27,7 +27,7 @@ struct value;
 struct regcache;
 struct type;
 
-/* From ppc-linux-tdep.c... */
+/* From ppc-sysv-tdep.c ... */
 enum return_value_convention ppc_sysv_abi_return_value (struct gdbarch *gdbarch,
                                                        struct type *func_type,
                                                        struct type *valtype,
@@ -56,10 +56,6 @@ CORE_ADDR ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch,
                                          CORE_ADDR struct_addr);
 CORE_ADDR ppc64_sysv_abi_adjust_breakpoint_address (struct gdbarch *gdbarch,
                                                    CORE_ADDR bpaddr);
-int ppc_linux_memory_remove_breakpoint (struct gdbarch *, struct bp_target_info *);
-struct link_map_offsets *ppc_linux_svr4_fetch_link_map_offsets (void);
-const struct regset *ppc_linux_gregset (int);
-const struct regset *ppc_linux_fpregset (void);
 
 enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarch,
                                                          struct type *func_type,
@@ -107,6 +103,12 @@ struct ppc_reg_offsets
   int vrsave_offset;
 };
 
+extern void ppc_supply_reg (struct regcache *regcache, int regnum,
+                           const gdb_byte *regs, size_t offset, int regsize);
+
+extern void ppc_collect_reg (const struct regcache *regcache, int regnum,
+                            gdb_byte *regs, size_t offset, int regsize);
+
 /* Supply register REGNUM in the general-purpose register set REGSET
    from the buffer specified by GREGS and LEN to register cache
    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
@@ -268,6 +270,4 @@ enum {
 /* Estimate for the maximum number of instrctions in a function epilogue.  */
 #define PPC_MAX_EPILOGUE_INSTRUCTIONS  52
 
-extern struct target_desc *tdesc_powerpc_e500;
-
 #endif /* ppc-tdep.h */
similarity index 81%
rename from gdb/regformats/reg-ppc.dat
rename to gdb/regformats/rs6000/powerpc-32l.dat
index 2337d45..01e2542 100644 (file)
@@ -1,4 +1,6 @@
-name:ppc
+# DO NOT EDIT: generated from rs6000/powerpc-32l.xml
+name:powerpc_32l
+xmltarget:powerpc-32l.xml
 expedite:r1,pc
 32:r0
 32:r1
@@ -32,7 +34,6 @@ expedite:r1,pc
 32:r29
 32:r30
 32:r31
-
 64:f0
 64:f1
 64:f2
@@ -65,12 +66,12 @@ expedite:r1,pc
 64:f29
 64:f30
 64:f31
-
 32:pc
 32:msr
-
 32:cr
 32:lr
 32:ctr
 32:xer
 32:fpscr
+32:orig_r3
+32:trap
similarity index 81%
rename from gdb/regformats/reg-ppc64.dat
rename to gdb/regformats/rs6000/powerpc-64l.dat
index 16d7440..28583bc 100644 (file)
@@ -1,4 +1,6 @@
-name:ppc64
+# DO NOT EDIT: generated from rs6000/powerpc-64l.xml
+name:powerpc_64l
+xmltarget:powerpc-64l.xml
 expedite:r1,pc
 64:r0
 64:r1
@@ -32,7 +34,6 @@ expedite:r1,pc
 64:r29
 64:r30
 64:r31
-
 64:f0
 64:f1
 64:f2
@@ -65,12 +66,12 @@ expedite:r1,pc
 64:f29
 64:f30
 64:f31
-
 64:pc
 64:msr
-
 32:cr
 64:lr
 64:ctr
 32:xer
 32:fpscr
+64:orig_r3
+64:trap
similarity index 85%
rename from gdb/regformats/rs6000/powerpc-32.dat
rename to gdb/regformats/rs6000/powerpc-altivec32l.dat
index 840d68e..52af0e3 100644 (file)
@@ -1,6 +1,6 @@
-# DO NOT EDIT: generated from rs6000/powerpc-32.xml
-name:powerpc_32
-xmltarget:powerpc-32.xml
+# DO NOT EDIT: generated from rs6000/powerpc-altivec32l.xml
+name:powerpc_altivec32l
+xmltarget:powerpc-altivec32l.xml
 expedite:r1,pc
 32:r0
 32:r1
@@ -73,6 +73,8 @@ expedite:r1,pc
 32:ctr
 32:xer
 32:fpscr
+32:orig_r3
+32:trap
 128:vr0
 128:vr1
 128:vr2
similarity index 85%
rename from gdb/regformats/rs6000/powerpc-64.dat
rename to gdb/regformats/rs6000/powerpc-altivec64l.dat
index 1f2a68f..dc14165 100644 (file)
@@ -1,6 +1,6 @@
-# DO NOT EDIT: generated from rs6000/powerpc-64.xml
-name:powerpc_64
-xmltarget:powerpc-64.xml
+# DO NOT EDIT: generated from rs6000/powerpc-altivec64l.xml
+name:powerpc_altivec64l
+xmltarget:powerpc-altivec64l.xml
 expedite:r1,pc
 64:r0
 64:r1
@@ -73,6 +73,8 @@ expedite:r1,pc
 64:ctr
 32:xer
 32:fpscr
+64:orig_r3
+64:trap
 128:vr0
 128:vr1
 128:vr2
similarity index 82%
rename from gdb/regformats/rs6000/powerpc-e500.dat
rename to gdb/regformats/rs6000/powerpc-e500l.dat
index a8e06d0..579d5c2 100644 (file)
@@ -1,6 +1,6 @@
-# DO NOT EDIT: generated from rs6000/powerpc-e500.xml
-name:powerpc_e500
-xmltarget:powerpc-e500.xml
+# DO NOT EDIT: generated from rs6000/powerpc-e500l.xml
+name:powerpc_e500l
+xmltarget:powerpc-e500l.xml
 expedite:r1,pc
 32:r0
 32:r1
@@ -73,5 +73,7 @@ expedite:r1,pc
 32:ctr
 32:xer
 0:
+32:orig_r3
+32:trap
 64:acc
 32:spefscr
index 07f2b78..8de3a60 100644 (file)
@@ -64,6 +64,7 @@
 #include "rs6000-tdep.h"
 
 #include "features/rs6000/powerpc-32.c"
+#include "features/rs6000/powerpc-altivec32.c"
 #include "features/rs6000/powerpc-403.c"
 #include "features/rs6000/powerpc-403gc.c"
 #include "features/rs6000/powerpc-505.c"
@@ -72,6 +73,7 @@
 #include "features/rs6000/powerpc-603.c"
 #include "features/rs6000/powerpc-604.c"
 #include "features/rs6000/powerpc-64.c"
+#include "features/rs6000/powerpc-altivec64.c"
 #include "features/rs6000/powerpc-7400.c"
 #include "features/rs6000/powerpc-750.c"
 #include "features/rs6000/powerpc-860.c"
@@ -376,7 +378,7 @@ rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
    Write the register to REGCACHE.  */
 
-static void
+void
 ppc_supply_reg (struct regcache *regcache, int regnum, 
                const gdb_byte *regs, size_t offset, int regsize)
 {
@@ -397,7 +399,7 @@ ppc_supply_reg (struct regcache *regcache, int regnum,
 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
    in a field REGSIZE wide.  Zero pad as necessary.  */
 
-static void
+void
 ppc_collect_reg (const struct regcache *regcache, int regnum,
                 gdb_byte *regs, size_t offset, int regsize)
 {
@@ -2857,7 +2859,7 @@ struct variant
 static struct variant variants[] =
 {
   {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
-   bfd_mach_ppc, &tdesc_powerpc_32},
+   bfd_mach_ppc, &tdesc_powerpc_altivec32},
   {"power", "POWER user-level", bfd_arch_rs6000,
    bfd_mach_rs6k, &tdesc_rs6000},
   {"403", "IBM PowerPC 403", bfd_arch_powerpc,
@@ -2885,7 +2887,7 @@ static struct variant variants[] =
 
   /* 64-bit */
   {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
-   bfd_mach_ppc64, &tdesc_powerpc_64},
+   bfd_mach_ppc64, &tdesc_powerpc_altivec64},
   {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
    bfd_mach_ppc_620, &tdesc_powerpc_64},
   {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
@@ -3902,6 +3904,7 @@ _initialize_rs6000_tdep (void)
 
   /* Initialize the standard target descriptions.  */
   initialize_tdesc_powerpc_32 ();
+  initialize_tdesc_powerpc_altivec32 ();
   initialize_tdesc_powerpc_403 ();
   initialize_tdesc_powerpc_403gc ();
   initialize_tdesc_powerpc_505 ();
@@ -3910,6 +3913,7 @@ _initialize_rs6000_tdep (void)
   initialize_tdesc_powerpc_603 ();
   initialize_tdesc_powerpc_604 ();
   initialize_tdesc_powerpc_64 ();
+  initialize_tdesc_powerpc_altivec64 ();
   initialize_tdesc_powerpc_7400 ();
   initialize_tdesc_powerpc_750 ();
   initialize_tdesc_powerpc_860 ();