aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-09-14gdb: remove TYPE_FIXED_INSTANCESimon Marchi4-19/+22
gdb/ChangeLog: * gdbtypes.h (TYPE_FIXED_INSTANCE): Remove, replace all uses with type::is_fixed_instance. Change-Id: I57731b5ab44aac7d8896a32b9c7481891baea51a
2020-09-14gdb: add type::is_fixed_instance / type::set_is_fixed_instanceSimon Marchi3-8/+25
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
2020-09-14gdb: remove TYPE_GNU_IFUNCSimon Marchi6-14/+17
gdb/ChangeLog: * gdbtypes.h (TYPE_GNU_IFUNC): Remove, replace all uses with type::is_gnu_ifunc. Change-Id: I72aae22599b5e582910c5d50588feaf159032bd8
2020-09-14gdb: add type::is_gnu_ifunc / type::set_is_gnu_ifuncSimon Marchi3-3/+21
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
2020-09-14gdb: remove TYPE_STUB_SUPPORTEDSimon Marchi3-9/+12
gdb/ChangeLog: * gdbtypes.h (TYPE_STUB_SUPPORTED): Remove, replace all uses with type::stub_is_supported. Change-Id: I69dbc32a619455605b7f934a701bc36bd664b7c0
2020-09-14gdb: add type::stub_is_supported / type::set_stub_is_supportedSimon Marchi3-3/+19
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
2020-09-14gdb: remove TYPE_VECTORSimon Marchi29-92/+96
gdb/ChangeLog: * gdbtypes.h (TYPE_VECTOR): Remove, replace all uses with type::is_vector. Change-Id: I1ac28755af44b1585c190553f9961288c8fb9137
2020-09-14gdb: add type::is_vector / type::set_is_vectorSimon Marchi9-13/+29
Add the `is_vector` and `set_is_vector` methods on `struct type`, in order to remove the `TYPE_VECTOR` 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_vector, set_is_vector>: New methods. (TYPE_VECTOR): Use type::is_vector, change all write call sites to use type::set_is_vector. Change-Id: I415e8d169f058662e0750329bfa4017bea3ca0cb
2020-09-14gdb: remove TYPE_VARARGSSimon Marchi17-27/+30
gdb/ChangeLog: * gdbtypes.h (TYPE_VARARGS): Remove, replace all uses with type::has_varargs. Change-Id: Ieea4a64b4bfa4b8be643e68cb403081881133740
2020-09-14gdb: add type::has_varargs / type::set_has_varargsSimon Marchi6-7/+24
Add the `has_varargs` and `set_has_varargs` methods on `struct type`, in order to remove the `TYPE_VARARGS` 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) <has_varargs, set_has_varargs>: New methods. (TYPE_VARARGS): Use type::has_varargs, change all write call sites to use type::set_has_varargs. Change-Id: I898a1093ae40808b37a7c6fced7f6fa2aae604de
2020-09-14gdb: remove TYPE_PROTOTYPEDSimon Marchi8-13/+16
gdb/ChangeLog: * gdbtypes.h (TYPE_PROTOTYPED): Remove, replace all uses with type::is_prototyped. Change-Id: Ic96b19c24ce5afcd7e1302a75c39909767e4d885
2020-09-14gdb: add type::is_prototyped / type::set_is_prototypedSimon Marchi7-10/+27
Add the `is_prototyped` and `set_is_prototyped` methods on `struct type`, in order to remove the `TYPE_PROTOTYPED` 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_prototyped, set_is_prototyped>: New methods. (TYPE_PROTOTYPED): Use type::is_prototyped, change all write call sites to use type::set_is_prototyped. Change-Id: I6ba285250fae413f7c1bf2ffcb5a2cedc8e743da
2020-09-14gdb: remove TYPE_TARGET_STUBSimon Marchi3-11/+14
gdb/ChangeLog: * gdbtypes.h (TYPE_TARGET_STUB): Remove, replace all uses with type::target_is_stub. Change-Id: I3e7dadcb485d991af68a1e93693e3895b0e755d5
2020-09-14gdb: add type::target_is_stub / type::set_target_is_stubSimon Marchi9-16/+34
Add the `target_is_stub` and `set_target_is_stub` methods on `struct type`, in order to remove the `TYPE_TARGET_STUB` 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) <target_is_stub, set_target_is_stub>: New methods. (TYPE_TARGET_STUB): Use type::is_stub, change all write call sites to use type::set_target_is_stub. Change-Id: I9c71a89adc7ae8d018db9ee156f41c623be0484a
2020-09-14gdb: remove TYPE_STUBSimon Marchi13-28/+31
gdb/ChangeLog: * gdbtypes.h (TYPE_STUB): Remove, replace all uses with type::is_stub. Change-Id: Iec25b50449a0d10a38f815209e478c343e98632c
2020-09-14gdb: add type::is_stub / type::set_is_stubSimon Marchi7-15/+31
Add the `is_stub` and `set_is_stub` methods on `struct type`, in order to remove the `TYPE_STUB` 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_stub, set_is_stub>: New methods. (TYPE_STUB): Use type::is_stub, change all write call sites to use type::set_is_stub. Change-Id: Ie935e8fe72c908afd8718411e83f4ff00c386bf3
2020-09-14gdb: remove TYPE_NOSIGNSimon Marchi6-17/+20
gdb/ChangeLog: * gdbtypes.h (TYPE_NOSIGN): Remove, replace all uses with type::has_no_signedness. Change-Id: Iaf8d1cedad195d03a4358e90f6ada77290d03bf2
2020-09-14gdb: add type::has_no_signedness / type::set_has_no_signednessSimon Marchi7-9/+26
Add the `has_no_signedness` and `set_has_no_signednes` methods on `struct type`, in order to remove the `TYPE_NOSIGN` 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) <has_no_signedness, set_has_no_signedness>: New methods. (TYPE_NOSIGN): Use type::has_no_signedness, change all write call sites to use type::set_has_no_signedness. Change-Id: I80d8e774316d146fbd814b2928ad5392bada39d5
2020-09-14gdb: remove TYPE_UNSIGNEDSimon Marchi30-86/+88
gdb/ChangeLog: * gdbtypes.h (TYPE_UNSIGNED): Remove, replace all uses with type::is_unsigned. Change-Id: I84f76f5cd44ff7294e421d317376a9e476bc8666
2020-09-14gdb: add type::is_unsigned / type::set_is_unsignedSimon Marchi10-27/+48
Add the `is_unsigned` and `set_is_unsigned` methods on `struct type`, in order to remove the `TYPE_UNSIGNED` macro. In this patch, the `TYPE_UNSIGNED` macro is changed to use `type::is_unsigned`, so all the call sites that are used to set this property on a type are changed to use the new method. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <is_unsigned, set_is_unsigned>: New methods. (TYPE_UNSIGNED): Use type::is_unsigned. Change all write call sites to use type::set_is_unsigned. Change-Id: Ib09ddce84eda160a801a8f288cccf61c8ef136bc
2020-09-14Fix exception stack unwinding for ARM Cortex-MFredrik Hederstierna2-8/+123
For Cortex-M targets using floating-point, eg the Cortex-M4F, its not possible to get any call-stack backtrace if setting a breakpoint in ISR. The exception stack unwinder for Cortex-M does not consider if floating-point registers was stacked or not, further the Cortex-M has two stack pointers: MSP (Main Stack Pointer) and PSP (Process Stack Pointer). This is not handled when GDB tries to backtrace in the exception stack unwinder. This patch fixes this, and gives a correct call-stack backtrace from breakpoints set in a handler or ISR. gdb/ChangeLog: * arm-tdep.c (arm_m_exception_cache): Try use correct stack pointer and stack frame offset when unwinding.
2020-09-14CSKY: Set feature flags for default cpu.Cooper Qu1-3/+2
Fix floating point instructions not recognized when building GCC. gas/ PR 26608 * config/tc-csky.c (md_begin): Set feature flags for default cpu.
2020-09-14[gdb/testsuite] Fix PATH warning in gdb.rust/traits.expTom de Vries2-1/+5
When running the rust test-cases with release 1.36.0 and LLVM version 7.0, I run into: ... (gdb) UNTESTED: gdb.rust/traits.exp: could not read \ outputs/gdb.rust/traits/traits with readelf PATH: gdb.rust/traits.exp: could not read \ outputs/gdb.rust/traits/traits with readelf ... Fix the PATH warning by printing [file tail $binfile] instead $binfile. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-09-14 Tom de Vries <tdevries@suse.de> * gdb.rust/traits.exp: Fix PATH warning.
2020-09-14Automatic date update in version.inGDB Administrator1-1/+1
2020-09-13gdb/testsuite: Explicitly return from mainPedro Alves54-11/+154
I've been playing with a board file that forces every testcase to include a header file that does something like: #define main __gdb_testcase_main and then links an actual main() function that does some initialization and then jumps to __gdb_testcase_main. That runs into a number of testcases relying on main not having an explicit return statement, like e.g.,: gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/catch-follow-exec.c:27:1: warning: non-void function does not return a value [-Wreturn-type] gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/catch-signal.c:47:1: warning: non-void function does not return a value [-Wreturn-type] We don't get those warnings without my board because it is valid to not explicitly return from main. There's an implicit "return 0;". Since it doesn't hurt to be explicit, I've went ahead and added the explicit return statements. Also, a couple testcases either don't explicitly specify main's return type, or return void. Those are tweaked to explicitly return int. gdb/testsuite/ChangeLog: * gdb.base/catch-follow-exec.c (main): Add explicit return statement. * gdb.base/catch-signal.c (main): Likewise. * gdb.base/condbreak-call-false.c (main): Likewise. * gdb.base/consecutive.c (main): Add explicit return statement and return type. * gdb.base/cursal.c (main): Add explicit return statement. * gdb.base/cvexpr.c (main): Likewise. * gdb.base/display.c (main): Add explicit return statement and return type. * gdb.base/dprintf-detach.c (main): Add explicit return statement. * gdb.base/endianity.c (main): Likewise. * gdb.base/execd-prog.c (main): Likewise. * gdb.base/gdb1090.c (main): Likewise. * gdb.base/info_qt.c (main): Likewise. * gdb.base/lineinc.c (main): Likewise. * gdb.base/load-command.c (main): Likewise. * gdb.base/macscp1.c (main): Likewise. * gdb.base/pr10179-a.c (main): Likewise. * gdb.base/quit-live.c (main): Likewise. * gdb.base/scope0.c (main): Likewise. * gdb.base/settings.c (main): Likewise. * gdb.base/stack-checking.c (main): Return int. * gdb.base/varargs.c (main): Add explicit return statement. * gdb.cp/ambiguous.cc (main): Likewise. * gdb.cp/anon-struct.cc (main): Likewise. * gdb.cp/anon-union.cc (main): Likewise. * gdb.cp/bool.cc (main): Likewise. * gdb.cp/bs15503.cc (main): Likewise. * gdb.cp/cplusfuncs.cc (main): Likewise. * gdb.cp/cttiadd.cc (main): Likewise. * gdb.cp/extern-c.cc (main): Likewise. * gdb.cp/filename.cc (main): Likewise. * gdb.cp/formatted-ref.cc (main): Likewise. * gdb.cp/mb-ctor.cc (main): Likewise. * gdb.cp/member-ptr.cc (main): Likewise. * gdb.cp/minsym-fallback-main.cc (main): Likewise. * gdb.cp/overload-const.cc (main): Likewise. * gdb.cp/paren-type.cc (main): Likewise. * gdb.cp/parse-lang.cc (main): Likewise. * gdb.cp/pr-1023.cc (main): Likewise. * gdb.cp/psmang1.cc (main): Likewise. * gdb.cp/readnow-language.cc (main): Likewise. * gdb.cp/ref-params.cc (main): Likewise. * gdb.cp/rvalue-ref-params.cc (main): Likewise. * gdb.cp/virtbase2.cc (main): Likewise. * gdb.dwarf2/dw2-abs-hi-pc.c (main): Likewise. * gdb.dwarf2/dw2-namespaceless-anonymous.c (main): Likewise. * gdb.dwarf2/dw4-toplevel-types.cc (main): Likewise. * gdb.mi/mi-console.c (main): Likewise. * gdb.mi/mi-read-memory.c (main): Likewise. * gdb.modula2/multidim.c (main): Likewise. * gdb.opt/inline-small-func.c (main): Likewise. * gdb.python/py-rbreak.c (main): Likewise. * gdb.stabs/exclfwd1.c (main): Likewise. * gdb.trace/qtro.c (main): Likewise.
2020-09-13Fix gdb.base/share-env-with-gdbserver.exp with ClangPedro Alves2-1/+8
The testcase has GDB call my_getenv in the inferior, and that fails with Clang, because Clang optimizes out my_getenv completely, since it isn't called anywhere (in the program). This commit fixes it. gdb/testsuite/ChangeLog: * gdb.base/share-env-with-gdbserver.c (main): Call my_getenv instead of getenv.
2020-09-13Make default_mi_gdb_start/dbx_gdb_start use gdb_spawnPedro Alves3-22/+30
If a board file wants to customize how gdb is launched, the obvious way is to have the board override gdb_spawn. However, that doesn't work for either gdb.mi/ testcases or gdb.base/dbx.exp, because default_mi_gdb_start and dbx_gdb_start don't use gdb_spawn currently. That is fixed by this patch. gdb/testsuite/ * gdb.base/dbx.exp (dbx_gdb_start): Adjust to use gdb_spawn instead of spawning GDB with remote_spawn. * lib/mi-support.exp (default_mi_gdb_start): Adjust to use gdb_spawn instead of spawning GDB with remote_spawn.
2020-09-13Fix a couple gdb.dwarf2/ testcases with "clang -flto"Pedro Alves3-15/+27
gdb.dwarf2/atomic-type.exp and gdb.dwarf2/ada-linkage-name.exp fail when testing with "clang -flto" as compiler, like: $ make check TESTS="gdb.dwarf2/ada-linkage-name.exp" RUNTESTFLAGS="CC_FOR_TARGET='clang -flto'" because with -flto, functions that aren't referenced anywhere are not emitted in the final binary. Fix it by adding uses of the functions. gdb/testsuite/ChangeLog: * gdb.dwarf2/ada-linkage-name.c (main): Move to the bottom of the file and add calls to first and second. * gdb.dwarf2/atomic.c (main): Move to the bottom of the file and add call to f.
2020-09-13Add MI "-break-insert --qualified"Pedro Alves9-26/+320
Currently -break-insert always creates a wildmatching breakpoint, and there's no way to ask for a fullname match. To address that, this patch adds the equivalent of "break -qualified" to MI: "-break-insert --qualified". For the testcase, curiously, it doesn't look like we have _any_ testcase that tests a breakpoint with multiple locations, and, the existing mi_create_breakpoint / mi_make_breakpoint procedures are only good for breakpoints with a single location. This patch thus adds a few new companion routines to mi-support.exp for breakpoints with multiple locations: mi_create_breakpoint_multi, mi_make_breakpoint_loc, mi_make_breakpoint_multi. gdb/ChangeLog: * NEWS: Document "-break-insert --qualified". * mi/mi-cmd-break.c (mi_cmd_break_insert_1): Handle "--qualified". gdb/doc/ChangeLog: * gdb.texinfo (GDB/MI Breakpoint Commands): Document "-break-insert --qualified" and "-dprintf-insert --qualified". gdb/testsuite/ChangeLog: * gdb.mi/mi-break-qualified.cc: New file. * gdb.mi/mi-break-qualified.exp: New file. * lib/mi-support.exp (mi_create_breakpoint_multi) (mi_make_breakpoint_loc, mi_make_breakpoint_multi): New procedures. (mi_create_breakpoint_1): New, factored out from mi_create_breakpoint.
2020-09-13Remove stale "register" bits from gdb.cp/misc.ccPedro Alves4-41/+10
gdb.cp/misc.cc seems to have been originally copied from gdb.cp/classes.cc. The testcases that use it, misc.exp and inherit.exp don't reference the "register" bits anywhere. Remove them, since they trigger warnings with newer GCCs, given "register" is being removed in C++17. gdb/testsuite/ChangeLog: * gdb.cp/inherit.exp: No longer pass -Wno-deprecated-register. * gdb.cp/misc.exp: No longer pass -Wno-deprecated-register. * gdb.cp/misc.cc (class small, small::method, marker_reg1) (register_class): Delete. (main): Don't call register_class.
2020-09-13Move "register" test out of classes.exp to a separate testcasePedro Alves5-72/+136
The gdb.cp/classes.exp testcase has one test that tries to exercise the case of calling a method on a variable that has been put in a register. See the declaration of small in classes.cc: /* Try to get the compiler to allocate a class in a register. */ class small { public: int x; int method (); }; and the comment in classes.exp: # This class is so small that an instance of it can fit in a register. # When gdb tries to call a method, it gets embarrassed about taking # the address of a register. # # TODO: I think that message should be a PASS, not an XFAIL. # gdb prints an informative message and declines to do something # impossible. # # The method call actually succeeds if the compiler allocates very # small classes in memory instead of registers. So this test does # not tell us anything interesting if the call succeeds. # # -- chastain 2003-12-31 And these comments: https://gcc.gnu.org/legacy-ml/gcc/2010-05/msg00116.html https://gcc.gnu.org/legacy-ml/gcc/2010-05/msg00117.html "register keyword has other uses, e.g. for -O0 code variables declared with register keyword can be put into registers, while variables declared without it always get stack slots." "I think it does, without optimization. There's some unique GDB tests that use this. It causes them to be live between statements in a machine register instead of always stored in stack slots." The "register" keyword seems to be ignored by the compiler nowadays even at -O0, though. With or without the register keyword, the variable is given a stack slot, at least on x86-64 with GCC 9. However, if we use the GCC extension to put the variable in a specific variable: https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Local-Register-Variables.html#Local-Register-Variables diff --git c/gdb/testsuite/gdb.cp/classes.cc w/gdb/testsuite/gdb.cp/classes.cc index 5ea360e4d06..6dcf34689b8 100644 --- c/gdb/testsuite/gdb.cp/classes.cc +++ w/gdb/testsuite/gdb.cp/classes.cc @@ -629,7 +629,7 @@ register_class () /* We don't call any methods for v, so gcc version cygnus-2.3.3-930220 might put this variable in a register. This is a lose, though, because it means that GDB can't call any methods for that variable. */ - register small v; + register small v asm ("rax"); then it works, and we get an XFAIL: print v.method () Address requested for identifier "v" which is in register $rax (gdb) XFAIL: gdb.cp/classes.exp: calling method for small class (PRMS 2972) I think that what we should do here is move this test into its own file, use that GCC syntax to force it to a register, and do as the comment says -- issue a pass instead of an XFAIL. That's what this commit does. Note that we don't need -Wno-deprecated-register (nor -Wno-register) anymore in the new testcase, because GNU register-asm local variables don't trigger the warning, with either GCC or Clang. gdb/testsuite/ChangeLog: * gdb.cp/classes.exp: No longer pass -Wno-deprecated-register. (do_tests): Remove "calling method for small class" test. * gdb.cp/classes.cc (class small, small::method, marker_reg1) (register_class): Delete. (main): Don't call register_class. * gdb.cp/call-method-register.exp: New file, based on bits removed from classes.exp. * gdb.cp/call-method-register.cc: New file, based on bits removed from classes.cc.
2020-09-13Don't drop static function bp locations w/o debug infoPedro Alves10-47/+363
Currently, with a program built from these sources: $ cat extern.c void foo () {} $ cat static.c static void foo () {} $ cat main.c int main () { return 0; } ... if you set a breakpoint on "foo", like: (gdb) break foo .. when there's debug info, GDB creates a breakpoint with two locations, one for each of the external and static functions. But, when there's no debug info, GDB creates a breakpoint with a single location, for the external foo. Vis: $ gcc extern.c static.c main.c -o classify.nodebug $ gcc extern.c static.c main.c -o classify.debug -g $ gdb classify.nodebug Reading symbols from classify.nodebug... (No debugging symbols found in classify.nodebug) (gdb) b foo Breakpoint 1 at 0x40048b (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x000000000040048b <foo+4> (gdb) $ gdb classify.debug Reading symbols from classify.debug... (gdb) b foo Breakpoint 1 at 0x40048b: foo. (2 locations) (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x000000000040048b in foo at extern.c:1 1.2 y 0x0000000000400492 in foo at static.c:1 GDB drops the static function is search_minsyms_for_name, where at the very end of that function we pick only the locations with highest classification, according to classify_type. The classify_type logic was introduced here: https://sourceware.org/pipermail/gdb-patches/2011-December/087864.html which said: "Previously, linespec was trying to filter out minsyms as they were seen. However, this isn't faithful to gdb's historical approach, which is to priority-order minsyms; see lookup_minimal_symbol." lookup_minimal_symbol's intro says, in the .c file: /* Look through all the current minimal symbol tables and find the first minimal symbol that matches NAME. If OBJF is non-NULL, limit the search to that objfile. If SFILE is non-NULL, the only file-scope symbols considered will be from that source file (global symbols are still preferred). Returns a pointer to the minimal symbol that matches, or NULL if no match is found. Note: One instance where there may be duplicate minimal symbols with the same name is when the symbol tables for a shared library and the symbol tables for an executable contain global symbols with the same names (the dynamic linker deals with the duplication). It's also possible to have minimal symbols with different mangled names, but identical demangled names. For example, the GNU C++ v3 ABI requires the generation of two (or perhaps three) copies of constructor functions --- "in-charge", "not-in-charge", and "allocate" copies; destructors may be duplicated as well. Obviously, there must be distinct mangled names for each of these, but the demangled names are all the same: S::S or S::~S. */ struct bound_minimal_symbol lookup_minimal_symbol (const char *name, const char *sfile, struct objfile *objf) { If you look inside this function, you'll see: /* External symbols are best. */ ... /* File-local symbols are next best. */ ... /* Symbols for shared library trampolines are next best. */ ... While this logic is good when you're looking for the single "best" symbol by name, I question it for linespecs, since we want to set breakpoints in all the multiple locations that match. I see no point in hidding static functions. Now, for breakpoints, it does make sense to filter out PLT/trampoline symbols if we find the actual global matching function symbol. Otherwise, if we did no filtering (i.e., just removed the classify_type logic), you would end up with e.g.: (gdb) b printf Breakpoint 1 at 0x413a60 (2 locations) (top-gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x0000000000413a60 <printf@plt> 1.2 y 0x00007ffff4653640 in __printf at printf.c:28 instead of this (which is what we get currently) before the shared library is loaded (a location set in the PLT): (gdb) b printf Breakpoint 1 at 0x413a60 Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000413a60 <printf@plt> and this after the library is loaded (only one location, no breakpoint in the PLT): (gdb) b printf Breakpoint 1 at 0x7ffff4653640: file printf.c, line 28. (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x00007ffff4653640 in __printf at printf.c:28 This patch fixes the missing breakpoint locations issue by replacing the classify_type logic in linespec.c with a different logic. Instead, discard a trampoline symbol if we also found a global/external symbol with the same name. The patch adds a couple of testcases testing locations in external vs static functions vs trampolines/PLTs. We now get: For the msym-bp.exp testcase (extern vs static), without debug info: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x000000000040048b <foo+4> ### missing before patch 1.2 y 0x000000000040049d <foo+4> For the msym-bp.exp testcase (extern vs static), with debug info: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x000000000040048b in foo at src/gdb/testsuite/gdb.base/msym-bp.c:21 1.2 y 0x000000000040049d in foo at src/gdb/testsuite/gdb.base/msym-bp-2.c:21 For the msym-bp-shl.exp testcase (static vs plt), without debug info, before running to main: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004004e0 <foo@plt> ### missing before patch 1.2 y 0x00000000004005db <foo+4> For the msym-bp-shl.exp testcase (static vs plt), without debug info, after running to main: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004005db <foo+4> ### missing before patch 1.2 y 0x00007ffff7bd65de <foo+4> For the msym-bp-shl.exp testcase (static vs plt), with debug info, before running to main: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004004e0 <foo@plt> ### missing before patch 1.2 y 0x00000000004005db in foo at src/gdb/testsuite/gdb.base/msym-bp-shl-main-2.c:21 For the msym-bp-shl.exp testcase (static vs plt), with debug info, after running to main: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004005db in foo at src/gdb/testsuite/gdb.base/msym-bp-shl-main-2.c:21 1.2 y 0x00007ffff7bd65de in foo at src/gdb/testsuite/gdb.base/msym-bp-shl-lib.c:21 gdb/ChangeLog: * linespec.c (classify_mtype, compare_msyms): Delete. (search_minsyms_for_name): Remove classification logic. Instead filter out trampoline symbols if we also found an external function of the same name. gdb/testsuite/ChangeLog: * gdb.base/msym-bp-2.c: New. * gdb.base/msym-bp-shl-lib.c: New file. * gdb.base/msym-bp-shl-main-2.c: New file. * gdb.base/msym-bp-shl-main.c: New file. * gdb.base/msym-bp-shl.exp: New file. * gdb.base/msym-bp.c: New file. * gdb.base/msym-bp.exp: New file.
2020-09-13Re: elf: Add -z unique-symbolAlan Modra2-3/+9
PR 26391 * testsuite/ld-elf/pr26391.nd: Adjust to match powerpc64 function descriptors.
2020-09-12Update NEWS post GDB 10 branch creation.Joel Brobecker2-1/+9
gdb/ChangeLog: * NEWS: Create a new section for the next release branch. Rename the section of the current branch, now that it has been cut.
2020-09-12Bump version to 11.0.50.DATE-git.Joel Brobecker4-2/+11
Now that the GDB 10 branch has been created, we can bump the version number. gdb/ChangeLog: GDB 10 branch created (8087c3fa8b5d695e3e29e69d70d0b35ec902ac59): * version.in: Bump version to 11.0.50.DATE-git. gdb/testsuite/ChangeLog: * gdb.base/default.exp: Change $_gdb_major to 11.
2020-09-13Automatic date update in version.inGDB Administrator1-1/+1
2020-09-12Fix GDB build in infrun.c when configured with unit tests disabledgdb-10-branchpointJoel Brobecker2-0/+7
I noticed this while testing the GDB in the context of the upcoming GDB 10 release branching, because part of the process involves setting development to False, which in turn changes the default for including unittest to false as well. As a result, without this patch, we get compilation errors in infrun.c such as: infrun.c:9219:5: error: `scoped_mock_context' was not declared in this scope This patch fixes it by bracketing the unitttest in namespace selftest with an #if GDB_SELF_TEST. gdb/ChangeLog: * infrun.c (namespace selftests): Only define #if GDB_SELF_TEST. Tested on x86_64-linux, with and without self-tests.
2020-09-12elf: Add -z unique-symbol to avoid duplicated local symbol namesH.J. Lu16-41/+406
The symbol string table in the .symtab section is optional and cosmetic. The contents of the .symtab section have no impact on run-time execution. The symbol names in the symbol string table help distinguish addresses at different locations. Add a linker option, -z unique-symbol, to avoid duplicated local symbol names in the symbol string table. This feature was well received by the livepatch maintainers. It not only solves the duplicated local symbol name problem, but also would allow livepatch to more precisely locate duplicate symbols in general for patching. bfd/ PR ld/26391 * elflink.c (elf_final_link_info): Add local_hash_table. (local_hash_entry): New. (local_hash_newfunc): Likewise. (elf_link_output_symstrtab): Append ".COUNT" to duplicated local symbols. (bfd_elf_final_link): Initialize and free local_hash_table for "-z unique-symbol". include/ PR ld/26391 * bfdlink.h (bfd_link_info): Add unique_symbol. ld/ PR ld/26391 * NEWS: Mention "-z unique-symbol". * emultempl/elf.em (gld${EMULATION_NAME}_handle_option): Handle "-z unique-symbol" and "-z nounique-symbol". * ld.texi: Document "-z unique-symbol" and "-z nounique-symbol". * lexsup.c (elf_static_list_options): Add "-z unique-symbol" and "-z nounique-symbol". * testsuite/ld-elf/elf.exp: Add PR ld/26391 tests. * testsuite/ld-elf/pr26391.nd: New file. * testsuite/ld-elf/pr26391.out: Likewise. * testsuite/ld-elf/pr26391a.c: Likewise. * testsuite/ld-elf/pr26391b.c: Likewise. * testsuite/ld-elf/pr26391c.c: Likewise. * testsuite/ld-elf/pr26391d.c: Likewise.
2020-09-12Automatic date update in version.inGDB Administrator1-1/+1
2020-09-11Add bfloat16 support for AVX512 register view.Felix Willgerodt18-5/+413
This adds support for the bfloat16 datatype, which can be seen as a short version of FP32, skipping the least significant 16 bits of the mantissa. Since the datatype is currently only supported by the AVX512 registers, the printing of bfloat16 values is only supported for xmm, ymm and zmm registers. gdb/ChangeLog: 2020-09-11 Moritz Riesterer <moritz.riesterer@intel.com> Felix Willgerodt <Felix.Willgerodt@intel.com> * gdbarch.sh: Added bfloat16 type. * gdbarch.c: Regenerated. * gdbarch.h: Regenerated. * gdbtypes.c (floatformats_bfloat16): New struct. (gdbtypes_post_init): Add builtin_bfloat16. * gdbtypes.h (struct builtin_type) <builtin_bfloat16>: New member. (floatformats_bfloat16): New struct. * i386-tdep.c (i386_zmm_type): Add field "v32_bfloat16" (i386_ymm_type): Add field "v16_bfloat16" (i386_gdbarch_init): Add set_gdbarch_bfloat16_format. * target-descriptions.c (make_gdb_type): Add case TDESC_TYPE_BFLOAT16. * gdbsupport/tdesc.cc (tdesc_predefined_types): New member bfloat16. * gdbsupport/tdesc.h (tdesc_type_kind): New member TDESC_TYPE_BFLOAT16. * features/i386/64bit-avx512.xml: Add bfloat16 type. * features/i386/64bit-avx512.c: Regenerated. * features/i386/64bit-sse.xml: Add bfloat16 type. * features/i386/64bit-sse.c: Regenerated. gdb/testsuite/ChangeLog: 2020-09-11 Moritz Riesterer <moritz.riesterer@intel.com> Felix Willgerodt <Felix.Willgerodt@intel.com> * x86-avx512bf16.c: New file. * x86-avx512bf16.exp: Likewise. * lib/gdb.exp (skip_avx512bf16_tests): New function.
2020-09-11i386-tdep: Fix naming in zmm and ymm type descriptions.Felix Willgerodt2-14/+19
gdb/Changelog: 2020-07-02 Felix Willgerodt <felix.willgerodt@intel.com> * i386-tdep.c (i386_zmm_type): Fix field names. (i386_ymm_type): Fix field names.
2020-09-11Sync include, libiberty with GCC.Felix Willgerodt4-1/+37
include: 2020-09-10 Felix Willgerodt <felix.willgerodt@intel.com> Sync with GCC 2020-08-17 Felix Willgerodt <felix.willgerodt@intel.com> * floatformat.h (floatformat_bfloat16_big): New. (floatformat_bfloat16_little): New. libiberty: 2020-09-10 Felix Willgerodt <felix.willgerodt@intel.com> Sync with GCC 2020-08-17 Felix Willgerodt <felix.willgerodt@intel.com> * floatformat.c (floatformat_bfloat16_big): New. (floatformat_bfloat16_little): New.
2020-09-11gas: Don't error when .debug_line already exists, unless .loc was usedMark Wielaard13-10/+369
When -g was used to generate DWARF gas would error out when a .debug_line already exists. But when a .debug_info section already exists it would simply skip generating one without warning or error. Do the same for .debug_line. It is only an error when the user explicitly uses .loc directives and also generates the .debug_line table itself. The tests are unfortunately arch specific because the line table is only generated when actual instructions have been emitted. Use i386 because that is probably the most used architecture. Before this patch the new dwarf-line-2 testcase would fail, with this patch it succeeds (and doesn't try to add its own line table). gas/ChangeLog: * as.texi (-g): Explicitly mention when .debug_info and .debug_line are generated for the DWARF format. (Loc): Add that it is an error to both use a .loc directive and generate a .debug_line yourself. * dwarf2dbg.c (dwarf2_any_loc_directive_seen): New static variable. (dwarf2_directive_loc): Set dwarf2_any_loc_directive_seen to TRUE. (dwarf2_finish): Check dwarf2_any_loc_directive_seen before emitting an error. Only create .debug_line if it is empty (or doesn't exist). * testsuite/gas/i386/i386.exp: Add dwarf2-line-{1,2,3,4} when testing an elf target. * testsuite/gas/i386/dwarf2-line-{1,2,3,4}.{s,d,l}: New test files.
2020-09-12CSKY: Change ISA flag's type to bfd_uint64_t and fix build error.Cooper Qu2-31/+72
The previous patch missed one modification. Following is the error message: gas/config/tc-csky.c:806:5: error: 'CSKY_ARCH_804' undeclared here (not in a function); did you mean 'CSKY_ARCH_807'? include/ * opcode/csky.h (CSKYV1_ISA_E1): Convert to bfd_uint64_t type. (CSKYV2_ISA_E1): Likewise. (CSKYV2_ISA_1E2): Likewise. (CSKYV2_ISA_2E3): Likewise. (CSKYV2_ISA_3E7): Likewise. (CSKYV2_ISA_7E10): Likewise. (CSKYV2_ISA_3E3R1): Likewise. (CSKYV2_ISA_3E3R2): Likewise. (CSKYV2_ISA_10E60): Likewise. (CSKYV2_ISA_3E3R3): Likewise. (CSKY_ISA_TRUST): Likewise. (CSKY_ISA_CACHE): Likewise. (CSKY_ISA_NVIC): Likewise. (CSKY_ISA_CP): Likewise. (CSKY_ISA_MP): Likewise. (CSKY_ISA_MP_1E2): Likewise. (CSKY_ISA_JAVA): Likewise. (CSKY_ISA_MAC): Likewise. (CSKY_ISA_MAC_DSP): Likewise. (CSKY_ISA_DSP): Likewise. (CSKY_ISA_DSP_1E2): Likewise. (CSKY_ISA_DSP_ENHANCE): Likewise. (CSKY_ISA_DSPE60): Likewise. (CSKY_ISA_FLOAT_E1): Likewise. (CSKY_ISA_FLOAT_1E2): Likewise. (CSKY_ISA_FLOAT_1E3): Likewise. (CSKY_ISA_FLOAT_3E4): Likewise. (CSKY_ISA_FLOAT_7E60): Likewise. (CSKY_ISA_VDSP): Likewise. (CSKY_ISA_VDSP_2): Likewise. (CSKY_ARCH_804): Define. (CSKY_ARCH_805): Define. (CSKY_ARCH_800): Define.
2020-09-11Fix a segfault when creating an import library with 0 exports.Jeremy Drake3-2/+11
PR 26588 * emultempl/pe.em (_finish): Only generate a import library if not exporting relocs. * emultempl/pep.em: Likewise.
2020-09-11[gdb/testsuite] Kfail gdb.cp/ambiguous.exp FAILs for PR26602Tom de Vries2-0/+12
Kfail these FAILs as caused by PR exp/26602: ... FAIL: gdb.cp/ambiguous.exp: print x.x FAIL: gdb.cp/ambiguous.exp: print n.x FAIL: gdb.cp/ambiguous.exp: print j.x FAIL: gdb.cp/ambiguous.exp: print jva1.x FAIL: gdb.cp/ambiguous.exp: print jva2.x FAIL: gdb.cp/ambiguous.exp: print (A1)j FAIL: gdb.cp/ambiguous.exp: print (A1)jva1 ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-09-11 Tom de Vries <tdevries@suse.de> PR exp/26602 * gdb.cp/ambiguous.exp: Add KFAILs for PR26602.
2020-09-11x86: Add NT_X86_CET noteH.J. Lu4-0/+12
Define NT_X86_CET which is the proposed note for x86 CET state to support Intel CET in Linux kernel. Double check it after Intel CET patches have been merged into Linux kernel. binutils/ * readelf.c (get_note_type): Support NT_X86_CET. include/ * elf/common.h (NT_X86_CET): New.
2020-09-11Fix the debuglink following code to recursively load links found in the ↵Nick Clifton2-27/+60
newly loaded debug info. PR 26595 * dwarf.c (load_separate_debug_info): Return NULL rather than FALSE in error situations. (load_separate_debug_file): Move code to load debug links to ... (check_for_and_load_links): ... here. New function. Load separate debug information pointed to by debuglink and debugaltlink sections. Recursively scan newly loaded debug information for more links and load them too.
2020-09-11gdb/breakpoint: fix typo in help message of "set breakpoint ↵Tankut Baris Aktemur2-1/+6
condition-evaluation" The options for the "breakpoint condition-evaluation" setting are "host", "target", and "auto". The help message mentions the option "gdb" at one point instead of "host". Fix this typo. Also add a period. gdb/ChangeLog: 2020-09-11 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * breakpoint.c: Fix typo in the help message of the "set breakpoint condition-evaluation" command.
2020-09-11gdb/testsuite: remove stale comment in gdb.base/bp-cmds-execution-x-script.expTankut Baris Aktemur2-5/+4
Remove a stale command that is apparently forgotten after a copy-paste from 'gdb.base/break-main-file-remove-fail.exp'. gdb/testsuite/ChangeLog: 2020-09-11 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * gdb.base/bp-cmds-execution-x-script.exp: Remove a stale comment.