aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-08-31gdb: Add tdesc_found_register function to tdesc APIAndrew Burgess2-0/+15
This commit adds a new function to the target description API within GDB. This new function is not used in this commit, but will be used in the next commit, I'm splitting it out into a separate patch for easier review. What I want to do in the next commit is check to see if a target description supplied a particular register, however, the register in question could appear in one of two possible features. The new function allows me to ask the tdesc_arch_data whether a register was found and assigned a particular GDB register number once all of the features have been checked. I think this is a much simpler solution than adding code such that, while checking each feature, I spot if the register I'm processing is the one I care about. No tests here as the new code is not used, but this code will be exercised in the next commit.
2022-08-31gdb/riscv: improve (and fix) display of frm field in 'info registers'Andrew Burgess3-11/+182
On RISC-V the FCSR (float control/status register) is split into two parts, FFLAGS (the flags) and FRM (the rounding mode). Both of these two fields are part of the FCSR register, but can also be accessed as separate registers in their own right. And so, we have three separate registers, $fflags, $frm, and $fcsr, with the last of these being the combination of the first two. Here's how the bits of FCSR are split between FRM and FFLAGS: ,--------- FFLAGS |---| 76543210 <----- FCSR |-| '--------------FRM Here's how GDB currently displays these registers: (gdb) info registers $fflags $frm $fcsr fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 frm 0x0 FRM:0 [RNE (round to nearest; ties to even)] fcsr 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:0 [RNE (round to nearest; ties to even)] Notice the 'RD' field which is present in both $fflags and $fcsr. This field contains the value of the FRM field, which makes sense when displaying the $fcsr, but makes no sense when displaying $fflags, as the $fflags doesn't include the FRM field. Additionally, the $fcsr already includes an FRM field, so the information in 'RD' is duplicated. Consider this: (gdb) set $frm = 0x3 (gdb) info registers $fflags $frm $fcsr │ fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 frm 0x3 FRM:3 [RUP (Round up towards +INF)] fcsr 0x60 RD:3 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:3 [RUP (Round up towards +INF)] See how the 'RD' field in $fflags still displays 0, while the 'RD' and 'FRM' fields in $fcsr show the same information. The first change I propose in this commit is to remove the 'RD' field. After this change the output now looks like this: (gdb) info registers $fflags $frm $fcsr fflags 0x0 NV:0 DZ:0 OF:0 UF:0 NX:0 frm 0x0 FRM:0 [RNE (round to nearest; ties to even)] fcsr 0x0 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:0 [RNE (round to nearest; ties to even)] Next, I spotted that the text that goes along with the 'FRM' field was not wrapped in the i18n markers for internationalisation, so I added those. Next, I spotted that: (gdb) set $frm=0x7 (gdb) info registers $fflags $frm $fcsr fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 frm 0x7 FRM:3 [RUP (Round up towards +INF)] fcsr 0xe0 RD:7 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:3 [RUP (Round up towards +INF)] Notice that despite being a 3-bit field, FRM masks to 2-bits. Checking the manual I can see that the FRM field is 3-bits, and is defined for all 8 values. That GDB masks to 2-bits is just a bug I think, so I've fixed this. Finally, the 'FRM' text for value 0x7 is wrong. Currently we use the text 'dynamic rounding mode' for value 0x7. However, this is not really correct. A RISC-V instruction can either encode the rounding mode within the instruction, or a RISC-V instruction can choose to use a global, dynamic rounding mode. So, for the rounding-mode field of an _instruction_ the value 0x7 indicates "dynamic round mode", the instruction should defer to the rounding mode held in the FRM field of the $fcsr. But it makes no sense for the FRM of $fcsr to itself be set to 0x7 (dynamic rounding mode), and indeed, section 11.2, "Floating-Point Control and Status Register" of the RISC-V manual, says that a value of 0x7 in the $fcsr FRM field is invalid, and if an instruction has _its_ round-mode set to dynamic, and the FRM field is also set to 0x7, then an illegal instruction exception is raised. And so, I propose changing the text for value 0x7 of the FRM field to be "INVALID[7] (Dynamic rounding mode)". We already use the text "INVALID[5]" and "INVALID[6]" for the two other invalid fields, however, I think adding the extra "Dynamic round mode" hint might be helpful. I've added a new test that uses 'info registers' to check what GDB prints for the three registers related to this patch. There is one slight oddity with this test - for the fflags and frm registers, the test accepts both the "normal" output (as described above), but also allows these registers to be reported as '<unavailable>'. The reason why I accept <unavailable> is that currently, the RISC-V, native Linux target advertises these registers in its target description, but then doesn't support reading or writing of these registers, this results in the registers being reported as unavailable. A later patch in this series will address this issue, and will remove this check for <unavailable>.
2022-08-31Add OpenBSD AArch64 GAS support.Frederic Cambus2-0/+5
* configure.tgt (aarch64*-*-openbsd*): Add target.
2022-08-31gdb, dwarf: create symbols for template tags without namesNils-Christian Kempke3-1/+272
The following GDB behavior was also reported as a GDB bug in https://sourceware.org/bugzilla/show_bug.cgi?id=28396 I will reiterate the problem a bit and give some more information here. This patch closes the above mentioned bug. The DWARF 5 standard 2.23 'Template Parameters' reads: A template type parameter is represented by a debugging information entry with the tag DW_TAG_template_type_parameter. A template value parameter is represented by a debugging information entry with the tag DW_TAG_template_value_parameter. The actual template parameter entries appear in the same order as the corresponding template formal parameter declarations in the source progam. A type or value parameter entry may have a DW_AT_name attribute, whose value is a null-terminated string containing the name of the corresponding formal parameter. So the DW_AT_name attribute for DW_TAG_template_type_parameter and DW_TAG_template_value_parameter is optional. Within GDB, creating a new symbol from some read DIE usually requires the presence of a DW_AT_name for the DIE (an exception here is the case of unnamed namespaces or the existence of a linkage name). This patch makes the presence of the DW_AT_name for template value/type tags optional, similar to the unnamed namespaces. For unnamed namespaces dwarf2_name simply returns the constant string CP_ANONYMOUS_NAMESPACE_STR '(anonymous namespace)'. For template tags a case was added to the switch statement calling the unnamed_template_tag_name helper. Within the scope of parent which the template parameter is a child of, the helper counts the position of the template tag within the unnamed template tags and returns '<unnamedNUMBER>' where NUMBER is its position. This way we end up with unique names within the respective scope of the function/class/struct (these are the only currenltly supported template kinds within GDB and usually the compilers) where we discovered the template tags in. While I do not know of a way to bring GCC to emit template tags without names there is one for clang/icpx. Consider the following example template<typename A, typename B, typename C> class Foo {}; template<typename, typename B, typename> class Foo; int main () { Foo<double, int, float> f; return 0; } The forward declaration for 'Foo' with the missing template type names 'A' and 'C' makes clang emit a bunch of template tags without names: ... <2><43>: Abbrev Number: 3 (DW_TAG_variable) <44> DW_AT_location : 2 byte block: 91 78 (DW_OP_fbreg: -8) <47> DW_AT_name : (indirect string, offset: 0x63): f <4b> DW_AT_decl_file : 1 <4c> DW_AT_decl_line : 8 <4d> DW_AT_type : <0x59> ... <1><59>: Abbrev Number: 5 (DW_TAG_class_type) <5a> DW_AT_calling_convention: 5 (pass by value) <5b> DW_AT_name : (indirect string, offset: 0x74): Foo<double, int, float> <5f> DW_AT_byte_size : 1 <60> DW_AT_decl_file : 1 <61> DW_AT_decl_line : 2 <2><62>: Abbrev Number: 6 (DW_TAG_template_type_param) <63> DW_AT_type : <0x76> <2><67>: Abbrev Number: 7 (DW_TAG_template_type_param) <68> DW_AT_type : <0x52> <6c> DW_AT_name : (indirect string, offset: 0x6c): B <2><70>: Abbrev Number: 6 (DW_TAG_template_type_param) <71> DW_AT_type : <0x7d> ... Befor this patch, GDB would not create any symbols for the read template tag DIEs and thus lose knowledge about them. Breaking at the return statement and printing f's type would read (gdb) ptype f type = class Foo<double, int, float> [with B = int] { <no data fields> } After this patch GDB does generate symbols from the DWARF (with their artificial names: (gdb) ptype f type = class Foo<double, int, float> [with <unnamed0> = double, B = int, <unnamed1> = float] { <no data fields> } The same principle theoretically applies to template functions. Also here, GDB would not record unnamed template TAGs but I know of no visual way to trigger and test this changed behavior. Template functions do not emit a '[with...]' list and their name generation also does not suffer from template tags without names. GDB does not check whether or not a template tag has a name in 'dwarf2_compute_name' and thus, the names of the template functions are created independently of whether or not the template TAGs have a DW_TAT_name attribute. A testcase has been added in the gdb.dwarf2 for template classes and structs. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28396
2022-08-31gdb, testsuite: adapt function_range expected nameNils-Christian Kempke1-4/+8
When writing a dwarf testcase for some C++ code I wanted to use the MACRO_AT_range which in turn uses the function_range proc in dwarf.exp to extract the bounds of 'main'. However, the macro failed as GDB prints the C++ 'main' with its arguments as 'main(int, char**)' or 'main()'. The reason for this is that in read.c::dwarf2_compute_name we call c_type_print_args on C++ functions and append their arguments to the function name. This happens to all C++ functions, but is only visible when the function doesn't have a linkage name. An example might make this more clear. Given the following code >> cat c.cpp int foo (int a, float b) { return 0; } int main (int argc, char **argv) { return 0; } which is legal in both languages, C and C++, and compiling it with e.g. clang or gcc will make the disassemble command look like: >> clang --version clang version 10.0.0-4ubuntu1 ... >> clang -O0 -g ./c.cpp >> gdb -q ./a.out -ex "start" ... (gdb) disassemble main Dump of assembler code for function main(int, char**): 0x0000000000401120 <+0>: push %rbp 0x0000000000401121 <+1>: mov %rsp,%rbp ... 0x0000000000401135 <+21>: ret End of assembler dump. (gdb) disassemble foo Dump of assembler code for function _Z3fooif: 0x0000000000401110 <+0>: push %rbp 0x0000000000401111 <+1>: mov %rsp,%rbp ... 0x000000000040111f <+15>: ret End of assembler dump. Note, that main is emitted with its arguments while for foo the linkage name is being printed, as also visible in its DWARF: >> objdump ./a.out --dwarf=info | grep "foo" -A3 -B3 <2b> DW_AT_low_pc : 0x401110 <33> DW_AT_high_pc : 0x10 <37> DW_AT_frame_base : 1 byte block: 56 (DW_OP_reg6 (rbp)) <39> DW_AT_linkage_name: (indirect string, offset: 0x39): _Z3fooif <3d> DW_AT_name : (indirect string, offset: 0x42): foo <41> DW_AT_decl_file : 1 <42> DW_AT_decl_line : 1 <43> DW_AT_type : <0x9a> Now, let's rename the C++ file and compile it as C: >> mv c.cpp c.c >> clang -O0 -g ./c.c >> gdb -q ./a.out -ex "start' ... (gdb) disassemble main Dump of assembler code for function main: 0x0000000000401120 <+0>: push %rbp 0x0000000000401121 <+1>: mov %rsp,%rbp ... 0x0000000000401135 <+21>: ret End of assembler dump. (gdb) disassemble foo Dump of assembler code for function foo: 0x0000000000401110 <+0>: push %rbp 0x0000000000401111 <+1>: mov %rsp,%rbp ... 0x000000000040111f <+15>: ret End of assembler dump. Note, for foo we did not get a linkage name emitted in DWARF, so it is printed by its name: >> objdump --dwarf=info ./a.out | grep foo -A3 -B3 <2b> DW_AT_low_pc : 0x401110 <33> DW_AT_high_pc : 0x10 <37> DW_AT_frame_base : 1 byte block: 56 (DW_OP_reg6 (rbp)) <39> DW_AT_name : (indirect string, offset: 0x37): foo <3d> DW_AT_decl_file : 1 <3e> DW_AT_decl_line : 1 <3f> DW_AT_prototyped : 1 To make the macro and proc work with C++ as well, an optional argument list was added to the regex matching the function name in the disassemble command in function_range. This does not change any used behavior as currently, there exists no C++ test using the proc function_range. Signed-off-by: Nils-Christian Kempke <nils-christian.kempke@intel.com>
2022-08-30gdb/elfread.c: Use bfd filename instead of objfile->original_nameAaron Merey1-2/+3
The call to debuginfod_debuginfo_query in elf_symfile_read is given objfile->original_name as the filename to print when downloading the objfile's debuginfo. In some cases original_name is prefixed with gdb's working directory even though the objfile is not located in the working directory. This causes debuginfod to display the wrong path of the objfile during a download. Fix this by using the objfile's bfd filename instead.
2022-08-31Automatic date update in version.inGDB Administrator1-1/+1
2022-08-30ld: pe: Fix linking against Microsoft import libraries with multiple DLLsMartin Storsjö2-108/+32
Initially, since c6c37250e98f113755e0d787f7070e2ac80ce77e (in 1999), in order to fix linking against Microsoft import libraries, ld did internally rename members of such libraries. At that point, the criteria for being considered a Microsoft import library was that every archive member had the same name (no regard for exactly what that name was). This was later amended in 44dbf3639f127af46d569ad96b6242dfbc4c0a89 (in 2003) to allow for Microsoft import libraries with intermixed static object files. At this point, the criteria were extended, so that all members following the first member named *.dll either had the exact same member name, or be named *.obj. (Curiously, this would allow members with any name if it precedes the first one named *.dll.) In practice, Microsoft style import libraries can contain members for linking against more than one DLL (built by merging multiple regular import libraries into one). Instead of trying to do validation of the whole archive before considering it a Microsoft style import library, relax the criteria for doing the member renaming: If an archive member is named *.dll and it contains .idata sections, assume that that member is a Microsoft import file, and apply the renaming scheme. This works for imports for any number of DLLs in the same library, intermixed with other static object files (regardless of their names), and vastly simplifies the code. LLVM generates Microsoft style import libraries, and Rust builds seem to bundle up multiple import libraries together with some Rust specific static objects. This fixes linking directly against them with ld.bfd.
2022-08-30gdbsupport: add wrapper around result_of and invoke_resultSimon Marchi3-6/+44
When building with Clang 14 (using gcc 12 libstdc++ headers), I get: CXX dwarf2/read.o In file included from /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:94: /home/simark/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:142:21: error: 'result_of<(lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5) (__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter> *, std::__cxx1998::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>>, std::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>, std::random_access_iterator_tag>, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter> *, std::__cxx1998::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>>, std::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>, std::random_access_iterator_tag>)>' is deprecated: use 'std::invoke_result' instead [-Werror,-Wdeprecated-declarations] = typename std::result_of<RangeFunction (RandomIt, RandomIt)>::type; ^ /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7122:14: note: in instantiation of function template specialization 'gdb::parallel_for_each<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter> *, std::__cxx1998::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>>, std::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>, std::random_access_iterator_tag>, (lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5)>' requested here = gdb::parallel_for_each (1, per_bfd->all_comp_units.begin (), ^ /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/type_traits:2597:9: note: 'result_of<(lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5) (__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter> *, std::__cxx1998::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>>, std::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>, std::random_access_iterator_tag>, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter> *, std::__cxx1998::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>>, std::vector<std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>>, std::random_access_iterator_tag>)>' has been explicitly marked deprecated here { } _GLIBCXX17_DEPRECATED_SUGGEST("std::invoke_result"); ^ /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/x86_64-pc-linux-gnu/bits/c++config.h:120:45: note: expanded from macro '_GLIBCXX17_DEPRECATED_SUGGEST' # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) ^ /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/x86_64-pc-linux-gnu/bits/c++config.h:96:19: note: expanded from macro '_GLIBCXX_DEPRECATED_SUGGEST' __attribute__ ((__deprecated__ ("use '" ALT "' instead"))) ^ It complains about the use of std::result_of, which is deprecated in C++17 and removed in C++20: https://en.cppreference.com/w/cpp/types/result_of Given we'll have to transition to std::invoke_result eventually, make a GDB wrapper to mimimc std::invoke_result, which uses std::invoke_result for C++ >= 17 and std::result_of otherwise. This way, it will be easy to remove the wrapper in the future, just replace gdb:: with std::. Tested by building with gcc 12 in -std=c++11 and -std=c++17 mode, and clang in -std=c++17 mode (I did not test fully with clang in -std=c++11 mode because there are other unrelated issues). Change-Id: I50debde0a3307a7bc67fcf8fceefda51860efc1d
2022-08-30Fix flush for sys.stderrTom Tromey2-14/+9
GDB overwrites Python's sys.stdout and sys.stderr, but does not properly implement the 'flush' method -- it only ever will flush stdout. This patch fixes the bug. I couldn't find a straightforward way to write a test for this.
2022-08-30Fix gdb.flush documentationTom Tromey1-1/+1
The gdb.flush documentation does not mention the 'stream' argument in the function signature, only in the description. This patch fixes the oversight.
2022-08-30BFD library: Use entry 0 in directory and filename tables of DWARF-5 debug info.Nick Clifton4-29/+76
PR 29529 * dwarf2.c (struct line_info_table): Add new field: use_dir_and_file_0. (concat_filename): Use new field to help select the correct table slot. (read_formatted_entries): Do not skip entry 0. (decode_line_info): Set new field depending upon the version of DWARF being parsed. Initialise filename based upon the setting of the new field.
2022-08-30gdb: update ranged_breakpoint::print_one_detail in commentsEnze Li2-2/+2
The print_one_detail_ranged_breakpoint has been renamed to ranged_breakpoint::print_one_detail in this commit: commit ec45bb676c9c69c30783bcf35ffdac8280f3b8bc Date: Sat Jan 15 16:34:51 2022 -0700 Convert ranged breakpoints to vtable ops So their comments should be updated as well.
2022-08-30Add a testcase for PR 29494.Nick Clifton3-0/+10001
PR 29494 * testsuite/gas/arm/pr29494.s: New test source file. * testsuite/gas/arm/pr29494.d: New test driver.
2022-08-30LoongArch: Fix redefinition of "PACKAGE".liuzhensong1-1/+1
Running configure and make in binutils-gdb. $ ./configure $ make In file included from ./as.h:37, from ./config/loongarch-lex.l:21, from config/loongarch-lex-wrapper.c:20: ./config.h:206: error: “PACKAGE” redefined [-Werror] #define PACKAGE "gas" ... gas/config * loongarch-lex-wrapper.c
2022-08-30RISC-V: Add 'Zmmul' extension in assembler.Tsukasa OI30-27/+175
Three-part patch set from Tsukasa OI to support zmmul in assembler. The 'Zmmul' is a RISC-V extension consisting of only multiply instructions (a subset of 'M' which has multiply and divide instructions). bfd/ * elfxx-riscv.c (riscv_implicit_subsets): Add 'Zmmul' implied by 'M'. (riscv_supported_std_z_ext): Add 'Zmmul' extension. (riscv_multi_subset_supports): Add handling for new instruction class. gas/ * testsuite/gas/riscv/attribute-09.d: Updated implicit 'Zmmul' by 'M'. * testsuite/gas/riscv/option-arch-02.d: Likewise. * testsuite/gas/riscv/m-ext.s: New test. * testsuite/gas/riscv/m-ext-32.d: New test (RV32). * testsuite/gas/riscv/m-ext-64.d: New test (RV64). * testsuite/gas/riscv/zmmul-32.d: New expected output. * testsuite/gas/riscv/zmmul-64.d: Likewise. * testsuite/gas/riscv/m-ext-fail-xlen-32.d: New test (failure by using RV64-only instructions in RV32). * testsuite/gas/riscv/m-ext-fail-xlen-32.l: Likewise. * testsuite/gas/riscv/m-ext-fail-zmmul-32.d: New failure test (RV32 + Zmmul but with no M). * testsuite/gas/riscv/m-ext-fail-zmmul-32.l: Likewise. * testsuite/gas/riscv/m-ext-fail-zmmul-64.d: New failure test (RV64 + Zmmul but with no M). * testsuite/gas/riscv/m-ext-fail-zmmul-64.l: Likewise. * testsuite/gas/riscv/m-ext-fail-noarch-64.d: New failure test (no Zmmul or M). * testsuite/gas/riscv/m-ext-fail-noarch-64.l: Likewise. include/ * opcode/riscv.h (enum riscv_insn_class): Added INSN_CLASS_ZMMUL. ld/ * testsuite/ld-riscv-elf/attr-merge-arch-01.d: We don't care zmmul in these testcases, so just replaced m by a. * testsuite/ld-riscv-elf/attr-merge-arch-01a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-01b.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-02a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-03.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-03a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p0.s: Renamed. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p1.s: Renamed. opcodes/ * riscv-opc.c (riscv_opcodes): Updated multiply instructions to zmmul.
2022-08-30[gdb/symtab] Fix assert in set_lengthTom de Vries2-1/+83
When running the included test-case, we run into: ... (gdb) break _start^M read.h:309: internal-error: set_length: \ Assertion `m_length == length' failed.^M ... The problem is that while there are two CUs: ... $ readelf -wi debug-names-missing-cu | grep @ Compilation Unit @ offset 0x0: Compilation Unit @ offset 0x2d: ... the CU table in the .debug_names section only contains the first one: ... CU table: [ 0] 0x0 ... The incomplete CU table makes create_cus_from_debug_names_list set the size of the CU at 0x0 to the actual size of both CUs combined. This eventually leads to the assert, when we read the actual size from the CU header. While having an incomplete CU table in a .debug_names section is incorrect, we need a better failure mode than asserting. The easiest way to fix this is to set the length to 0 (meaning: unkown) in create_cus_from_debug_names_list. This makes the failure mode to accept the incomplete CU table, but to ignore the missing CU. It would be nice to instead reject the .debug_names index, and build a complete CU list, but the point where we find this out is well after dwarf2_initialize_objfile, so it looks rather intrusive to restart at that point. Tested on x86_64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29453
2022-08-30[gdb/tdep] Declare score-*-* target obsoleteTom de Vries2-1/+1
I tried out the script gdb/gdb_mbuild.sh, and ran into: ... score-elf ... ... configure --target=score-elf ... make score-elf ... run score-elf score-elf: gdb dumped core Terminated ... Gdb runs into this internal error in initialize_current_architecture: ... if (! gdbarch_update_p (info)) internal_error (__FILE__, __LINE__, _("initialize_current_architecture: Selection of " "initial architecture failed")); ... The call to gdbarch_update_p fails because commit 575b4c298a6 ("gdb: Remove support for S+core") removed support for the architecture. Fix this by adding score-*-* to the list of obsolete targets in gdb/configure.tgt, such that we're no longer able to build the configuration: ... *** Configuration score-unknown-elf is obsolete. *** Support has been REMOVED. make: *** [Makefile:12806: configure-gdb] Error 1 ... Also remove the related line from the "Target Instruction Set Architectures" list in gdb/MAINTAINERS, such that gdb/gdb_mbuild.sh no longer tries to build it.
2022-08-30Automatic date update in version.inGDB Administrator1-1/+1
2022-08-29Automatic date update in version.inGDB Administrator1-1/+1
2022-08-28PR29494 Trailing jump table on ARMAlan Modra1-6/+6
out_inc_line_addr and relax_inc_line_addr are passed INT_MAX as line_delta to flag end of section. This filters its way down to size_inc_line_addr and emit_inc_line_addr. Pass line_delta on to scale_addr_delta where it can be used to omit an unaligned opcode error. PR 29494 * dwarf2dbg.c (scale_addr_delta): Delete unnecessary forward decl. Add line_delta param. Don't print error at end of section, just round the address down. (size_inc_line_addr, emit_inc_line_addr): Adjust calls.
2022-08-28Automatic date update in version.inGDB Administrator1-1/+1
2022-08-27bfd: Fix minor bug in read_indexed_address function.rupothar1-3/+3
read_indexed_address function is using offset_size instead of addr_size while reading addrx forms.
2022-08-27Automatic date update in version.inGDB Administrator1-1/+1
2022-08-26gdbsupport: fix gdb::optional compilation with C++11 && _GLIBCXX_DEBUGSimon Marchi1-2/+2
Similar to 911438f9f4 ("gdbsupport: fix array-view compilation with c++11 && _GLIBCXX_DEBUG"), but for gdb::optional. I get this error when building with Clang 14 and -std=c++11: CXX agent.o In file included from /home/simark/src/binutils-gdb/gdbsupport/agent.cc:20: In file included from /home/simark/src/binutils-gdb/gdbsupport/common-defs.h:210: In file included from /home/simark/src/binutils-gdb/gdbsupport/common-debug.h:23: /home/simark/src/binutils-gdb/gdbsupport/../gdbsupport/gdb_optional.h:213:5: error: use of this statement in a constexpr function is a C++14 extension [-Werror,-Wc++14-extensions] gdb_assert (this->has_value ()); ^ /home/simark/src/binutils-gdb/gdbsupport/gdb_assert.h:35:3: note: expanded from macro 'gdb_assert' ((void) ((expr) ? 0 : \ ^ Change-Id: If0cf55607fc9dbd1925ccb97cd9abbf8993ff264
2022-08-26gdb: change bpstat_print's kind parameter to target_waitkindSimon Marchi2-5/+4
Change from int to target_waitkind, which is really what is is. While at it, remove some outdated doc. The return value is described by a relatively self-describing enum, not a numerical value like the doc says. Change-Id: Id899c853a857c7891c45e5b1639024067d5b59cd
2022-08-26gdb, gdbsupport: configure: factor out yes/no/auto value checkingSimon Marchi3-93/+115
Factor out the code that checks that a value is yes/no or yes/no/auto. Add two macros to gdbsupport/common.m4 and use them in gdb/configure.ac I inspected the changes to configure. Other than whitespace changes, we have some benign changes to the error messages (one of them had an error actually). There are changes to the --enable-source-highlight and --enable-libbacktrace handling, but setting enable_source_highlight / enable_libbacktrace was not really useful anyway, they already had the right value. Change-Id: I92587aec36874309e1605e2d60244649f09a757a
2022-08-26PR12265, Compiling ld/ fails on Solaris 8Alan Modra2-5/+3
The fail was due to -Werror and headers included by dlfcn.h and elf-bfd.h disagreeing about AT_DCACHEBSIZE and other AT_*. Not a serious problem obviously, since release versions of binutils don't enable -Werror and the defines are not used. Anyway, reduce the number of files that might hit this problem by only including dlfcn.h where it is needed. PR 12265 * sysdep.h: Don't include dlfcn.h here. * plugin.c: Include it here.
2022-08-26Automatic date update in version.inGDB Administrator1-1/+1
2022-08-25Allow to document user-defined aliases.Philippe Waroquiers5-34/+146
Compared to the previous version, this version fixes the comments reported by Tom Tromey and ensures that the 'help some-user-documented-alias' shows the alias definition to ensure the user understands this is an alias even if specifically documented. When using 'help ALIASNAME', GDB shows the help of the aliased command. This is a good default behaviour. However, GDB alias command allows to define aliases with arguments possibly changing or tuning significantly the behaviour of the aliased command. In such a case, showing the help of the aliased command might not be ideal. This is particularly true when defining an alias as a set of nested 'with' followed by a last command to launch, such as: (gdb) alias pp10 = with print pretty -- with print elements 10 -- print Asking 'help pp10' shows the help of the 'with' command, which is not particularly useful: (gdb) help pp10 with, pp10, w alias pp10 = with print pretty -- with print elements 10 -- print Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING. Usage: with SETTING [VALUE] [-- COMMAND] .... Such an alias can now be documented by the user: (gdb) document pp10 >Pretty printing an expressiong, printing 10 elements. >Usage: pp10 [PRINT-COMMAND-OPTIONS] EXP >See 'help print' for more information. >end (gdb) help pp10 alias pp10 = with print pretty -- with print elements 10 -- print Pretty printing an expressiong, printing 10 elements. Usage: pp10 [PRINT-COMMAND-OPTIONS] EXP See 'help print' for more information. (gdb) When a user-defined alias is documented specifically, help and apropos use the provided alias documentation instead of the documentation of the aliased command. Such a documented alias is also not shown anymore in the help of the aliased command, and the alias is not listed anymore in the help of the aliased command. In particular for cases such as pp10 example above, indicating that pp10 is an alias of the 'with' command is confusing.
2022-08-25sim/aarch64: Fix aarch64_get_CPSR_bits() declarationJan-Benedict Glaw1-1/+1
Noticed while doing mass builds with a very recent GCC: /usr/lib/gcc-snapshot/bin/gcc -DHAVE_CONFIG_H -DWITH_HW=1 -DHAVE_DV_SOCKSER -DDEFAULT_INLINE=0 -Wall -Wdeclaration-after-statement -Wpointer-arith -Wno-unused -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wno-error=maybe-uninitialized -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wmissing-parameter-type -Wpointer-sign -Wold-style-declaration -Werror -I. -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64 -I../common -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../common -I../../include -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../include -I../../bfd -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../bfd -I../../opcodes -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../opcodes -I../.. -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../gnulib/import -I../../gnulib/import -g -O2 -c -o cpustate.o -MT cpustate.o -MMD -MP -MF .deps/cpustate.Tpo cpustate.c cpustate.c:270:1: error: conflicting types for 'aarch64_get_CPSR_bits' due to enum/integer mismatch; have 'uint32_t(sim_cpu *, FlagMask)' {aka 'unsigned int(struct _sim_cpu *, FlagMask)'} [-Werror=enum-int-mismatch] 270 | aarch64_get_CPSR_bits (sim_cpu *cpu, FlagMask mask) | ^~~~~~~~~~~~~~~~~~~~~ In file included from sim-main.h:30, from cpustate.c:28: cpustate.h:310:20: note: previous declaration of 'aarch64_get_CPSR_bits' with type 'uint32_t(sim_cpu *, uint32_t)' {aka 'unsigned int(struct _sim_cpu *, unsigned int)'} 310 | extern uint32_t aarch64_get_CPSR_bits (sim_cpu *, uint32_t); | ^~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors
2022-08-25x86: Ignore protected visibility in shared libraries on SolarisH.J. Lu2-2/+4
On x86, the PLT entry in executable may be used as function address for functions in shared libraries. If functions are protected, the function address used in executable can be different from the function address used in shared library. This will lead to incorrect run-time behavior if function pointer equality is needed. By default, x86 linker issues an error in this case. On Solaris, linker issued an error for struct tm *tb = (kind == CPP_time_kind::FIXED ? gmtime : localtime) (&tt); where gmtime is a protected function in libc.so. Use gmtime's PLT entry in executable as function address is safe since function pointer equality isn't needed. Ignore protected visibility in shared libraries on Solaris to disable linker error. If function pointer equality is needed, linker will silently generate executable with incorrect run-time behavior on Solaris. PR ld/29512 * elf32-i386.c (elf_i386_scan_relocs): Ignore protected visibility in shared libraries on Solaris. * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
2022-08-25GAS: Add a return type tag to DWARF DIEs generated for function symbols.Nick Clifton6-4/+82
PR 29517 * dwarf2dbg.c (GAS_ABBREV_COMP_UNIT): New defined constant. (GAS_ABBREV_SUBPROG): New defined constant. (GAS_ABBREV_NO_TYPE): New defined constant. (out_debug_abbrev): Use the new defined constants when emitting abbreviation numbers. Generate an abbreviation for an unspecified type. (out_debug_info): Use the new defined constants when referring to abbreviations. Generate a use of the no_type abbreviation. Reference the use when generating DIEs for functions. * testsuite/gas/elf/dwarf-3-func.d: Update to allow for newly extended output from the assembler. * testsuite/gas/elf/dwarf-5-func-global.d: Likewise. * testsuite/gas/elf/dwarf-5-func-local.d: Likewise. * testsuite/gas/elf/dwarf-5-func.d: Likewise.
2022-08-25GAS: Allow AArch64 pseudo-ops to accept the command line separator character.Nick Clifton4-12/+30
PR 29519 * config/tc-aarch64.c (s_unreq): Use find_end_of_line(). (s_aarch64_cpu): Likewise. (s_aarch64_arch): Likewise. (s_aarch64_arch_extension): Likewise. * testsuite/gas/aarch64/pr29519.d: New test driver file. * testsuite/gas/aarch64/pr29519.s: New test source file.
2022-08-25gas: NEWS: Add the RISC-V features for 2.39Palmer Dabbelt1-0/+12
2022-08-25gas: NEWS: Add the RISC-V features for 2.38Palmer Dabbelt1-0/+11
2022-08-25gas: NEWS: Add the RISC-V features for 2.37Palmer Dabbelt1-0/+3
2022-08-25gas: NEWS: Add the RISC-V features for 2.36Palmer Dabbelt1-0/+2
2022-08-25gas: NEWS: Add the RISC-V features for 2.35Palmer Dabbelt1-0/+5
2022-08-25gas: NEWS: Add the RISC-V features for 2.31Palmer Dabbelt1-0/+2
2022-08-25PR11290, avr-ld "out of range error" is confusingAlan Modra3-32/+34
Don't overload bfd_reloc_outofrange with what is really a domain error (target at odd address), or an overflow. PR 11290 * reloc.c (bfd_reloc_other): Correct comment. * elf32-avr.c (avr_final_link_relocate): Return bfd_reloc_other for unaligned reloc target values. Return bfd_reloc_overflow when stubs are too far away and when R_AVR_LDS_STS_16, R_AVR_PORT6, or R_AVR_PORT5 overflow. (elf32_avr_relocate_section): Report more descriptive relocation errors. * bfd-in2.h: Regenerate.
2022-08-25ld: pe: Move the return type to a separate line from the function nameMartin Storsjö2-2/+4
This fixes the coding style of an old, preexisting function.
2022-08-25PR10372, SH: ld test with sim/sh/run fails alwaysAlan Modra1-3/+7
PR 10372 * testsuite/ld-sh/start.s: Add _start sym. Use trapa 34. Create an alloc .stack section.
2022-08-25Re: LoongArch: ld: Fix bug not generate plt when link a dsoAlan Modra1-12/+15
Fixes loongarch32-elf +FAIL: medium jirl plt * testsuite/ld-loongarch-elf/cmodel.exp: Don't run test when no shared library support.
2022-08-25Automatic date update in version.inGDB Administrator1-1/+1
2022-08-24ld: pe: Make archive member file extension comparisons case insensitive when ↵Martin Storsjö2-10/+44
cross compiling too On Windows, filename_cmp is case insensitive, but when cross compiling with libraries that may contain members with uppercase file names, we should keep those comparisons case insensitive when running the build tools on other OSes too. Also make the check for .def consistent with the other ones, fixing out of bounds reads if file names are shorter than 4 characters.
2022-08-24gas: arm: handle multiple .directives on a single line (PR29519)Richard Earnshaw3-20/+73
There's been a long-standing bug in the arm backend where target-specific directives did not correctly handle lines with multiple statements. This patch fixes the issue for all the cases I've been able to find. It does result in a slight change in behaviour when errors are encountered: where, previously, .cpu arm6 bar would result in the error "junk at end of line, first unrecognized character is `b'", we now get "unknown cpu `arm6 bar'", which I think is slightly more helpful anyway. Similar errors are generated for other directives.
2022-08-24gdb: new 'maint print frame-id' commandAndrew Burgess5-0/+157
When debugging a certain class of GDB bug, I often end up wanting to know what GDB thinks the frame-id is in a particular frame. It's not too hard to pull this from some debug output, but I thought it might be nice if there was a maintenance command that could tell us. This commit adds 'maint print frame-id' which prints the frame-id of the currently selected frame. You can also pass a frame level number to find the frame-id for a specific frame. There's a new test too.
2022-08-24LoongArch: ld: Fix bug not generate plt when link a dsoliuzhensong4-0/+49
Fix the bug that can not generate func@plt when linking a undefined function with cmodel=medium. Add testcase. bfd/ * elfnn-loongarch.c ld/testsuite/ld-loongarch-elf/ * cmodel-libjirl.dd * cmodel.exp * libjirl.s
2022-08-24Automatic date update in version.inGDB Administrator1-1/+1