(append_composite_type_field_aligned): Use the new function.
* gdbtypes.h (append_composite_type_field_raw): Declare.
* target-descriptions.c (struct tdesc_type_field): Add start and end.
(struct tdesc_type_flag): New type.
(struct tdesc_type): Add TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS to
kind. Add size to u.u. Add u.f for flags.
(tdesc_gdb_type): Handle TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS.
(tdesc_free_type): Likewise.
(tdesc_create_struct, tdesc_set_struct_size, tdesc_create_flags): New.
(tdesc_add_field): Handle TDESC_TYPE_STRUCT.
(tdesc_add_bitfield, tdesc_add_flag): New.
* target-descriptions.h (tdesc_create_struct, tdesc_set_struct_size)
(tdesc_create_flags, tdesc_add_bitfield, tdesc_add_flag): Declare.
* xml-tdesc.c (struct tdesc_parsing_data): Rename current_union to
current_type. Add current_type_size and current_type_is_flags.
(tdesc_start_union): Clear the new fields.
(tdesc_start_struct, tdesc_start_flags): New.
(tdesc_start_field): Handle struct fields, including bitfields.
(field_attributes): Make type optional. Add start and end.
(union_children): Rename to struct_union_children.
(union_attributes): Rename to struct_union_attributes. Add optional
size.
(flags_attributes): New.
(feature_children): Add struct and flags.
* features/gdb-target.dtd: Add flags and struct to features.
Make field type optional. Add field start and end.
doc/
* gdb.texinfo (Types): Describe <struct> and <flags>.
testsuite/
* gdb.xml/extra-regs.xml: Add struct1, struct2, and flags
types. Add structreg, bitfields, and flags registers.
* gdb.xml/tdesc-regs.exp: Test structreg and bitfields
registers.
* features/gdb-target.dtd (target): Accept an optional 'osabi'
element.
(osabi): Define element.
* features/mips-linux.xml (target): Add an osabi subelement set to
GNU/Linux.
* regformats/regdat.sh (xmlarch, xmlosabi): New variables. Don't
write the architecture into $xmltarget. Store it in $xmlarch.
Handle the 'osabi' type. Handle outputting the osabi element of
the target description.
* regformats/reg-x86-64-linux.dat (osabi): Set to GNU/Linux.
* regformats/reg-i386-linux.dat (osabi): Set to GNU/Linux.
* target-descriptions.h (tdesc_osabi, set_tdesc_osabi): Declare.
* target-descriptions.c (struct target_desc) <osabi>: New field.
(tdesc_osabi): New function.
(set_tdesc_osabi): New function.
* xml-tdesc.c: Include osabi.h.
(tdesc_end_osabi): New.
(target_children): Parse "osabi" elements.
* arch-utils.c (gdbarch_info_fill): Try to get the osabi from the
target description if the user didn't override it or it is not
extractable from the bfd. If that still fails, fallback to the
configured in default.
* osabi.h (osabi_from_tdesc_string): Declare.
* osabi.c (osabi_from_tdesc_string): New.
(gdbarch_lookup_osabi): Return GDB_OSABI_UNKNOWN instead of
GDB_OSABI_DEFAULT.
* NEWS: Mention that target descriptions can now describe the
target OS ABI.
2009-07-20 Pedro Alves <pedro@codesourcery.com>
* gdb.texinfo (Target Description Format): Mention the new <osabi>
optional element.
(subsection OS ABI): New subsection.
* features/Makefile (rs6000/powerpc-isa205-32l-expedite,
rs6000/powerpc-isa205-altivec32l-expedite,
powerpc-isa205-vsx32l-expedite, rs6000/powerpc-isa205-64l-expedite,
rs6000/powerpc-isa205-altivec64l-expedite,
powerpc-isa205-vsx64l-expedite): New variables.
* regformats/rs6000/powerpc-isa205-32l.dat: Generate.
* regformats/rs6000/powerpc-isa205-altivec32l.dat: Generate.
* regformats/rs6000/powerpc-isa205-vsx32l.dat: Generate.
* regformats/rs6000/powerpc-isa205-64l.dat: Generate.
* regformats/rs6000/powerpc-isa205-altivec64l.dat: Generate.
* regformats/rs6000/powerpc-isa205-vsx64l.dat: Generate.
gdbserver/
* Makefile.in (powerpc-isa205-32l.o, powerpc-isa205-32l.c,
powerpc-isa205-altivec32l.o, powerpc-isa205-altivec32l.c,
powerpc-isa205-vsx32l.o, powerpc-isa205-vsx32l.c,
powerpc-isa205-64l.o, powerpc-isa205-64l.c,
powerpc-isa205-altivec64l.o, powerpc-isa205-altivec64l.c,
powerpc-isa205-vsx64l.o, powerpc-isa205-vsx64l.c): New targets.
* configure.srv (powerpc*-*-linux*): Add ISA 2.05 object files and
XML target descriptions.
* linux-ppc-low.c (ppc_arch_setup): Init registers with 64-bit FPSCR
when inferior is running on an ISA 2.05 or later processor. Add
special case to return offset for full 64-bit slot of FPSCR when
in 32-bits.
* ppc-linux-nat.c (ppc_register_u_addr): Add special case to return
offset for full 64-bit slot of FPSCR when in 32-bits.
(ppc_linux_read_description): Return target description with 64-bit
FPSCR when inferior is running on an ISA 2.05 or later processor.
* ppc-linux-tdep.c (_initialize_ppc_linux_tdep): Call
initialize_tdec_powerpc_isa205_32l,
initialize_tdec_powerpc_isa205_altivec32l,
initialize_tdec_powerpc_isa205_vsx32l,
initialize_tdec_powerpc_isa205_64l,
initialize_tdec_powerpc_isa205_altivec64l and
initialize_tdec_powerpc_isa205_vsx64l.
* ppc-linux-tdep.h: Add external declaration for
tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_altivec32l,
tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_isa205_64l,
tdesc_powerpc_isa205_altivec64l and tdesc_powerpc_isa205_vsx64l.
* features/rs600/powerpc-fpu-isa205.xml: New file.
* features/rs600/powerpc-isa205-32l.xml: New file.
* features/rs600/powerpc-isa205-64l.xml: New file.
* features/rs600/powerpc-isa205-altivec32l.xml: New file.
* features/rs600/powerpc-isa205-altivec64l.xml: New file.
* features/rs600/powerpc-isa205-vsx32l.xml: New file.
* features/rs600/powerpc-isa205-vsx64l.xml: New file.
* features/rs600/powerpc-isa205-32l.c: Generate.
* features/rs600/powerpc-isa205-64l.c: Generate.
* features/rs600/powerpc-isa205-altivec32l.c: Generate.
* features/rs600/powerpc-isa205-altivec64l.c: Generate.
* features/rs600/powerpc-isa205-vsx32l.c: Generate.
* features/rs600/powerpc-isa205-vsx64l.c: Generate.
gdb/testsuite/
* gdb.arch/ppc-dfp.exp: New file.
* gdb.arch/ppc-dfp.c: New file.
Include "features/rs6000/powerpc-vsx64.c".
(ppc_supply_vsxregset): New function.
(ppc_collect_vsxregset): New function.
(IS_VSX_PSEUDOREG): New macro.
(IS_EFP_PSEUDOREG): New macro.
(vsx_register_p): New function.
(ppc_vsx_support_p): New function.
(rs6000_builtin_type_vec128): New function.
(rs6000_register_name): Hide upper halves of vs0~vs31. Return
correct names for VSX registers and EFPR registers.
(rs6000_pseudo_register_type): Return correct types for VSX
and EFPR registers.
(rs6000_pseudo_register_reggroup_p): Return correct group for
VSX and EFPR registers.
(ppc_pseudo_register_read): Rename to dfp_pseudo_register_read.
(ppc_pseudo_register_write): Rename to dfp_pseudo_register_write.
(vsx_pseudo_register_read): New function.
(vsx_pseudo_register_write): New function.
(efpr_pseudo_register_read): New function.
(efpr_pseudo_register_write): New function.
(rs6000_pseudo_register_read): Call new VSX and EFPR read functions.
(rs6000_pseudo_register_write): Call new VSX and EFPR write functions.
(rs6000_gdbarch_init): Declare have_vsx.
Initialize new upper half VSX registers.
Initialize VSX-related and EFPR-related pseudo-registers variables.
Adjust the number of pseudo registers accordingly.
* ppc-linux-nat.c: Define PTRACE_GETVSXREGS, PTRACE_SETVSXREGS
and SIZEOF_VSRREGS.
(gdb_vsxregset_t): New type.
(have_ptrace_getsetvsxregs): New variable.
(fetch_vsx_register): New function.
(fetch_register): Handle VSX registers.
(fetch_vsx_registers): New function.
(fetch_ppc_registers): Handle VSX registers.
(store_ppc_registers): Handle VSX registers.
(store_vsx_register): New function.
(store_register): Handle VSX registers.
(store_vsx_registers): New function.
(ppc_linux_read_description): Handle VSX-enabled inferiors.
(gdb_vsxregset_t): New type.
(supply_vsxregset): New function.
(fill_vsxregset): New function.
* ppc-tdep.h (vsx_register_p): New prototype.
(vsx_support_p): New prototype.
(ppc_vsr0_regnum): New variable.
(ppc_vsr0_upper_regnum): Likewise.
(ppc_efpr0_regnum): Likewise.
(ppc_builtin_type_vec128): New type.
(ppc_num_vsrs): New constant.
(ppc_num_vshrs): New constant.
(ppc_num_efprs): Likewise.
Define POWERPC_VEC_VSX PPC_VSR0_UPPER_REGNUM and PPC_VSR31_UPPER_REGNUM.
(ppc_supply_vsxregset): New prototype.
(ppc_collect_vsxregset): New prototype.
* ppc-linux-tdep.c: Include "features/rs6000/powerpc-vsx32l.c"
Include "features/rs6000/powerpc-vsx64l.c".
(_initialize_ppc_linux_tdep): Initialize VSX-enabled targets.
(ppc_linux_regset_sections): Add new ".reg-ppc-vsx" field.
(ppc32_linux_vsxregset): New 32-bit VSX-enabled regset.
(ppc_linux_regset_from_core_section): Handle VSX core section.
(ppc_linux_core_read_description): Support VSX-enabled core files.
* ppc-linux-tdep.h: Declare *tdesc_powerpc_vsx32l
Declare tdesc_powerpc_vsx64l
* corelow.c (get_core_register_section): Support VSX-enabled
core files.
* features/rs6000/power-vsx.xml: New VSX descriptions.
* features/rs6000/powerpc-vsx32.xml: New file.
* features/rs6000/powerpc-vsx32l.xml: New file.
* features/rs6000/powerpc-vsx64.xml: New file.
* features/rs6000/powerpc-vsx64l.xml: New file.
* features/rs6000/powerpc-vsx32.c: New file (generated).
* features/rs6000/powerpc-vsx32l.c: New file (generated).
* features/rs6000/powerpc-vsx64.c: New file (generated).
* features/rs6000/powerpc-vsx64l.c: New file (generated).
* features/Makefile: Updated with new descriptions.
* regformats/rs6000/powerpc-vsx32l.dat: New file (generated).
* regformats/rs6000/powerpc-vsx64l.dat: New file (generated).
* testsuite/gdb.arch/vsx-regs.c: New source file.
* testsuite/gdb.arch/vsx-regs.exp: New testcase.
* testsuite/lib/gdb.exp (skip_vsx_tests): New function.
* 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.
* features/Makefile (%.dat): Set xmltarget to the base filename
of the XML source, without subdirectory.
* regformats/rs6000/powerpc-32.dat: Regenerate.
* regformats/rs6000/powerpc-64.dat: Regenerate.
* regformats/rs6000/powerpc-e500.dat: Regenerate.
gdbserver/ChangeLog:
* server.c (get_features_xml): Fix inverted condition.
(handle_query): Always support qXfer:feature:read.
of "library". Add "section" element and describe its attributes.
* solib-target.c (struct lm_info): Add section_bases member.
(library_list_start_segment): Error out if seen a section element.
(library_list_start_section): New.
(library_list_end_library): New.
(solib_target_free_library_list): Free section_bases.
(section_attributes): New.
(library_children): Make "segment" optional. Add "section" child.
(library_list_children): Register library_list_end_library.
(solib_target_relocate_section_addresses): Handle section bases.
* NEWS: Mention new qXfer:libraries:read section offsets support.
doc/
* gdb.texinfo (Library List Format): Update to mention the
possibility to pass section addresses instead of segment
addresses.
features/rs6000/powerpc-601.xml, features/rs6000/rs6000.xml:
Change the type of the lr register to code_ptr.
* features/rs6000/powerpc-32.c, features/rs6000/powerpc-403.c,
features/rs6000/powerpc-403gc.c, features/rs6000/powerpc-505.c,
features/rs6000/powerpc-601.c, features/rs6000/powerpc-602.c,
features/rs6000/powerpc-603.c, features/rs6000/powerpc-604.c,
features/rs6000/powerpc-64.c, features/rs6000/powerpc-7400.c,
features/rs6000/powerpc-750.c, features/rs6000/powerpc-860.c,
features/rs6000/powerpc-e500.c, features/rs6000/rs6000.c: Regenerate.
for <target>.
* xml-tdesc.c (tdesc_start_target): New.
(target_attributes): New.
(tdesc_elements): Use it.
* features/gdb-target.dtd: Add #FIXED version attribute for
<target>.
mips64-linux.
* features/sort-regs.xsl: Correct typo.
* regformats/reg-mips.dat, regformats/reg-mips64.dat: Delete.
* regformats/mips-linux.dat, regformats/mips64-linux.dat: New generated
files.
* Makefile.in (clean): Clean new files instead of deleted ones.
(reg-mips.o, reg-mips.c, reg-mips64.o, reg-mips64.c): Delete.
(mips-linux.o, mips-linux.c, mips64-linux.o, mips64-linux.c): New
rules.
* configure.srv: Specify XML files and new regformats for MIPS and
MIPS64 GNU/Linux.
* linux-mips-low.c (mips_num_regs): Set to only used registers.
(mips_regmap): Do not fetch $0. Remove unused registers. Add
an entry for the restart register.
(mips_cannot_fetch_register, mips_cannot_store_register)
(mips_reinsert_addr, mips_fill_fpregset, mips_store_fpregset): Update
register names to match the XML descriptions.
(mips_fill_gregset, mips_store_gregset): Likewise. Handle the
restart register instead of $0.
handling from here...
(tdesc_register_type): ...to here.
* xml-tdesc.c (tdesc_start_reg): Allow code_ptr and data_ptr.
* features/arm-core.xml: Use code_ptr and data_ptr.
(COMMON_OBS): Add xml-builtin.o.
(xml-builtin.c, stamp-xml): New rules.
(xml-tdesc.o): Update.
* features/feature_to_c.sh: New file.
* xml-support.c (MAX_XINCLUDE_DEPTH): Define.
(struct gdb_xml_parser): Add dtd_name and is_xinclude.
(gdb_xml_start_element): Initialize scope after possibly reallocating
scopes. Move cleanup later. Handle the XInclude description
specially.
(gdb_xml_end_element): Only parse the body if there is a current element.
Call XML_DefaultCurrent if there is no element.
(gdb_xml_fetch_external_entity, gdb_xml_use_dtd): New.
(struct xinclude_parsing_data, xinclude_start_include)
(xinclude_end_include, xml_xinclude_default)
(xml_xinclude_start_doctype, xml_xinclude_end_doctype)
(xml_xinclude_xml_decl, xml_xinclude_cleanup, xinclude_attributes)
(xinclude_elements, xml_process_xincludes, fetch_xml_builtin): New.
* xml-support.h (xml_fetch_another, xml_process_xincludes)
(fetch_xml_builtin, xml_builtin, gdb_xml_use_dtd): New declarations.
* xml-tdesc.c (tdesc_parse_xml): Add fetcher_baton argument. Expand
XInclude directives. Use the compiled in DTD.
(fetch_xml_from_file): Add baton argument. Treat it as a containing
directory name. Do not warn here.
(file_read_description_xml): Update call. Warn here instead. Pass
a dirname as baton.
(fetch_available_features_from_target): New.
(target_read_description_xml): Use it.
* features/gdb-target.dtd: Add copyright notice. Use xinclude.dtd
to handle XInclude.
* features/xinclude.dtd: New file.
* gdb.xml/bad-include.xml, gdb.xml/inc-2.xml, gdb.xml/inc-body.xml,
gdb.xml/includes.xml, gdb.xml/tdesc-xinclude.exp: New files.
* gdb.texinfo (Target Description Format): Add section on XInclude.