1. Nov 17, 2020
  2. Nov 16, 2020
    • Tom Tromey's avatar
      Update gdb.dwarf2/data-loc.exp · 119e99bb
      Tom Tromey authored
      Tom de Vries pointed out that the series to handle
      -fgnat-encodings=minimal regressed data-loc.exp:
      
      https://sourceware.org/pipermail/gdb-patches/2020-November/173035.html
      
      This was my oversight.  Looking at the test, it mimics what GNAT
      emits.  The patch series in question changed the approach that gdb
      takes to such arrays -- now they are transformed back into "old" style
      structures.  (This is perhaps a step backward in a semantics sense,
      but on the other hand it more accurately reflects the underlying
      reality, and lets gdb continue to create objects of this type.)
      
      This patch updates the test case, by adjusting the expected output.
      It also removes the tests done in the C language, because they are now
      incorrect, and because (IMO) they don't add much value.
      
      gdb/testsuite/ChangeLog
      2020-11-16  Tom Tromey  <tromey@adacore.com>
      
      	* gdb.dwarf2/data-loc.exp: Update expected output.  Remove C
      	tests.
      119e99bb
    • Pedro Alves's avatar
      Fix frame cycle detection · 2b3cb400
      Pedro Alves authored
      The recent commit to make scoped_restore_current_thread's cdtors
      exception free regressed gdb.base/eh_return.exp:
      
        Breakpoint 1, 0x00000000004012bb in eh2 (gdb/frame.c:641: internal-error: frame_id get_frame_id(frame_info*): Assertion `stashed' failed.
        A problem internal to GDB has been detected,
        further debugging may prove unreliable.
        Quit this debugging session? (y or n) FAIL: gdb.base/eh_return.exp: hit breakpoint (GDB internal error)
      
      That testcase uses __builtin_eh_return and, before the regression, the
      backtrace at eh2 looked like this:
      
       (gdb) bt
       #0  0x00000000004006eb in eh2 (p=0x4006ec <continuation>) at src/gdb/testsuite/gdb.base/eh_return.c:54
       Backtrace stopped: previous frame identical to this frame (corrupt stack?)
      
      That "previous frame identical to this frame" is caught by the cycle
      detection based on frame id.
      
      The assertion failing is this one:
      
       638           /* Since this is the first frame in the chain, this should
       639              always succeed.  */
       640           bool stashed = frame_stash_add (fi);
       641           gdb_assert (stashed);
      
      originally added by
      
        commit f245535c
        Author:     Pedro Alves <palves@redhat.com>
        AuthorDate: Mon Sep 5 18:41:38 2016 +0100
      
            Fix PR19927: Avoid unwinder recursion if sniffer uses calls parse_and_eval
      
      The assertion is failing because frame #1's frame id was stashed
      before the id of frame #0 is stashed.  The frame id of frame #1 was
      stashed here:
      
       (top-gdb) bt
       #0  frame_stash_add (frame=0x1e24c90) at src/gdb/frame.c:276
       #1  0x0000000000669c1b in get_prev_frame_if_no_cycle (this_frame=0x19f8370) at src/gdb/frame.c:2120
       #2  0x000000000066a339 in get_prev_frame_always_1 (this_frame=0x19f8370) at src/gdb/frame.c:2303
       #3  0x000000000066a360 in get_prev_frame_always (this_frame=0x19f8370) at src/gdb/frame.c:2319
       #4  0x000000000066b56c in get_frame_unwind_stop_reason (frame=0x19f8370) at src/gdb/frame.c:3028
       #5  0x000000000059f929 in dwarf2_frame_cfa (this_frame=0x19f8370) at src/gdb/dwarf2/frame.c:1462
       #6  0x00000000005ce434 in dwarf_evaluate_loc_desc::get_frame_cfa (this=0x7fffffffc070) at src/gdb/dwarf2/loc.c:666
       #7  0x00000000005989a9 in dwarf_expr_context::execute_stack_op (this=0x7fffffffc070, op_ptr=0x1b2a053 "\364\003", op_end=0x1b2a053 "\364\003") at src/gdb/dwarf2/expr.c:1161
       #8  0x0000000000596af6 in dwarf_expr_context::eval (this=0x7fffffffc070, addr=0x1b2a052 "\234\364\003", len=1) at src/gdb/dwarf2/expr.c:303
       #9  0x0000000000597b4e in dwarf_expr_context::execute_stack_op (this=0x7fffffffc070, op_ptr=0x1b2a063 "", op_end=0x1b2a063 "") at src/gdb/dwarf2/expr.c:865
       #10 0x0000000000596af6 in dwarf_expr_context::eval (this=0x7fffffffc070, addr=0x1b2a061 "\221X", len=2) at src/gdb/dwarf2/expr.c:303
       #11 0x00000000005c8b5a in dwarf2_evaluate_loc_desc_full (type=0x1b564d0, frame=0x19f8370, data=0x1b2a061 "\221X", size=2, per_cu=0x1b28760, per_objfile=0x1a84930, subobj_type=0x1b564d0, subobj_byte_offset=0) at src/gdb/dwarf2/loc.c:2260
       #12 0x00000000005c9243 in dwarf2_evaluate_loc_desc (type=0x1b564d0, frame=0x19f8370, data=0x1b2a061 "\221X", size=2, per_cu=0x1b28760, per_objfile=0x1a84930) at src/gdb/dwarf2/loc.c:2444
       #13 0x00000000005cb769 in locexpr_read_variable (symbol=0x1b59840, frame=0x19f8370) at src/gdb/dwarf2/loc.c:3687
       #14 0x0000000000663137 in language_defn::read_var_value (this=0x122ea60 <c_language_defn>, var=0x1b59840, var_block=0x0, frame=0x19f8370) at src/gdb/findvar.c:618
       #15 0x0000000000663c3b in read_var_value (var=0x1b59840, var_block=0x0, frame=0x19f8370) at src/gdb/findvar.c:822
       #16 0x00000000008c7d9f in read_frame_arg (fp_opts=..., sym=0x1b59840, frame=0x19f8370, argp=0x7fffffffc470, entryargp=0x7fffffffc490) at src/gdb/stack.c:542
       #17 0x00000000008c89cd in print_frame_args (fp_opts=..., func=0x1b597c0, frame=0x19f8370, num=-1, stream=0x1aba860) at src/gdb/stack.c:890
       #18 0x00000000008c9bf8 in print_frame (fp_opts=..., frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, print_args=1, sal=...) at src/gdb/stack.c:1394
       #19 0x00000000008c92b9 in print_frame_info (fp_opts=..., frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, print_args=1, set_current_sal=1) at src/gdb/stack.c:1119
       #20 0x00000000008c75f0 in print_stack_frame (frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, set_current_sal=1) at src/gdb/stack.c:366
       #21 0x000000000070250b in print_stop_location (ws=0x7fffffffc9e0) at src/gdb/infrun.c:8110
       #22 0x0000000000702569 in print_stop_event (uiout=0x1a8b9e0, displays=true) at src/gdb/infrun.c:8126
       #23 0x000000000096d04b in tui_on_normal_stop (bs=0x1bcd1c0, print_frame=1) at src/gdb/tui/tui-interp.c:98
       ...
      
      Before the commit to make scoped_restore_current_thread's cdtors
      exception free, scoped_restore_current_thread's dtor would call
      get_frame_id on the selected frame, and we use
      scoped_restore_current_thread pervasively.  That had the side effect
      of stashing the frame id of frame #0 before reaching the path shown in
      the backtrace.  I.e., the frame id of frame #0 happened to be stashed
      before the frame id of frame #1.  But that was by chance, not by
      design.
      
      This commit:
      
        commit 256ae5db
        Author:     Kevin Buettner <kevinb@redhat.com>
        AuthorDate: Mon Oct 31 12:47:42 2016 -0700
      
            Stash frame id of current frame before stashing frame id for previous frame
      
      Fixed a similar problem, by making sure get_prev_frame computes the
      frame id of the current frame before unwinding the previous frame, so
      that the cycle detection works properly.  That fix misses the scenario
      we're now running against, because if you notice, the backtrace above
      shows that frame #4 calls get_prev_frame_always, not get_prev_frame.
      I.e., nothing is calling get_frame_id on the current frame.
      
      The fix here is to move Kevin's fix down from get_prev_frame to
      get_prev_frame_always.  Or actually, a bit further down to
      get_prev_frame_always_1 -- note that inline_frame_this_id calls
      get_prev_frame_always, so we need to be careful to avoid recursion in
      that scenario.
      
      gdb/ChangeLog:
      
      	* frame.c (get_prev_frame): Move get_frame_id call from here ...
      	(get_prev_frame_always_1): ... to here.
      	* inline-frame.c (inline_frame_this_id): Mention
      	get_prev_frame_always_1 in comment.
      
      Change-Id: Id960c98ab2d072c48a436c3eb160cc4b2a5cfd1d
      2b3cb400
    • Nick Clifton's avatar
      Update the Spanish translation for the ld/ subdirectory. · 10c9f4e5
      Nick Clifton authored
      	* po/es.po: Updated Spanish translation.
      10c9f4e5
    • Shahab Vahedi's avatar
      ld: Fix the tls_ie-01 test for arc · 315d05eb
      Shahab Vahedi authored
      The purpose of the test is to look for entries of "foo" and
      "bar" in the ".got".  The old "objdump -s ..." has been replaced
      with "objdump -D ..." to inspect the final executable.  A sample
      output looks like:
      
      ------------------------8<------------------------
      
      $ arc-elf32-objdump -D -j .got tls_ie-01
      
      tls_ie-01:     file format elf32-littlearc
      
      Disassembly of section .got:
      
      00002110 <_GLOBAL_OFFSET_TABLE_>:
              ...
          211c:       08 00 00 00        .word   0x00000008
          2120:       0c 00 00 00        .word   0x0000000c
      
      ------------------------>8------------------------
      
      ld/
      	* testsuite/ld-arc/tls_ie-01.d: Update the dump command.
      315d05eb
    • GDB Administrator's avatar
      Automatic date update in version.in · 5778e0dd
      GDB Administrator authored
      5778e0dd
  3. Nov 15, 2020
    • Joel Brobecker's avatar
      Add support for fixed-point type comparison operators · b74dbc20
      Joel Brobecker authored
      This patch adds support for binary comparison operators with
      fixed-point type values.
      
      gdb/ChangeLog:
      
              * valarith.c (fixed_point_binop): Add BINOP_EQUAL and BINOP_LESS
              handling.
              (value_less): Add fixed-point handling.
      
      gdb/testsuite/ChangeLog:
      
              * gdb.ada/fixed_cmp.exp: Add -fgnat-encodings=minimal testing.
              * gdb.dwarf2/dw2-fixed-point.c (pck__fp1_var2): New global.
              (main): Add reference to pck__fp1_var2.
              * gdb.dwarf2/dw2-fixed-point.exp: Add comparison operator testing.
      b74dbc20
    • Joel Brobecker's avatar
      Add support for fixed-point type arithmetic · 0a12719e
      Joel Brobecker authored
      This patch adds support for binary operations on fixed-point values,
      as well as for the negative unary operator.
      
      gdb/ChangeLog:
      
              * eval.c (binop_promote): Add fixed-point type handling.
              * valarith.c (fixed_point_binop): New function.
              (scalar_binop): Add fixed-point type handling.
              (value_neg): Add fixed-point type handling.
              * valops.c (value_cast_to_fixed_point): New function.
              (value_cast): Add fixed-point type handling.
      
      gdb/testsuite/ChangeLog:
      
              * gdb.dwarf2/dw2-fixed-point.exp: Add arithmetic tests.
      0a12719e
    • Joel Brobecker's avatar
      Add ptype support for DWARF-based fixed-point types · 0c9150e4
      Joel Brobecker authored
      Note that the ptype information printed for types described
      via pure DWARF debug info is slightly less informative as
      the one printed when the information is encoded in the type's
      name, via the GNAT encoding. As a result, the output in
      the case of DWARF-described fixed point types is slightly
      different. In pratice, this is no real loss because the information
      not available in DWARF has no bearing on how the type is actually
      stored in memory.
      
      gdb/ChangeLog:
      
              * ada-typeprint.c (ada_print_type): Add handing of fixed-point
              range types.
              * c-typeprint.c (c_type_print_varspec_prefix)
              (c_type_print_varspec_suffix, c_type_print_base_1): Add
              TYPE_CODE_FIXED_POINT handling.
              * p-typeprint.c (pascal_type_print_varspec_prefix)
              (pascal_type_print_varspec_suffix): Likewise.
              * typeprint.c (print_type_fixed_point): New function.
              * typeprint.h (print_type_fixed_point): Add declaration.
      
      gdb/testsuite/ChangeLog:
      
              * gdb.ada/fixed_points.exp: Add ptype tests.
              * gdb.dwarf2/dw2-fixed-point.exp: Likewise.
      0c9150e4
    • Joel Brobecker's avatar
      fix printing of DWARF fixed-point type objects with format modifier · b26daff9
      Joel Brobecker authored
      Consider a fixed-point type such the scaling factor is 1/16,
      as the following Ada code snippet would create:
      
            type FP1_Type is delta 0.1 range -1.0 .. +1.0;
            FP1_Var : FP1_Type := 0.25;
      
      Printing the value of this variable with a format modifier yields
      the wrong value. E.g.:
      
          (gdb) p /x fp1_var
          $6 = 0x4
      
      Since the real value is 0.25, we therefore expected...
      
          (gdb) p /x fp1_var
          $6 = 0x0
      
      What happens, in this case, is that the value being printed is
      actually the "raw" value of our object, before the scaling factor
      gets applied.
      
      This commit fixes the issue by using approach as for float values,
      where we convert the value into an integer value, prior to printing,
      knowing that the conversion takes the scaling factor into account.
      
      gdb/ChangeLog:
      
              * printcmd.c (print_scalar_formatted): Add fixed-point type
              handling when options->format is set.
      
      gdb/testsuite/ChangeLog:
      
              * gdb.dwarf2/dw2-fixed-point.exp: Add "print /x" tests.
      b26daff9
    • Joel Brobecker's avatar
      Add support for printing value of DWARF-based fixed-point type objects · 09584414
      Joel Brobecker authored
      This commit introduces a new kind of type, meant to describe
      fixed-point types, using a new code added specifically for
      this purpose (TYPE_CODE_FIXED_POINT).
      
      It then adds handling of fixed-point base types in the DWARF reader.
      
      And finally, as a first step, this commit adds support for printing
      the value of fixed-point type objects.
      
      Note that this commit has a known issue: Trying to print the value
      of a fixed-point object with a format letter (e.g. "print /x NAME")
      causes the wrong value to be printed because the scaling factor
      is not applied. Since the fix for this issue is isolated, and
      this is not a regression, the fix will be made in a pach of its own.
      This is meant to simplify review and archeology.
      
      Also, other functionalities related to fixed-point type handling
      (ptype, arithmetics, etc), will be added piecemeal as well, for
      the same reasons (faciliate reviews and archeology). Related to this,
      the testcase gdb.ada/fixed_cmp.exp is adjusted to compile the test
      program with -fgnat-encodings=all, so as to force the use of GNAT
      encodings, rather than rely on the compiler's default to use them.
      The intent is to enhance this testcase to also test the pure DWARF
      approach using -fgnat-encodings=minimal as soon as the corresponding
      suport gets added in. Thus, the modification to the testcase is made
      in a way that it prepares this testcase to be tested in both modes.
      
      gdb/ChangeLog:
      
              * ada-valprint.c (ada_value_print_1): Add fixed-point type handling.
              * dwarf2/read.c (get_dwarf2_rational_constant)
              (get_dwarf2_unsigned_rational_constant, finish_fixed_point_type)
              (has_zero_over_zero_small_attribute): New functions.
              read_base_type, set_die_type): Add fixed-point type handling.
              * gdb-gdb.py.in: Add fixed-point type handling.
              * gdbtypes.c: #include "gmp-utils.h".
              (create_range_type, set_type_code): Add fixed-point type handling.
              (init_fixed_point_type): New function.
              (is_integral_type, is_scalar_type): Add fixed-point type handling.
              (print_fixed_point_type_info): New function.
              (recursive_dump_type, copy_type_recursive): Add fixed-point type
              handling.
              (fixed_point_type_storage): New typedef.
              (fixed_point_objfile_key): New static global.
              (allocate_fixed_point_type_info, is_fixed_point_type): New functions.
              (fixed_point_type_base_type, fixed_point_scaling_factor): New
              functions.
              * gdbtypes.h: #include "gmp-utils.h".
              (enum type_code) <TYPE_SPECIFIC_FIXED_POINT>: New enum.
              (union type_specific) <fixed_point_info>: New field.
              (struct fixed_point_type_info): New struct.
              (INIT_FIXED_POINT_SPECIFIC, TYPE_FIXED_POINT_INFO): New macros.
              (init_fixed_point_type, is_fixed_point_type)
              (fixed_point_type_base_type, fixed_point_scaling_factor)
              (allocate_fixed_point_type_info): Add declarations.
              * valprint.c (generic_val_print_fixed_point): New function.
              (generic_value_print): Add fixed-point type handling.
              * value.c (value_as_address, unpack_long): Add fixed-point type
              handling.
      
      gdb/testsuite/ChangeLog:
      
              * gdb.ada/fixed_cmp.exp: Force compilation to use -fgnat-encodings=all.
              * gdb.ada/fixed_points.exp: Add fixed-point variables printing tests.
              * gdb.ada/fixed_points/pck.ads, gdb.ada/fixed_points/pck.adb:
              New files.
              * gdb.ada/fixed_points/fixed_points.adb: Add use of package Pck.
      
              * gdb.dwarf2/dw2-fixed-point.c, gdb.dwarf2/dw2-fixed-point.exp:
              New files.
      09584414
    • Joel Brobecker's avatar
      Move uinteger_pow gdb/valarith.c to gdb/utils.c and make it public · e55c6530
      Joel Brobecker authored
      This is a generic function which I would like to use in a followup
      patch adding support for fixed-point types. So this commit moves it
      out of valarith.c into util.c, and makes it non-static.
      
      gdb/ChangeLog:
      
              * utils.h (uinteger_pow): Add declaration.
              * utils.c (uinteger_pow): Moved here (without changes)...
              * valarith.c (uinteger_pow): ... from here.
      e55c6530
    • Joel Brobecker's avatar
      gmp-utils: New API to simply use of GMP's integer/rational/float objects · b34c74ab
      Joel Brobecker authored
      This API was motivated by a number of reasons:
        - GMP's API does not handle "long long" and "unsigned long long",
          so using LONGEST and ULONGEST is not straightforward;
        - Automate the need to initialize GMP objects before use, and
          clear them when no longer used.
      
      However, this API grew also to help with similar matter such
      as formatting to a string, and also reading/writing fixed-point
      values from byte buffers.
      
      Dedicated unit testing is also added.
      
      gdb/ChangeLog:
      
              * gmp-utils.h,  gmp-utils.h: New file.
              * unittests/gmp-utils-selftests.c: New file.
              * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
              unittests/gmp-utils-selftests.c.
              (COMMON_SFILES) Add gmp-utils.c.
              (HFILES_NO_SRCDIR): Add gmp-utils.h.
      b34c74ab
    • Joel Brobecker's avatar
      gdb: Make GMP a required dependency for building GDB · 1b4ac058
      Joel Brobecker authored
      This commit modifies gdb's configure script to trigger an error
      if we cannot find a usable libgmp.
      
      For the record, making this a requirement was discussed in March 2018:
      https://sourceware.org/pipermail/gdb-patches/2018-March/147373.html
      
      gdb/ChangeLog:
      
              * configure.ac: Generate an error if a usable GMP library
              could not be found.
              * configure: Regenerate.
      1b4ac058
    • Joel Brobecker's avatar
      gdb/configure: Add --with-libgmp-prefix option · 2c947d9b
      Joel Brobecker authored
      This patch allows a user to tell gdb's configure script where
      his GMP library is installed.
      
      gdb/ChangeLog:
      
              * configure.ac: Add support for --with-libgmp-prefix.
              * Makefile.in (LIBGMP): New variable.
              (CLIBS): Include $(LIBGMP).
              * configure, config.in: Regenerate
      2c947d9b
    • GDB Administrator's avatar
      Automatic date update in version.in · 0eb994e5
      GDB Administrator authored
      0eb994e5
    • Andrew Burgess's avatar
      gdb: add tab completion of type field names for Fortran · 9dd02fc0
      Andrew Burgess authored
      Add support for tab-completion on Fortran field names.  Consider this
      test case:
      
       program test
         type my_type
            integer :: field_a
            integer :: other_field
            integer :: last_field
         end type my_type
      
         type(my_type) :: var
      
         print *, var
       end program test
      
      And the GDB session before this patch:
      
       (gdb) start
       ...
       (gdb) p var%                   <- Trigger TAB completion here.
       Display all 200 possibilities? (y or n) n
       (gdb) p var%
      
      And the GDB session with this patch:
      
       (gdb) start
       ...
       (gdb) p var%                   <- Trigger TAB completion here.
       field_a      last_field   other_field
       (gdb) p var%
      
      The implementation for this is basically copied from c-exp.y, I
      tweaked the parser patterns to be appropriate for Fortran, and it
      "just worked".
      
      gdb/ChangeLog:
      
      	PR cli/26879
      	* f-exp.y (COMPLETE): New token.
      	(exp): Two new rules for tab-completion.
      	(saw_name_at_eof): New static global.
      	(last_was_structop): Likewise.
      	(yylex): Set new variables, and return COMPLETE token at the end
      	of the input stream in some cases.
      
      gdb/testsuite/ChangeLog:
      
      	PR cli/26879
      	* gdb.fortran/completion.exp: New file.
      	* gdb.fortran/completion.f90: New file.
      9dd02fc0
    • Tom Tromey's avatar
      Use "bool" in fetch_inferior_event · 758cb810
      Tom Tromey authored
      A while back I noticed that fetch_inferior_event used "int" for
      should_stop, whereas it can be bool.  The method it is assigned from:
      
      	      should_stop = thread_fsm->should_stop (thr);
      
      ... already returns bool.
      
      Tested by rebuilding.
      
      gdb/ChangeLog
      2020-11-14  Tom Tromey  <tom@tromey.com>
      
      	* infrun.c (fetch_inferior_event): Use "bool" for should_stop.
      758cb810
    • Tom Tromey's avatar
      Add use of const in opencl-lang.c · 749065b7
      Tom Tromey authored
      I found another expression-related spot that could use constification.
      This patch adds it.  Tested by rebuilding.
      
      gdb/ChangeLog
      2020-11-14  Tom Tromey  <tom@tromey.com>
      
      	* opencl-lang.c (opencl_component_ref): Make "comps" const.
      749065b7
    • Simon Marchi's avatar
      gdb: fix comment in arm-tdep.c · 2c5b1849
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* arm-tdep.c (class arm_instruction_reader) <read>: Fix comment.
      
      Change-Id: I8f5355b314e8db643b645a6281042f514b46a908
      2c5b1849
  4. Nov 14, 2020
    • Borislav Petkov's avatar
      x86: Ignore CS/DS/ES/SS segment-override prefixes in 64-bit mode · 0fa0fc85
      Borislav Petkov authored
      "In 64-bit mode, the CS, DS, ES, and SS segment-override prefixes have
      no effect. These four prefixes are not treated as segment-override
      prefixes for the purposes of multiple-prefix rules. Instead, they are
      treated as null prefixes." (AMD APM v2).
      
      However, objdump disassembles instructions containing those ignored
      prefixes by still generating that segment override:
      
        66 66 2e 0f 1f 84 00 	data16 nopw %cs:0x0(%rax,%rax,1)
        00 00 00 00
      
      Print those segment override prefixes as excessive ones:
      
        66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
        00 00 00 00
      
      which is what they actually are - they have no effect and the decoding
      hardware ignores them.
      
      gas/
      
      2020-11-14  Borislav Petkov  <bp@suse.de>
      
      	* testsuite/gas/i386/x86-64-segovr.d: Adjust regexes.
      	* testsuite/gas/i386/x86-64-nops.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-1.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-1-g64.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-1-core2.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-1-k8.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-2.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-3.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-4.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-4-core2.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-4-k8.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-5.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-5-k8.d: Likewise.
      	* testsuite/gas/i386/x86-64-nops-7.d: Likewise.
      	* testsuite/gas/i386/x86-64-nop-1.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-1a.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-1b.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-1c.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-1d.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-1g.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-2c.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-6.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-7.d: Likewise.
      	* testsuite/gas/i386/x86-64-align-branch-8.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-1-core2.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-1-k8.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-1.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-2.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-3.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-4-core2.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-4-k8.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-4.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-5-k8.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops-5.d: Likewise.
      	* testsuite/gas/i386/ilp32/x86-64-nops.d:: Likewise.
      
      ld/
      
      2020-11-14  Borislav Petkov  <bp@suse.de>
      
      	* testsuite/ld-x86-64/pe-x86-64-4.od: Adjust regexes.
      	* testsuite/ld-x86-64/tlsld3.dd: Likewise.
      	* testsuite/ld-x86-64/tlsld4.dd: Likewise.
      
      opcodes/
      
      2020-11-14  Borislav Petkov  <bp@suse.de>
      
      	* i386-dis.c (ckprefix): Do not assign active_seg_prefix in
      	64-bit addressing mode.
      	(NOTRACK_Fixup): Test prefixes for PREFIX_DS, instead of
      	active_seg_prefix.
      0fa0fc85
    • Tom Tromey's avatar
      Use const more in c-lang.c · e8b2f0d9
      Tom Tromey authored
      This changes a few functions in c-lang.c to add "const" to parameters
      and return types.  Tested by rebuilding.
      
      gdb/ChangeLog
      2020-11-13  Tom Tromey  <tom@tromey.com>
      
      	* c-lang.c (convert_ucn, convert_octal, convert_hex)
      	(convert_escape, parse_one_string): Constify.
      e8b2f0d9
    • GDB Administrator's avatar
      Automatic date update in version.in · 1aa9981f
      GDB Administrator authored
      1aa9981f
    • H.J. Lu's avatar
      elf: Set rel_from_abs to 1 for __ehdr_start · cbd5b99c
      H.J. Lu authored
      bfdlink.h has
      
        /* Symbol will be converted from absolute to section-relative.  Set for
           symbols defined by a script from "dot" (also SEGMENT_START or ORIGIN)
           outside of an output section statement.  */
        unsigned int rel_from_abs : 1;
      
      linker.c has
      
      .{* Return TRUE if the symbol described by a linker hash entry H
      .   is going to be absolute.  Linker-script defined symbols can be
      .   converted from absolute to section-relative ones late in the
      .   link.  Use this macro to correctly determine whether the symbol
      .   will actually end up absolute in output.  *}
      .#define bfd_is_abs_symbol(H) \
      .  (((H)->type == bfd_link_hash_defined \
      .    || (H)->type == bfd_link_hash_defweak) \
      .   && bfd_is_abs_section ((H)->u.def.section) \
      .   && !(H)->rel_from_abs)
      .
      
      Set rel_from_abs to 1 for __ehdr_start which will be converted from
      absolute to section-relative in assign_file_positions_for_load_sections.
      
      	PR ld/26869
      	* ldelf.c (ldelf_before_allocation): Set rel_from_abs to 1 for
      	__ehdr_start.
      	* testsuite/ld-i386/i386.exp: Run pr26869.
      	* testsuite/ld-i386/pr26869.d: New file.
      	* testsuite/ld-i386/pr26869.s: Likewise.
      cbd5b99c
    • Keith Seitz's avatar
      Exclude debuginfo files from "outside of ELF segments" warning · 25f4c262
      Keith Seitz authored
      When GDB loads an ELF file, it will warn when a section is not located
      in an ELF segment:
      
      $ ./gdb -q -iex "set build-id-verbose 0" --ex "b systemctl_main" -ex "r" -batch --args systemctl kexec
      Breakpoint 1 at 0xc24d: file ../src/systemctl/systemctl.c, line 8752.
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libgcc_s.so.1
      [Thread debugging using libthread_db enabled]
      Using host libthread_db library "/lib64/libthread_db.so.1".
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libcap.so.2
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libacl.so.1
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libcryptsetup.so.12
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libgcrypt.so.20
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libip4tc.so.2
      [snip]
      This has feature has also been reported by various users, most notably
      the Fedora-EOL'd bug 1553086.
      
      Mark Wielaard explains the issue quite nicely in
      
         https://sourceware.org/bugzilla/show_bug.cgi?id=24717#c2
      
      The short of it is, the ELF program headers for debuginfo files are
      not suited to this particular use case. Consequently, the warning
      generated above really is useless and should be ignored.
      
      This patch follows the same heuristic that BFD itself uses.
      
      gdb/ChangeLog
      2020-11-13  Keith Seitz  <keiths@redhat.com>
      
      	https://bugzilla.redhat.com/show_bug.cgi?id=1553086
      	* elfread.c (elf_symfile_segments): Omit "Loadable section ...
      	outside of ELF segments" warning for debugin
      25f4c262
    • Keith Seitz's avatar
      Add file name to "Loadable section ... outside of ELF segments" warning · 9d3ab915
      Keith Seitz authored
      As requested in gdb/23034, I would like to extend the warning message
      GDB displays when it detects a loadable section that is outside any
      ELF segment.
      
      Before:
      
      $ gdb -q --ex "b systemctl_main" -ex "r" -batch --args systemctl kexec
      Breakpoint 1 at 0xc24d: file ../src/systemctl/systemctl.c, line 8752.
      warning: Loadable section ".note.gnu.property" outside of ELF segments
      [Thread debugging using libthread_db enabled]
      Using host libthread_db library "/lib64/libthread_db.so.1".
      warning: Loadable section ".note.gnu.property" outside of ELF segments
      warning: Loadable section ".note.gnu.property" outside of ELF segments
      warning: Loadable section ".note.gnu.property" outside of ELF segments
      warning: Loadable section ".note.gnu.property" outside of ELF segments
      [snip]
      
      Breakpoint 1, systemctl_main (argv=0x7fffffffd348, argc=2) at ../src/systemctl/systemctl.c:8752
      8752                    r = systemctl_main(argc, argv);
      
      After:
      
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libcap.so.2
      warning: Loadable section ".note.gnu.property" outside of ELF segments
        in .gnu_debugdata for /lib64/libacl.so.1
      [snip]
      
      I think this is eminently more useful output.
      
      gdb/ChangeLog
      2020-11-13  Keith Seitz  <keiths@redhat.com>
      
      	PR gdb/23034
      	* elfread.c (elf_symfile_segments): Output a BFD file name
      	for the "Loadable section ... outside of ELF segments" warning.
      9d3ab915
    • Simon Marchi's avatar
      gdb/arm: avoid undefined behavior shift when decoding immediate value · 9ecab40c
      Simon Marchi authored
      When loading the code file provided in PR 26828 and GDB is build with
      UBSan, we get:
      
          Core was generated by `./Foo'.
          Program terminated with signal SIGABRT, Aborted.
          #0  0xb6c3809c in pthread_cond_wait () from /home/simark/build/binutils-gdb/gdb/repo/lib/libpthread.so.0
          [Current thread is 1 (LWP 29367)]
          (gdb) bt
          /home/simark/src/binutils-gdb/gdb/arm-tdep.c:1551:30: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
      
      The sequence of instructions at pthread_cond_wait, in the
      libpthread.so.0 library, contains this instruction with an immediate
      constant with a "rotate amount" of 0:
      
          e24dd044        sub     sp, sp, #68     ; 0x44
      
      Since arm_analyze_prologue shifts by "32 - rotate amount", it does a 32
      bit shift of a 32 bit type, which is caught by UBSan.
      
      Fix it by factoring out the decoding of immediates in a new function,
      arm_expand_immediate.
      
      I added a selftest for arm_analyze_prologue that replicates the
      instruction sequence.  Without the fix, it crashes GDB if it is build
      with --enable-ubsan.
      
      I initially wanted to re-use the abstract_memory_reader class already in
      arm-tdep.c, used to make arm_process_record testable.  However,
      arm_process_record and arm_analyze_prologue don't use the same kind of
      memory reading functions.  arm_process_record uses a function that
      returns an error status on failure while arm_analyze_prologue uses one
      that throws an exception.  Since i didn't want to introduce any other
      behavior change, I decided to just introduce a separate interface
      (arm_instruction_reader).  It is derived from
      abstract_instruction_reader in aarch64-tdep.c.
      
      gdb/ChangeLog:
      
      	PR gdb/26835
      	* arm-tdep.c (class arm_instruction_reader): New.
      	(target_arm_instruction_reader): New.
      	(arm_analyze_prologue): Add instruction reader parameter and use
      	it.  Use arm_expand_immediate.
      	(class target_arm_instruction_reader): Adjust.
      	(arm_skip_prologue): Adjust.
      	(arm_expand_immediate): New.
      	(arm_scan_prologue): Adjust.
      	(arm_analyze_prologue_test): New.
      	(class test_arm_instruction_reader): New.
      
      Change-Id: Ieb1c1799bd66f8c7421384f44f5c2777b578ff8d
      9ecab40c
    • Joseph Myers's avatar
      Fix Windows-target testing in gdb_file_cmd · 5643c500
      Joseph Myers authored
      GCC for Windows target produces executables called foo.exe when given
      "-o foo".  (More specifically, it's done that for native compilers for
      a long time, and for cross compilers to Windows target since GCC
      commit 5bc86b599054f494ec0a45e49b82749320eaa9c4, in GCC 8 and later.)
      This causes problems for many GDB tests expecting a program to have
      the exact file name passed to -o.
      
      Fix this by checking for the case where only the .exe exists in
      gdb_file_cmd and adjusting the name passed to the file command
      accordingly.  There may well be other places with this issue in the
      GDB testsuite, but this fix allows many tests to succeed that
      previously fell over.
      
      2020-11-12  Joseph Myers  <joseph@codesourcery.com>
      
      	* lib/gdb.exp (gdb_file_cmd): Check for case where $arg.exe exists
      	but $arg does not.
      5643c500
    • Nick Clifton's avatar
      Fix readelf's and objdump's dislplay of DWO links when multiple links are present. · 50ea0877
      Nick Clifton authored
       PR 26829
       * dwarf.c (struct dwo_info): Add cu_offset field.
       (add_dwo_info): Add cu_offset parameter.  Record in new dwo_info
       struct.
       (add_dwo_name): Add cu_offset field.
       (add_dwo_dir): Add cu_offset field.
       (add_dwo_id): Add cu_offset field.
       (read_and_display_attr_value): Pass cu_offset to dwo recording
       functions.
       (load_separate_debug_files): Accumulate name, dir and id values
       and display once for each CU.
       * testsuite/binutils-all/dwo.sL Use a separate CU for the second
       dwo link.
       * testsuite/binutils-all/readelf.k2: Update expected output.
      50ea0877
  5. Nov 13, 2020
    • Andrew Burgess's avatar
      gdb: delete a couple of declarations from f-lang.h · 5a7cf527
      Andrew Burgess authored
      One declaration in f-lang.h is for a function that doesn't even exist,
      another is for a function that is only used within f-lang.c.
      
      One declaration is deleted, the other function I make static in
      f-lang.c.
      
      gdb/ChangeLog:
      
      	* f-lang.c (fortran_argument_convert): Add declaration.  Add
      	header comment, taken from f-lang.h.  Make static.
      	* f-lang.h (f77_get_dynamic_array_length): Delete declaration.
      	(fortran_argument_convert): Delete declaration.
      5a7cf527
    • Andre Vieira's avatar
      gas, arm: PR26858 Fix availability of single precision vmul/vmla in arm mode · 48f4d8ce
      Andre Vieira authored
      This patch fixes a mistake when enabling MVE instructions that disabled support
      for single precision vmla and vmul for arm mode.
      
      gas/ChangeLog:
      2020-11-12  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	PR 26858
      	*  config/tc-arm.c (asm_opcode insns): Fix vmul and vmla's ARM_VARIANT.
      	* testsuite/gas/arm/pr26858.s: New test.
      	* testsuite/gas/arm/pr26858.d: New test.
      48f4d8ce
    • GDB Administrator's avatar
      Automatic date update in version.in · a4ae48cc
      GDB Administrator authored
      a4ae48cc
    • Andrew Burgess's avatar
      gdb: rewrite how per language primitive types are managed · 7bea47f0
      Andrew Burgess authored
      Consider the following GDB session:
      
        $ gdb
        (gdb) set language c
        (gdb) ptype void
        type = void
        (gdb) set language fortran
        (gdb) ptype void
        No symbol table is loaded.  Use the "file" command.
        (gdb)
      
      With no symbol file loaded GDB and the language set to C GDB knows
      about the type void, while when the language is set to Fortran GDB
      doesn't know about the void, why is that?
      
      In f-lang.c, f_language::language_arch_info, we do have this line:
      
        lai->primitive_type_vector [f_primitive_type_void]
          = builtin->builtin_void;
      
      where we add the void type to the list of primitive types that GDB
      should always know about, so what's going wrong?
      
      It turns out that the primitive types are stored in a C style array,
      indexed by an enum, so Fortran uses `enum f_primitive_types'.  The
      array is allocated and populated in each languages language_arch_info
      member function.  The array is allocated with an extra entry at the
      end which is left as a NULL value, and this indicates the end of the
      array of types.
      
      Unfortunately for Fortran, a type is not assigned for each element in
      the enum.  As a result the final populated array has gaps in it, gaps
      which are initialised to NULL, and so every time we iterate over the
      list (for Fortran) we stop early, and never reach the void type.
      
      This has been the case since 2007 when this functionality was added to
      GDB in commit cad351d1.
      
      Obviously I could just fix Fortran by ensuring that either the enum is
      trimmed, or we create types for the missing types.  However, I think a
      better approach would be to move to C++ data structures and removed
      the fixed enum indexing into the array approach.
      
      After this commit the primitive types are pushed into a vector, and
      GDB just iterates over the vector in the obvious way when it needs to
      hunt for a type.  After this commit all the currently defined
      primitive types can be found when the language is set to Fortran, for
      example:
      
        $ gdb
        (gdb) set language fortran
        (gdb) ptype void
        type = void
        (gdb)
      
      A new test checks this functionality.
      
      I didn't see any other languages with similar issues, but I could have
      missed something.
      
      gdb/ChangeLog:
      
      	* ada-exp.y (find_primitive_type): Make parameter const.
      	* ada-lang.c (enum ada_primitive_types): Delete.
      	(ada_language::language_arch_info): Update.
      	* c-lang.c (enum c_primitive_types): Delete.
      	(c_language_arch_info): Update.
      	(enum cplus_primitive_types): Delete.
      	(cplus_language::language_arch_info): Update.
      	* d-lang.c (enum d_primitive_types): Delete.
      	(d_language::language_arch_info): Update.
      	* f-lang.c (enum f_primitive_types): Delete.
      	(f_language::language_arch_info): Update.
      	* go-lang.c (enum go_primitive_types): Delete.
      	(go_language::language_arch_info): Update.
      	* language.c (auto_or_unknown_language::language_arch_info):
      	Update.
      	(language_gdbarch_post_init): Use obstack_new, use array indexing.
      	(language_string_char_type): Add header comment, call function in
      	language_arch_info.
      	(language_bool_type): Likewise
      	(language_arch_info::bool_type): Define.
      	(language_lookup_primitive_type_1): Delete.
      	(language_lookup_primitive_type): Rewrite as a templated function
      	to call function in language_arch_info, then instantiate twice.
      	(language_arch_info::type_and_symbol::alloc_type_symbol): Define.
      	(language_arch_info::lookup_primitive_type_and_symbol): Define.
      	(language_arch_info::lookup_primitive_type): Define twice with
      	different signatures.
      	(language_arch_info::lookup_primitive_type_as_symbol): Define.
      	(language_lookup_primitive_type_as_symbol): Rewrite to call a
      	member function in language_arch_info.
      	* language.h (language_arch_info): Complete rewrite.
      	(language_lookup_primitive_type): Make templated.
      	* m2-lang.c (enum m2_primitive_types): Delete.
      	(m2_language::language_arch_info): Update.
      	* opencl-lang.c (OCL_P_TYPE): Delete.
      	(enum opencl_primitive_types): Delete.
      	(opencl_type_data): Delete.
      	(builtin_opencl_type): Delete.
      	(lookup_opencl_vector_type): Update.
      	(opencl_language::language_arch_info): Update, lots of content
      	moved from...
      	(build_opencl_types): ...here.  This function is now deleted.
      	(_initialize_opencl_language): Delete.
      	* p-lang.c (enum pascal_primitive_types): Delete.
      	(pascal_language::language_arch_info): Update.
      	* rust-lang.c (enum rust_primitive_types): Delete.
      	(rust_language::language_arch_info): Update.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.fortran/types.exp: Add more tests.
      7bea47f0
    • Simon Marchi's avatar
      gdb/dwarf: fix call to dwarf2_queue_guard in dw2_do_instantiate_symtab · bf6e5d01
      Simon Marchi authored
      It took me a while to understand why that would even compile: it looks
      like we pass a type name as a pointer, that makes no sense.  By looking
      at the DWARF, I understood that the compiler actually interprets it as a
      function declaration.  So the statement was doing nothing, no
      dwarf2_queue_guard was instantiated.  Fix it by passing the right
      variable name.
      
      gdb/ChangeLog:
      
      	* dwarf2/read.c (dw2_do_instantiate_symtab): Fix call to
      	dwarf2_queue_guard.
      
      Change-Id: I3a7bdead9e8c39f8342a471f10181b85b8f0d801
      bf6e5d01
    • Dimitar Dimitrov's avatar
      sim: pru: Add support for LMBD instruction · e57cf1f2
      Dimitar Dimitrov authored
      Binutils support for LMBD instruction was merged [1]. So add it also
      to simulator.
      
      LMBD instruction does left-most-bit-detection. It returns 32 if
      the given bit value is not found in the provided word value.
      
      [1] https://sourceware.org/pipermail/binutils/2020-October/113901.html
      
      sim/pru/ChangeLog:
      
      	* pru.h (RS1SEL): New macro.
      	(RS1_WIDTH): New macro.
      	* pru.isa: Describe the LMBD instruction.
      
      sim/testsuite/sim/pru/ChangeLog:
      
      	* lmbd.s: New test.
      e57cf1f2
    • Simon Marchi's avatar
      gdb/dwarf: fix typo in dwarf2/read.c · 1350c3b4
      Simon Marchi authored
      gdb/ChangeLog:
      
      	* dwarf2/read.c (dw2_do_instantiate_symtab): Fix typo in
      	comment.
      
      Change-Id: I6cb98768c04a537cf3d427648bddc57c631518e5
      1350c3b4
    • Simon Marchi's avatar
      gdb: convert "set debug dwarf-read" to new style · 6f738b01
      Simon Marchi authored
      Add dwarf_read_debug_printf and dwarf_read_debug_printf_v macros and use
      them throughout dwarf2/read.c.  The second one is used for "verbose"
      prints, when the value of "set debug dwarf-read" is >= 2.
      
      gdb/ChangeLog:
      
      	* dwarf2/read.c (dwarf_read_debug_printf,
      	dwarf_read_debug_printf_v): New macros, use throughout the file.
      
      Change-Id: I694da69da2e1f2caa4c27a421a975790636411e2
      6f738b01
    • Jozef Lawrynowicz's avatar
      MSP430: gas: Ignore -md option required for GCC backward compatibility · 1de037a0
      Jozef Lawrynowicz authored
      The redundant -md option was removed in e4ae357f, but it is required
      for backwards compatibility with GCC 10, which passes it to the
      assembler implicitly in certain situations.
      
      It is now silently ignored.
      
      gas/ChangeLog:
      
      	* config/tc-msp430.c (OPTION_MOVE_DATA): Define.
      	(md_parse_option): Ignore OPTION_MOVE_DATA.
      	(md_longopts): Handle -md option.
      	* testsuite/gas/msp430/msp430.exp: Run new test.
      	* testsuite/gas/msp430/empty.s: New test.
      	* testsuite/gas/msp430/ignore-md.d: New test.
      1de037a0