1. Sep 16, 2020
    • Tom Tromey's avatar
      Don't use PyInt_FromLong · 47f0e2ff
      Tom Tromey authored
      Avoid the use of PyInt_FromLong, preferring gdb_py_object_from_longest
      instead.  I found found another spot that was incorrectly handling
      errors (see gdbpy_create_ptid_object) while writing this patch; it is
      fixed here.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python-internal.h (PyInt_FromLong): Remove define.
      	* python/py-value.c (convert_value_from_python): Use
      	gdb_py_object_from_longest.
      	* python/py-type.c (typy_get_code): Use
      	gdb_py_object_from_longest.
      	* python/py-symtab.c (salpy_get_line): Use
      	gdb_py_object_from_longest.
      	* python/py-symbol.c (sympy_get_addr_class, sympy_line): Use
      	gdb_py_object_from_longest.
      	* python/py-record.c (recpy_gap_reason_code): Use
      	gdb_py_object_from_longest.
      	* python/py-record-btrace.c (recpy_bt_insn_size)
      	(recpy_bt_func_level, btpy_list_count): Use
      	gdb_py_object_from_longest.
      	* python/py-infthread.c (gdbpy_create_ptid_object): Use
      	gdb_py_object_from_longest.  Fix error handling.
      	* python/py-framefilter.c (bootstrap_python_frame_filters): Use
      	gdb_py_object_from_longest.
      	* python/py-frame.c (frapy_type, frapy_unwind_stop_reason): Use
      	gdb_py_object_from_longest.
      	* python/py-breakpoint.c (bppy_get_type, bppy_get_number)
      	(bppy_get_thread, bppy_get_task, bppy_get_hit_count)
      	(bppy_get_ignore_count): Use gdb_py_object_from_longest.
      47f0e2ff
    • Tom Tromey's avatar
      Don't use PyLong_FromUnsignedLong · 512116ce
      Tom Tromey authored
      This changes gdb to avoid PyLong_FromUnsignedLong, preferring
      gdb_py_object_from_ulongest instead.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python.c (gdbpy_parameter_value): Use
      	gdb_py_object_from_ulongest.
      512116ce
    • Tom Tromey's avatar
      Don't use PyLong_FromLongLong · 4ab1029c
      Tom Tromey authored
      This changes gdb to avoid PyLong_FromLongLong, preferring to use
      gdb_py_object_from_longest instead.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/py-infevents.c (create_register_changed_event_object):
      	Use gdb_py_object_from_longest.
      	* python/py-exitedevent.c (create_exited_event_object): Use
      	gdb_py_object_from_longest.
      4ab1029c
    • Tom Tromey's avatar
      Don't use PyLong_FromLong · 062534d4
      Tom Tromey authored
      This changes gdb to avoid PyLong_FromLong, preferring to
      gdb_py_object_from_longest instead.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python.c (gdbpy_parameter_value): Use
      	gdb_py_object_from_longest.
      	* python/py-type.c (convert_field, typy_range): Use
      	gdb_py_object_from_longest.
      	* python/py-tui.c (gdbpy_tui_width, gdbpy_tui_height): Use
      	gdb_py_object_from_longest.
      	* python/py-lazy-string.c (stpy_get_length): Use
      	gdb_py_object_from_longest.
      	* python/py-infthread.c (thpy_get_num, thpy_get_global_num): Use
      	gdb_py_object_from_longest.
      	* python/py-infevents.c (create_memory_changed_event_object): Use
      	gdb_py_object_from_longest.
      	* python/py-inferior.c (infpy_get_num): Use
      	gdb_py_object_from_longest.
      	(infpy_get_pid): Likewise.
      062534d4
    • Tom Tromey's avatar
      Don't use gdb_py_long_from_ulongest · d1cab987
      Tom Tromey authored
      Remove the gdb_py_long_from_ulongest defines and change the Python
      layer to prefer gdb_py_object_from_ulongest.  While writing this I
      noticed that the error handling in archpy_disassemble was incorrect --
      it could call PyDict_SetItemString with a NULL value.  This patch also
      fixes this bug.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python-internal.h (gdb_py_long_from_ulongest): Remove
      	defines.
      	* python/py-value.c (valpy_long): Use
      	gdb_py_object_from_ulongest.
      	* python/py-symtab.c (salpy_get_pc): Use
      	gdb_py_object_from_ulongest.
      	(salpy_get_last): Likewise.
      	* python/py-record-btrace.c (recpy_bt_insn_pc): Use
      	gdb_py_object_from_ulongest.
      	* python/py-lazy-string.c (stpy_get_address): Use
      	gdb_py_object_from_ulongest.
      	* python/py-frame.c (frapy_pc): Use gdb_py_object_from_ulongest.
      	* python/py-arch.c (archpy_disassemble): Use
      	gdb_py_object_from_ulongest and gdb_py_object_from_longest.  Fix
      	error handling.
      d1cab987
    • Tom Tromey's avatar
      Don't use gdb_py_long_from_longest · 4bde49dc
      Tom Tromey authored
      Change the Python layer to avoid gdb_py_long_from_longest, and remove
      the defines.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python-internal.h (gdb_py_long_from_longest): Remove
      	defines.
      	* python/py-value.c (valpy_long): Use gdb_py_object_from_longest.
      	* python/py-type.c (convert_field, typy_get_sizeof): Use
      	gdb_py_object_from_longest.
      	* python/py-record-btrace.c (btpy_list_index): Use
      	gdb_py_object_from_longest.
      4bde49dc
    • Tom Tromey's avatar
      Don't use PyInt_FromSsize_t · 37431074
      Tom Tromey authored
      Change the Python layer to avoid PyInt_FromSsize_t, and remove the
      compatibility define.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python-internal.h (PyInt_FromSsize_t): Remove define.
      	* python/py-record.c (recpy_element_number): Use
      	gdb_py_object_from_longest.
      	(recpy_gap_number): Likewise.
      37431074
  2. Sep 15, 2020
    • Tom Tromey's avatar
      Avoid running one Rust test against older LLVM · 08cc37dd
      Tom Tromey authored
      LLVM 8.0 introduced some changes to let the Rust compiler emit DWARF
      variant parts.  Before this change, the compiler would emit two types
      with the same name, and unfortunately gdb happens to pick the wrong
      one.  So, this patch disables the test when using an older version of
      LLVM.
      
      gdb/testsuite/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	PR rust/26197:
      	* lib/rust-support.exp (rust_llvm_version): New proc.
      	* gdb.rust/simple.exp: Check rust_llvm_version.
      08cc37dd
    • Tom Tromey's avatar
      Remove ui::num · cbe25684
      Tom Tromey authored
      I noticed that nothing uses ui::num, so this patch removes it.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* top.c (ui::ui): Update.
      	(highest_ui_num): Remove.
      	* top.h (struct ui) <num>: Remove.
      cbe25684
    • Tom Tromey's avatar
      Use arrays rather than pointers for global string constants · db92ac45
      Tom Tromey authored
      My understanding is that it's mildly better to use a static const
      array, as opposed to a "const char *", for a global string constant,
      when possible.  This makes sense to me because the pointer requires a
      load from an address, whereas the array is just the address.
      
      So, I searched for these in gdb and gdbserver.  This patch fixes the
      ones I found.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* unittests/memory-map-selftests.c (valid_mem_map): Now array.
      	* ui-style.c (ansi_regex_text): Now array.
      	* rust-exp.y (number_regex_text): Now array.
      	* linespec.c (linespec_quote_characters): Now array.
      	* jit.c (jit_break_name, jit_descriptor_name, reader_init_fn_sym):
      	Now arrays.
      
      gdbserver/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* linux-x86-low.cc (xmltarget_i386_linux_no_xml)
      	(xmltarget_amd64_linux_no_xml): Now arrays.
      db92ac45
    • Alan Modra's avatar
      PR26610, ARM's "VFPv3 vldr to vmov" gas testcase fail · 7e30b1eb
      Alan Modra authored
      I removed a few too many parentheses in git commit 7af67752.  This
      patch fixes that problem, rewriting the expression so it won't happen
      again.  The patch also avoids more UB with shifts of signed values.
      
      	PR 26610
      	* config/tc-arm.c (move_or_literal_pool): Correct extraction of
      	bignum.  Use unsigned "v"
      	(is_double_a_single): Make "v" and "mantissa" unsigned.  Formatting.
      	(double_to_single): Likewise.
      7e30b1eb
    • Nick Clifton's avatar
      Add note about creating a bugzilla tag for a point release. · 5b3eb5ed
      Nick Clifton authored
      	* README-how-to-make-a-release (https): Add a reminder to create a
      	new Bugzilla tag for the point release, once it has been published.
      5b3eb5ed
    • Nick Clifton's avatar
      Fix the assembler's new .nop directive so that the input line pointer is preserved. · f36eda1f
      Nick Clifton authored
      	* read.c (s_nop): Preserve the input_line_pointer around the call
      	to md_assemble.
      	* config/tc-s12z.c (md_assemble): Revert previous delta.
      f36eda1f
    • David Faust's avatar
      Change the /nop directive for the BPF port of the assembler to use the... · 6db99906
      David Faust authored
      Change the /nop directive for the BPF port of the assembler to use the encoding expected by the kernel.
      
      	* config/tc-bpf.h (md_single_noop_insn): Use 'ja 0' for no-op.
      6db99906
    • Simon Marchi's avatar
      gdb: introduce debuginfod_client_up type · d2b31b67
      Simon Marchi authored
      Introduce and use a unique pointer specialization for the
      debuginfod_client type.  The deleter calls debuginfod_end to free the
      client.
      
      gdb/ChangeLog:
      
      	* debuginfod-support.c (debuginfod_client_deleter): New.
      	(debuginfod_client_up): New.
      	(debuginfod_init): Return debuginfod_client_up.
      	(debuginfod_source_query): Adjust.
      	(debuginfod_debuginfo_query): Adjust.
      
      Change-Id: Ie56441e123ab80b78e5311c824c162cd804f68c0
      d2b31b67
    • Simon Marchi's avatar
      gdb: use make_unique_xstrdup in debuginfod-support.c · 3246bd8e
      Simon Marchi authored
      Use make_unique_xstrdup instead of reset + xstrdup.
      
      gdb/ChangeLog:
      
      	* debuginfod-support.c (debuginfod_source_query): Use
      	make_unique_xstrdup.
      
      Change-Id: Iee9524fea7630b4d6ee5c74e30c60fe222dc1d2c
      3246bd8e
    • Simon Marchi's avatar
      gdb: remove TYPE_INSTANCE_FLAGS · 10242f36
      Simon Marchi authored
      Remove it, use the `type::instance_flags` method everywhere.
      
      gdb/ChangeLog:
      
      	* gdbtypes.h (TYPE_INSTANCE_FLAGS): Remove, replace all uses
      	with `type::instance_flags`.
      
      Change-Id: I3653108b712e6186529cb0102e2b70247bbcabbe
      10242f36
    • Hans-Peter Nilsson's avatar
      CRIS: fix PR ld/26589, a missing NULL check in fix for PR ld/22269 · 4a8f181d
      Hans-Peter Nilsson authored
      Not sure why there wasn't a NULL check in the ld/22269 patch
      (e01c16a8) at the time, as there was one for the corresponding patch
      to elf32-m68k.c (5056ba1d).
      
      Incidentally, I had missed that in 2017, as a prerequisite for the
      ld/22269 series, the check_relocs function finally were made "safe"!
      (I.e. the number of references and symbol types are final, garbage
      collection done, so port-specific accounting can be made sanely.)
      
      Committed.
      
      bfd:
      	PR ld/26589
      	* elf32-cris.c (cris_elf_check_relocs): Add missing NULL check
      	on argument before calling UNDEFWEAK_NO_DYNAMIC_RELOC.
      
      ld:
      	PR ld/26589
      	* testsuite/ld-elf/pr26589.d, testsuite/ld-elf/locref3.s: New test.
      4a8f181d
    • Michael Mullin's avatar
      gdb: fix compile break when HAVE_LIBEXPAT is not defined · e1044e6a
      Michael Mullin authored
      Fixes:
      
            CXX    xml-tdesc.o
          /home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c: In function const target_desc* file_read_description_xml(const char*):
          /home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c:681:60: error: too few arguments to function target_desc* tdesc_parse_xml(const char*, xml_fetch_another, void*)
            681 |   return tdesc_parse_xml (tdesc_str->data (), fetch_another);
                |                                                            ^
          /home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c:44:1: note: declared here
             44 | tdesc_parse_xml (const char *document, xml_fetch_another fetcher,
                | ^~~~~~~~~~~~~~~
      
      Commit 8400a90d ("gdb: change xml_fetch_another a function_view")
      removed the `baton` parameter of `tdesc_parse_xml`, but didn't update
      the version of the function used when GDB is built with no libexpat
      support.  Remove the parameter in that definition too.
      
      gdb/ChangeLog:
      
      	* xml-tdesc.c [!defined(HAVE_LIBEXPAT)] (tdesc_parse_xml):
      	Remove baton parameter.
      
      Change-Id: I4ad29fbb7c3323f30ce5204c2976eaea16151a2e
      e1044e6a
    • GDB Administrator's avatar
      Automatic date update in version.in · aea44f64
      GDB Administrator authored
      aea44f64
    • Pedro Alves's avatar
      Rewrite enum_flags, add unit tests, fix problems · 04902b09
      Pedro Alves authored
      This patch started by adding comprehensive unit tests for enum_flags.
      
      For the testing part, it adds:
      
       - tests of normal expected uses of the API.
      
       - checks that _invalid_ uses of the API would fail to compile.  I.e.,
         it validates that enum_flags really is a strong type, and that
         incorrect mixing of enum types would be caught at compile time.  It
         pulls that off making use of SFINEA and C++11's decltype/constexpr.
      
      This revealed many holes in the enum_flags API.  For example, the f1
      assignment below currently incorrectly fails to compile:
      
       enum_flags<flags> f1 = FLAG1;
       enum_flags<flags> f2 = FLAG2 | f1;
      
      The unit tests also revealed that this useful use case doesn't work:
      
          enum flag { FLAG1 = 1, FLAG2 = 2 };
          enum_flags<flag> src = FLAG1;
          enum_flags<flag> f1 = condition ? src : FLAG2;
      
      It fails to compile because enum_flags<flag> and flag are convertible
      to each other.
      
      Turns out that making enum_flags be implicitly convertible to the
      backing raw enum type was not a good idea.
      
      If we make it convertible to the underlying type instead, we fix that
      ternary operator use case, and, we find cases throughout the codebase
      that should be using the enum_flags but were using the raw backing
      enum instead.  So it's a good change overall.
      
      Also, several operators were missing.
      
      These holes and more are plugged by this patch, by reworking how the
      enum_flags operators are implemented, and making use of C++11's
      feature of being able to delete methods/functions.
      
      There are cases in gdb/compile/ where we need to call a function in a
      C plugin API that expects the raw enum.  To address cases like that,
      this adds a "raw()" method to enum_flags.  This way we can keep using
      the safer enum_flags to construct the value, and then be explicit when
      we need to get at the raw enum.
      
      This makes most of the enum_flags operators constexpr.  Beyond
      enabling more compiler optimizations and enabling the new unit tests,
      this has other advantages, like making it possible to use operator|
      with enum_flags values in switch cases, where only compile-time
      constants are allowed:
      
          enum_flags<flags> f = FLAG1 | FLAG2;
          switch (f)
            {
            case FLAG1 | FLAG2:
      	break;
            }
      
      Currently that fails to compile.
      
      It also switches to a different mechanism of enabling the global
      operators.  The current mechanism isn't namespace friendly, the new
      one is.
      
      It also switches to C++11-style SFINAE -- instead of wrapping the
      return type in a SFINAE-friently structure, we use an unnamed template
      parameter.  I.e., this:
      
        template <typename enum_type,
      	    typename = is_enum_flags_enum_type_t<enum_type>>
        enum_type
        operator& (enum_type e1, enum_type e2)
      
      instead of:
      
        template <typename enum_type>
        typename enum_flags_type<enum_type>::type
        operator& (enum_type e1, enum_type e2)
      
      Note that the static_assert inside operator~() was converted to a
      couple overloads (signed vs unsigned), because static_assert is too
      late for SFINAE-based tests, which is important for the CHECK_VALID
      unit tests.
      
      Tested with gcc {4.8, 7.1, 9.3} and clang {5.0.2, 10.0.0}.
      
      gdb/ChangeLog:
      
      	* Makefile.in (SELFTESTS_SRCS): Add
      	unittests/enum-flags-selftests.c.
      	* btrace.c (ftrace_update_caller, ftrace_fixup_calle): Use
      	btrace_function_flags instead of enum btrace_function_flag.
      	* compile/compile-c-types.c (convert_qualified): Use
      	enum_flags::raw.
      	* compile/compile-cplus-symbols.c (convert_one_symbol)
      	(convert_symbol_bmsym):
      	* compile/compile-cplus-types.c (compile_cplus_convert_method)
      	(compile_cplus_convert_struct_or_union_methods)
      	(compile_cplus_instance::convert_qualified_base):
      	* go-exp.y (parse_string_or_char): Add cast to int.
      	* unittests/enum-flags-selftests.c: New file.
      	* record-btrace.c (btrace_thread_flag_to_str): Change parameter's
      	type to btrace_thread_flags from btrace_thread_flag.
      	(record_btrace_cancel_resume, record_btrace_step_thread): Change
      	local's type to btrace_thread_flags from btrace_thread_flag.  Add
      	cast in DEBUG call.
      
      gdbsupport/ChangeLog:
      
      	* enum-flags.h: Include "traits.h".
      	(DEF_ENUM_FLAGS_TYPE): Declare a function instead of defining a
      	structure.
      	(enum_underlying_type): Update comment.
      	(namespace enum_flags_detail): New.  Move struct zero_type here.
      	(EnumIsUnsigned, EnumIsSigned): New.
      	(class enum_flags): Make most methods constexpr.
      	(operator&=, operator|=, operator^=): Take an enum_flags instead
      	of an enum_type.  Make rvalue ref versions deleted.
      	(operator enum_type()): Delete.
      	(operator&, operator|, operator^, operator~): Delete, moved out of
      	class.
      	(raw()): New method.
      	(is_enum_flags_enum_type_t): Declare.
      	(ENUM_FLAGS_GEN_BINOP, ENUM_FLAGS_GEN_COMPOUND_ASSIGN)
      	(ENUM_FLAGS_GEN_COMP): New.  Use them to reimplement global
      	operators.
      	(operator~): Now constexpr and reimplemented.
      	(operator<<, operator>>): New deleted functions.
      	* valid-expr.h (CHECK_VALID_EXPR_5, CHECK_VALID_EXPR_6): New.
      04902b09
    • Pedro Alves's avatar
      Rewrite valid-expr.h's internals in terms of the detection idiom (C++17/N4502) · 1945192c
      Pedro Alves authored
      An earlier attempt at doing this had failed (wouldn't work in GCCs
      around 4.8, IIRC), but now that I try again, it works.  I suspect that
      my previous attempt did not use the pre C++14-safe void_t (in
      traits.h).
      
      I want to switch to this model because:
      
       - It's the standard detection idiom that folks will learn starting
         with C++17.
      
       - In the enum_flags unit tests, I have a static_assert that triggers
         a warning (resulting in build error), which GCC does not suppress
         because the warning is not being triggered in the SFINAE context.
         Switching to the detection idiom fixes that.  Alternatively,
         switching to the C++03-style expression-validity checking with a
         varargs overload would allow addressing that, but I think that
         would be going backwards idiomatically speaking.
      
       - While this patch shows a net increase of lines of code, the magic
         being added to traits.h can be removed in a few years when we start
         requiring C++17.
      
      gdbsupport/ChangeLog:
      
      	* traits.h (struct nonesuch, struct detector, detected_or)
      	(detected_or_t, is_detected, detected_t, detected_or)
      	(detected_or_t, is_detected_exact, is_detected_convertible): New.
      	* valid-expr.h (CHECK_VALID_EXPR_INT): Use gdb::is_detected_exact.
      1945192c
    • Pedro Alves's avatar
      Rename address_space_int_to_name/address_space_name_to_int · 69896a2c
      Pedro Alves authored
      These methods now take/return a type_instance_flags instead of a raw
      integer, so rename them accordingly.
      
      gdb/ChangeLog:
      
      	* c-typeprint.c (c_type_print_modifier): Adjust to rename.
      	* gdbtypes.c (address_space_name_to_int): Rename to ...
      	(address_space_name_to_type_instance_flags): ... this.
      	(address_space_int_to_name): Rename to ...
      	(address_space_type_instance_flags_to_name): ... this.
      	* gdbtypes.h (address_space_name_to_int): Rename to ...
      	(address_space_name_to_type_instance_flags): ... this.
      	(address_space_int_to_name): Rename to ...
      	(address_space_type_instance_flags_to_name): ... this.
      	* type-stack.c (type_stack::insert): Adjust to rename.
      	* type-stack.h (type_stack::insert): Likewise.
      69896a2c
    • Pedro Alves's avatar
      Use type_instance_flags more throughout · 314ad88d
      Pedro Alves authored
      A later patch in this series will rewrite enum_flags fixing some API
      holes.  That would cause build failures around code using
      type_instance_flags.  Or rather, that should be using it, but wasn't.
      
      This patch fixes it by using type_instance_flags throughout instead of
      plain integers.
      
      Note that we can't make the seemingly obvious change to struct
      type::instance_flags:
      
       -  unsigned instance_flags : 9;
       +  ENUM_BITFIELD (type_instance_flag_value) instance_flags : 9;
      
      Because G++ complains then that 9 bits isn't sufficient for holding
      all values of type_instance_flag_value.
      
      So the patch adds an type::instance_flags() method, which takes care
      of casting appropriately, and adds a separate type::set_instance_flags
      method, following the pattern of the ongoing TYPE_XXX macro
      elimination.  This converts uses of TYPE_INSTANCE_FLAGS to
      type::instance_flags() in the places where the code was already being
      touched, but there are still many references to the
      TYPE_INSTANCE_FLAGS macro left behind.  Those could/should be fully
      replaced at some point.
      
      gdb/ChangeLog:
      
      	* avr-tdep.c (avr_address_class_type_flags): Return
      	type_instance_flags.
      	(avr_address_class_type_flags_to_name): Take a
      	type_instance_flags.
      	(avr_address_class_name_to_type_flags): Return bool and take a
      	type_instance_flags.
      	* d-lang.c (build_d_types): Use type::set_instance_flags.
      	* ft32-tdep.c (ft32_address_class_type_flags): Return
      	type_instance_flags.
      	(ft32_address_class_type_flags_to_name): Take a
      	type_instance_flags.
      	(ft32_address_class_name_to_type_flags): Return bool and take a
      	type_instance_flags.
      	(ft32_gdbarch_init): Use type::set_instance_flags.
      	* eval.c (fake_method::fake_method): Use type::set_instance_flags.
      	* gdbarch.h, gdbarch.c: Regenerate.
      	* gdbarch.sh (address_class_type_flags): Use type_instance_flags.
      	(address_class_name_to_type_flags): Use type_instance_flags and
      	bool.
      	* gdbtypes.c (address_space_name_to_int)
      	(address_space_int_to_name, make_qualified_type): Use
      	type_instance_flags.
      	(make_qualified_type): Use type_instance_flags and
      	type::set_instance_flags.
      	(make_type_with_address_space, make_cv_type, make_vector_type)
      	(check_typedef): Use type_instance_flags.
      	(recursive_dump_type): Cast type_instance_flags to unsigned for
      	printing.
      	(copy_type_recursive): Use type::set_instance_flags.
      	(gdbtypes_post_init): Use type::set_instance_flags.
      	* gdbtypes.h (struct type) <instance_flags>: Rename to ...
      	<m_instance_flags>: ... this.
      	<instance_flags, set_instance_flags>: New methods.
      	(TYPE_INSTANCE_FLAGS): Use the instance_flags method.
      	(SET_TYPE_INSTANCE_FLAGS): New.
      	(address_space_name_to_int, address_space_int_to_name)
      	(make_type_with_address_space): Pass flags using
      	type_instance_flags instead of int.
      	* stabsread.c (cleanup_undefined_types_noname): Use
      	type::set_instance_flags.
      	* s390-tdep.c (s390_address_class_type_flags): Return
      	type_instance_flags.
      	(s390_address_class_type_flags_to_name): Take a
      	type_instance_flags.
      	(s390_address_class_name_to_type_flags): Return bool and take a
      	type_instance_flags.
      	* type-stack.c (type_stack::follow_types): Use
      	type_instance_flags.
      	* dwarf2/read.c (read_tag_pointer_type): Use type_instance_flags.
      314ad88d
    • Tom Tromey's avatar
      Apply 'const' in more places · 27087b7f
      Tom Tromey authored
      Many global arrays in gdb could be marked "const" but are not.  This
      patch changes some of them.  (There may be other arrays that could
      benefit from this treatment.  I only examined arrays of strings.)
      
      This lets the linker move some symbols to the readonly data section.
      For example, previously:
      
      0000000000000000 d _ZL18can_use_agent_enum
      
      is now:
      
      0000000000000030 r _ZL18can_use_agent_enum
      
      2020-09-14  Tom Tromey  <tromey@adacore.com>
      
      	* x86-tdep.h (x86_in_indirect_branch_thunk): Update.
      	* x86-tdep.c (x86_is_thunk_register_name)
      	(x86_in_indirect_branch_thunk): Update.
      	* sparc64-tdep.c (sparc64_fpu_register_names)
      	(sparc64_cp0_register_names, sparc64_register_names)
      	(sparc64_pseudo_register_names): Now const.
      	* sparc-tdep.h (struct gdbarch_tdep) <fpu_register_names,
      	cp0_registers_num>: Now const.
      	* sparc-tdep.c (sparc_core_register_names)
      	(sparc32_fpu_register_names, sparc32_cp0_register_names)
      	(sparc32_pseudo_register_names): Now const.
      	(validate_tdesc_registers): Update.
      	* rust-lang.c (rust_extensions): Now const.
      	* p-lang.c (p_extensions): Now const.
      	* objc-lang.c (objc_extensions): Now const.
      	* nto-tdep.c (nto_thread_state_str): Now const.
      	* moxie-tdep.c (moxie_register_names): Now const.
      	* mips-tdep.h (struct gdbarch_tdep) <mips_processor_reg_names>:
      	Now const.
      	* mips-tdep.c (mips_generic_reg_names, mips_tx39_reg_names)
      	(mips_linux_reg_names): Now const.
      	(mips_gdbarch_init): Update.
      	* microblaze-tdep.c (microblaze_register_names): Now const.
      	* m68k-tdep.c (m68k_register_names): Now const.
      	* m32r-tdep.c (m32r_register_names): Now const.
      	* ia64-tdep.c (ia64_register_names): Now const.
      	* i386-tdep.h (struct gdbarch_tdep) <register_names,
      	ymmh_register_names, ymm16h_regnum, mpx_register_names,
      	k_register_names, zmmh_register_names, xmm_avx512_register_names,
      	ymm_avx512_register_names, pkeys_register_names>: Now const.
      	* i386-tdep.c (i386_register_names, i386_zmm_names)
      	(i386_zmmh_names, i386_k_names, i386_ymm_names, i386_ymmh_names)
      	(i386_mpx_names, i386_pkeys_names, i386_bnd_names)
      	(i386_mmx_names, i386_byte_names, i386_word_names): Now const.
      	* f-lang.c (f_extensions): Now const.
      	* d-lang.c (d_extensions): Now const.
      	* csky-tdep.c (csky_register_names): Now const.
      	* charset.c (default_charset_names, charset_enum): Now const.
      	(_initialize_charset): Update.
      	* c-lang.c (c_extensions, cplus_extensions, asm_extensions): Now
      	const.
      	* bsd-uthread.c (bsd_uthread_solib_names): Now const.
      	(bsd_uthread_solib_loaded): Update.
      	(bsd_uthread_state): Now const.
      	* amd64-tdep.c (amd64_register_names, amd64_ymm_names)
      	(amd64_ymm_avx512_names, amd64_ymmh_names)
      	(amd64_ymmh_avx512_names, amd64_mpx_names, amd64_k_names)
      	(amd64_zmmh_names, amd64_zmm_names, amd64_xmm_avx512_names)
      	(amd64_pkeys_names, amd64_byte_names, amd64_word_names)
      	(amd64_dword_names): Now const.
      	* agent.c (can_use_agent_enum): Now const.
      	* ada-tasks.c (task_states, long_task_states): Now const.
      	* ada-lang.c (known_runtime_file_name_patterns)
      	(known_auxiliary_function_name_patterns, attribute_names)
      	(standard_exc, ada_extensions): Now const.
      
      gdbserver/ChangeLog
      2020-09-14  Tom Tromey  <tromey@adacore.com>
      
      	* tracepoint.cc (eval_result_names): Now const.
      	* ax.cc (gdb_agent_op_names): Now const.
      27087b7f
    • Simon Marchi's avatar
      gdb: turn gdb::bcache's function pointers into virtual methods · 89806626
      Simon Marchi authored
      The two function pointers optionally passed to gdb::bcache are very good
      candidates to be turned into virtual methods, this patch does that in
      the most straightforward / unsurprising way.
      
      gdb/ChangeLog:
      
      	* bcache.h (struct bcache) <bcache>: Remove constructor.
      	<m_hash_function, m_compare_function>: Remove.
      	<~bcache>: Make virtual.
      	<compare>: Remove static method, introduce virtual method.
      	<default_hash>: Remove.
      	<hash>: New virtual method.
      	* bcache.c (bcache::expand_hash_table): Update.
      	(bcache::insert): Update.
      	(bcache::hash): New.
      	(bcache::compare): Update comment and parameter names.
      	* gdbtypes.c (types_deeply_equal): Update.
      	* psymtab.h (struct psymbol_bcache): New struct.
      	(class psymtab_storage) <psymtab_storage>: Make default.
      	<psymbol_cache>: Change type to psymbol_bcache.
      	* psymtab.c (psymtab_storage::psymtab_storage): Remove.
      	(psymbol_hash): Change to...
      	(psymbol_bcache::hash): ... this.
      	(psymbol_compare): Change to...
      	(psymbol_bcache::compare): ... this.
      
      Change-Id: I41d578e61de8ac1163461a28fbd220d1f855e372
      89806626
  3. Sep 14, 2020
    • Nick Clifton's avatar
      Fix support for theassembler's new ".nop" directive on the IA64 target. · 2ddc8f01
      Nick Clifton authored
      	* config/tc-ia64.h (md_single_noop_insn): Define.
      2ddc8f01
    • Simon Marchi's avatar
      gdb: don't use inferior_ptid in linux_nat_wait_1 · 677c92fe
      Simon Marchi authored
      target_ops::wait implementations should not rely on the value of
      inferior_ptid on entry.  While looking at another wait-related patch, I
      noticed that the code in linux_nat_wait_1, checking for a newly created
      process, did just that.  This patch fixes it.  Note that I didn't see
      any bug, this "fix" is simply to make the function respect the
      target_ops::wait contract.
      
      Instead of checking inferior_ptid, check for the passed in `ptid`
      value.
      
      During startup, linux_nat_wait_1 gets called a few times with the
      pid-only ptid, while startup_inferior waits for the expected number of
      exec events.  For this reason, I needed to add a `find_lwp_pid` call to
      ensure that the actions of changing the main thread's ptid, and adding
      the initial lwp, were done only once for a given process.
      
      This was not needed before, since thread_change_ptid, through the
      thread_ptid_changed observer, ends up changing inferior_ptid.  So the
      second time around, inferior_ptid was not a pid-only ptid.
      
      That find_lwp_pid won't add much overhead, as it will only be called
      when the ptid is a pid-only ptid.  And AFAIK, that only happens during
      inferior startup.
      
      An alternative to that `find_lwp_pid` call might be to make
      startup_inferior realize that the main thread has changed ptid, and make
      it wait for the new ptid.  But that doesn't look easy to do.
      
      Regtested on amd64/Linux.
      
      gdb/ChangeLog:
      
      	* linux-nat.c (linux_nat_wait_1): Don't use inferior_ptid when
      	checking for initial lwp.
      
      Change-Id: I8f1d5c766f5cb2a29c948bc75fa4582d7130c23f
      677c92fe
    • Tom Tromey's avatar
      Various m68k fixes for gdb · 3eba3a01
      Tom Tromey authored
      Recently I tried the m68k port of gdb.  It had some issues, which are
      fixed in this patch.
      
      * Various types of return values were not being handled properly.  In
        particular:
      
        * arrays are returned by following the same convention as
          structures.  This matters in languages like Ada, where an array
          can in fact be returned as a value.
      
        * "long double" was not being handled correctly in
          m68k_svr4_return_value.
      
        * GCC's m68k back end does not return vector types in registers, so
          change gdb to follow.
      
        * GCC's m68k back end doesn't faithfully implement the ABI, and so
          some objects with unusual size (not possible in C, but possible in
          Ada) are not returned correctly.
      
      * gcc implements an m68k ABI variant that it simply describes as
        "embedded".  This ABI is similar to the SVR4 ABI, but rather than
        returning pointer-typed values in %a0, such values are returned in
        %d0.  To support this, an ELF osabi sniffer is added.
      
      * Commit 85f7484a ("m68k: tag floating-point ABI used") adds an
        attribute that can be used to recognize when hard- or soft-float is
        in use.  gdb can now read this tag and choose the ABI accordingly.
      
      I was unable to run the gdb test suite with this patch.  Instead, I
      tested it using qemu and the internal AdaCore test suite.
      
      gdb/ChangeLog
      2020-09-14  Tom Tromey  <tromey@adacore.com>
      
      	* m68k-tdep.c (m68k_extract_return_value): Use
      	pointer_result_regnum.
      	(m68k_store_return_value): Likewise.
      	(m68k_reg_struct_return_p): Handle vectors and arrays.
      	(m68k_return_value): Handle arrays.
      	(m68k_svr4_return_value): Fix single-element aggregate handling.
      	Handle long double.  Adjust for embedded ABI.
      	(m68k_svr4_init_abi): Set pointer_result_regnum.
      	(m68k_embedded_init_abi): New function.
      	(m68k_gdbarch_init): Handle Tag_GNU_M68K_ABI_FP.
      	(m68k_osabi_sniffer): New function.
      	(_initialize_m68k_tdep): Register osabi sniffer.
      	* m68k-tdep.h (struct gdbarch_tdep) <pointer_result_regnum>: New
      	member.
      3eba3a01
    • Simon Marchi's avatar
      gdb: remove xfree in xml-support.c · 33f4dd48
      Simon Marchi authored
      Replace an xfree with automatic memory management with a unique pointer.
      
      gdb/ChangeLog:
      
      	* xml-support.c (xml_fetch_content_from_file): Replace xfree
      	with gdb::unique_xmalloc_ptr<char>.
      
      Change-Id: Ia4d735b383e3b9eb660f445f2c7f2c5e27411b64
      33f4dd48
    • Simon Marchi's avatar
      gdb: change xml_fetch_another a function_view · 8400a90d
      Simon Marchi authored
      The xml_fetch_another is currently a plain function pointer type, with a
      `void *` baton parameter.  To improve type-safety, change this to a
      function_view.  Any required data is captured by a lambda at the call
      site.
      
      gdb/ChangeLog:
      
      	* xml-support.h (xml_fetch_another): Change type to be a
      	function_view.
      	(xml_process_xincludes): Remove baton parameter.
      	(xml_fetch_content_from_file): Change baton parameter to
      	dirname.
      	* xml-support.c (struct xinclude_parsing_data)
      	<xinclude_parsing_data>: Remove baton parameter.
      	<fetcher_baton>: Remove.
      	(xinclude_start_include): Adjust.
      	(xml_process_xincludes): Adjust.
      	(xml_fetch_content_from_file): Replace baton parameter with
      	dirname.
      	* xml-syscall.c (syscall_parse_xml): Remove baton parameter.
      	(xml_init_syscalls_info): Use a lambda.
      	* xml-tdesc.c (tdesc_parse_xml): Remove baton parameter.
      	(file_read_description_xml): Use a lambda.
      	(fetch_available_features_from_target): Change baton parameter
      	to target_ops.
      	(target_read_description_xml): Use a lambda.
      	(target_fetch_description_xml): Use a lambda.
      	(string_read_description_xml): Update.
      
      Change-Id: I7ba4b8f5e97fc6a952c6c20ccc3be92a06cc2bd2
      8400a90d
    • Nick Clifton's avatar
      Add a new ".nop" directive to the assembler to allow the creation of no-op... · b1766e7c
      Nick Clifton authored
      Add a new ".nop" directive to the assembler to allow the creation of no-op instructions in an architeture neutral manner.
      
      	* read.c (s_nop): New function.  Handles the .nop directive.
      	(potable): Add entry for "nop".
      	(s_nops): Code tidy.
      	* read.h (s_nop): Add prototype.
      	* config/tc-bpf.h (md_single_noop_insn): Define.
      	* config/tc-mmix.h (md_single_noop_insn): Define.
      	* config/tc-or1k.h (md_single_noop_insn): Define.
      	* config/tc-s12z.c (md_assemble): Preserve the input line pointer,
      	rather than corrupting it.
      	* write.c (relax_segment): Update error message regarding
      	non-absolute values passed to .fill and .nops.
      	* NEWS: Mention the new directive.
      	* doc/as.texi: Document the new directive.
      	* doc/internals.texi: Document the new internal macros used to
      	implement the new directive.
      	* testsuite/gas/all/nop.s: New test.
      	* testsuite/gas/all/nop.d: New test control file.
      	* testsuite/gas/all/gas.exp: Run the new test.
      	* testsuite/gas/elf/dwarf-5-nop-for-line-table.s: New test.
      	* testsuite/gas/elf/dwarf-5-nop-for-line-table.d: New test
      	control file.
      	* testsuite/gas/elf/elf.exp: Run the new test.
      	* testsuite/gas/i386/space1.l: Adjust expected output.
      b1766e7c
    • Simon Marchi's avatar
      gdb: remove TYPE_ENDIANITY_NOT_DEFAULT · 04f5bab2
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): Remove, replace all
      	uses with type::endianity_is_not_default.
      
      Change-Id: I61956093c8ce6703299e913746ba91313108a0f2
      04f5bab2
    • Simon Marchi's avatar
      gdb: add type::endianity_is_not_default / type::set_endianity_is_not_default · db558e34
      Simon Marchi authored
      Add the `endianity_is_not_default` and `set_endianity_is_not_default`
      methods on `struct type`, in order to remove the
      `TYPE_ENDIANITY_NOT_DEFAULT` macro.  In this patch, the macro is changed
      to use the getter, so all the call sites of the macro that are used as a
      setter are changed to use the setter method directly.  The next patch
      will remove the macro completely.
      
      gdb/ChangeLog:
      
      	* gdbtypes.h (struct type) <endianity_is_not_default,
      	set_endianity_is_not_default>: New methods.
      	(TYPE_ENDIANITY_NOT_DEFAULT): Use
      	type::endianity_is_not_default, change all write call sites to
      	use type::set_endianity_is_not_default.
      
      Change-Id: I67acd68fcdae424d7e4a601afda78612ad5d92db
      db558e34
    • Simon Marchi's avatar
      gdb: remove TYPE_FIXED_INSTANCE · 22c4c60c
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* gdbtypes.h (TYPE_FIXED_INSTANCE): Remove, replace all
      	uses with type::is_fixed_instance.
      
      Change-Id: I57731b5ab44aac7d8896a32b9c7481891baea51a
      22c4c60c
    • Simon Marchi's avatar
      gdb: add type::is_fixed_instance / type::set_is_fixed_instance · 9cdd0d12
      Simon Marchi authored
      Add the `is_fixed_instance` and `set_is_fixed_instance` methods on `struct
      type`, in order to remove the `TYPE_FIXED_INSTANCE` macro.  In this patch, the
      macro is changed to use the getter, so all the call sites of the macro that are
      used as a setter are changed to use the setter method directly.  The next patch
      will remove the macro completely.
      
      gdb/ChangeLog:
      
      	* gdbtypes.h (struct type) <is_fixed_instance,
      	set_is_fixed_instance>: New methods.
      	(TYPE_FIXED_INSTANCE): Use type::is_fixed_instance, change all
      	write call sites to use type::set_is_fixed_instance.
      
      Change-Id: I4401d81512fab9eab4232bbea48ce6c7d586b94c
      9cdd0d12
    • Simon Marchi's avatar
      gdb: remove TYPE_GNU_IFUNC · 0becda7a
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* gdbtypes.h (TYPE_GNU_IFUNC): Remove, replace all
      	uses with type::is_gnu_ifunc.
      
      Change-Id: I72aae22599b5e582910c5d50588feaf159032bd8
      0becda7a
    • Simon Marchi's avatar
      gdb: add type::is_gnu_ifunc / type::set_is_gnu_ifunc · 03cc7249
      Simon Marchi authored
      Add the `is_gnu_ifunc` and `set_is_gnu_ifunc` methods on `struct type`, in
      order to remove the `TYPE_GNU_IFUNC` macro.  In this patch, the macro is
      changed to use the getter, so all the call sites of the macro that are
      used as a setter are changed to use the setter method directly.  The
      next patch will remove the macro completely.
      
      gdb/ChangeLog:
      
      	* gdbtypes.h (struct type) <is_gnu_ifunc, set_is_gnu_ifunc>: New methods.
      	(TYPE_GNU_IFUNC): Use type::is_gnu_ifunc, change all write call sites to
      	use type::set_is_gnu_ifunc.
      
      Change-Id: Ic23ba8c5b8e589d9fc368385111aa16a94e014e2
      03cc7249
    • Simon Marchi's avatar
      gdb: remove TYPE_STUB_SUPPORTED · 3f46044c
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* gdbtypes.h (TYPE_STUB_SUPPORTED): Remove, replace all
      	uses with type::stub_is_supported.
      
      Change-Id: I69dbc32a619455605b7f934a701bc36bd664b7c0
      3f46044c
    • Simon Marchi's avatar
      gdb: add type::stub_is_supported / type::set_stub_is_supported · 9baccff6
      Simon Marchi authored
      Add the `stub_is_supported` and `set_stub_is_supported` methods on `struct type`, in
      order to remove the `TYPE_STUB_SUPPORTED` macro.  In this patch, the macro is
      changed to use the getter, so all the call sites of the macro that are
      used as a setter are changed to use the setter method directly.  The
      next patch will remove the macro completely.
      
      gdb/ChangeLog:
      
      	* gdbtypes.h (struct type) <stub_is_supported, set_stub_is_supported>: New methods.
      	(TYPE_STUB_SUPPORTED): Use type::stub_is_supported, change all write call sites to
      	use type::set_stub_is_supported.
      
      Change-Id: I4dfecf2b5df9c2b7bb8db1e9252082140adf3028
      9baccff6