Age | Commit message (Collapse) | Author | Files | Lines |
|
Introduce and use a unique pointer specialization for the
debuginfod_client type. The deleter calls debuginfod_end to free the
client.
gdb/ChangeLog:
* debuginfod-support.c (debuginfod_client_deleter): New.
(debuginfod_client_up): New.
(debuginfod_init): Return debuginfod_client_up.
(debuginfod_source_query): Adjust.
(debuginfod_debuginfo_query): Adjust.
Change-Id: Ie56441e123ab80b78e5311c824c162cd804f68c0
|
|
Use make_unique_xstrdup instead of reset + xstrdup.
gdb/ChangeLog:
* debuginfod-support.c (debuginfod_source_query): Use
make_unique_xstrdup.
Change-Id: Iee9524fea7630b4d6ee5c74e30c60fe222dc1d2c
|
|
Remove it, use the `type::instance_flags` method everywhere.
gdb/ChangeLog:
* gdbtypes.h (TYPE_INSTANCE_FLAGS): Remove, replace all uses
with `type::instance_flags`.
Change-Id: I3653108b712e6186529cb0102e2b70247bbcabbe
|
|
Fixes:
CXX xml-tdesc.o
/home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c: In function const target_desc* file_read_description_xml(const char*):
/home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c:681:60: error: too few arguments to function target_desc* tdesc_parse_xml(const char*, xml_fetch_another, void*)
681 | return tdesc_parse_xml (tdesc_str->data (), fetch_another);
| ^
/home/smarchi/src/binutils-gdb/gdb/xml-tdesc.c:44:1: note: declared here
44 | tdesc_parse_xml (const char *document, xml_fetch_another fetcher,
| ^~~~~~~~~~~~~~~
Commit 8400a90d19c5 ("gdb: change xml_fetch_another a function_view")
removed the `baton` parameter of `tdesc_parse_xml`, but didn't update
the version of the function used when GDB is built with no libexpat
support. Remove the parameter in that definition too.
gdb/ChangeLog:
* xml-tdesc.c [!defined(HAVE_LIBEXPAT)] (tdesc_parse_xml):
Remove baton parameter.
Change-Id: I4ad29fbb7c3323f30ce5204c2976eaea16151a2e
|
|
This patch started by adding comprehensive unit tests for enum_flags.
For the testing part, it adds:
- tests of normal expected uses of the API.
- checks that _invalid_ uses of the API would fail to compile. I.e.,
it validates that enum_flags really is a strong type, and that
incorrect mixing of enum types would be caught at compile time. It
pulls that off making use of SFINEA and C++11's decltype/constexpr.
This revealed many holes in the enum_flags API. For example, the f1
assignment below currently incorrectly fails to compile:
enum_flags<flags> f1 = FLAG1;
enum_flags<flags> f2 = FLAG2 | f1;
The unit tests also revealed that this useful use case doesn't work:
enum flag { FLAG1 = 1, FLAG2 = 2 };
enum_flags<flag> src = FLAG1;
enum_flags<flag> f1 = condition ? src : FLAG2;
It fails to compile because enum_flags<flag> and flag are convertible
to each other.
Turns out that making enum_flags be implicitly convertible to the
backing raw enum type was not a good idea.
If we make it convertible to the underlying type instead, we fix that
ternary operator use case, and, we find cases throughout the codebase
that should be using the enum_flags but were using the raw backing
enum instead. So it's a good change overall.
Also, several operators were missing.
These holes and more are plugged by this patch, by reworking how the
enum_flags operators are implemented, and making use of C++11's
feature of being able to delete methods/functions.
There are cases in gdb/compile/ where we need to call a function in a
C plugin API that expects the raw enum. To address cases like that,
this adds a "raw()" method to enum_flags. This way we can keep using
the safer enum_flags to construct the value, and then be explicit when
we need to get at the raw enum.
This makes most of the enum_flags operators constexpr. Beyond
enabling more compiler optimizations and enabling the new unit tests,
this has other advantages, like making it possible to use operator|
with enum_flags values in switch cases, where only compile-time
constants are allowed:
enum_flags<flags> f = FLAG1 | FLAG2;
switch (f)
{
case FLAG1 | FLAG2:
break;
}
Currently that fails to compile.
It also switches to a different mechanism of enabling the global
operators. The current mechanism isn't namespace friendly, the new
one is.
It also switches to C++11-style SFINAE -- instead of wrapping the
return type in a SFINAE-friently structure, we use an unnamed template
parameter. I.e., this:
template <typename enum_type,
typename = is_enum_flags_enum_type_t<enum_type>>
enum_type
operator& (enum_type e1, enum_type e2)
instead of:
template <typename enum_type>
typename enum_flags_type<enum_type>::type
operator& (enum_type e1, enum_type e2)
Note that the static_assert inside operator~() was converted to a
couple overloads (signed vs unsigned), because static_assert is too
late for SFINAE-based tests, which is important for the CHECK_VALID
unit tests.
Tested with gcc {4.8, 7.1, 9.3} and clang {5.0.2, 10.0.0}.
gdb/ChangeLog:
* Makefile.in (SELFTESTS_SRCS): Add
unittests/enum-flags-selftests.c.
* btrace.c (ftrace_update_caller, ftrace_fixup_calle): Use
btrace_function_flags instead of enum btrace_function_flag.
* compile/compile-c-types.c (convert_qualified): Use
enum_flags::raw.
* compile/compile-cplus-symbols.c (convert_one_symbol)
(convert_symbol_bmsym):
* compile/compile-cplus-types.c (compile_cplus_convert_method)
(compile_cplus_convert_struct_or_union_methods)
(compile_cplus_instance::convert_qualified_base):
* go-exp.y (parse_string_or_char): Add cast to int.
* unittests/enum-flags-selftests.c: New file.
* record-btrace.c (btrace_thread_flag_to_str): Change parameter's
type to btrace_thread_flags from btrace_thread_flag.
(record_btrace_cancel_resume, record_btrace_step_thread): Change
local's type to btrace_thread_flags from btrace_thread_flag. Add
cast in DEBUG call.
gdbsupport/ChangeLog:
* enum-flags.h: Include "traits.h".
(DEF_ENUM_FLAGS_TYPE): Declare a function instead of defining a
structure.
(enum_underlying_type): Update comment.
(namespace enum_flags_detail): New. Move struct zero_type here.
(EnumIsUnsigned, EnumIsSigned): New.
(class enum_flags): Make most methods constexpr.
(operator&=, operator|=, operator^=): Take an enum_flags instead
of an enum_type. Make rvalue ref versions deleted.
(operator enum_type()): Delete.
(operator&, operator|, operator^, operator~): Delete, moved out of
class.
(raw()): New method.
(is_enum_flags_enum_type_t): Declare.
(ENUM_FLAGS_GEN_BINOP, ENUM_FLAGS_GEN_COMPOUND_ASSIGN)
(ENUM_FLAGS_GEN_COMP): New. Use them to reimplement global
operators.
(operator~): Now constexpr and reimplemented.
(operator<<, operator>>): New deleted functions.
* valid-expr.h (CHECK_VALID_EXPR_5, CHECK_VALID_EXPR_6): New.
|
|
These methods now take/return a type_instance_flags instead of a raw
integer, so rename them accordingly.
gdb/ChangeLog:
* c-typeprint.c (c_type_print_modifier): Adjust to rename.
* gdbtypes.c (address_space_name_to_int): Rename to ...
(address_space_name_to_type_instance_flags): ... this.
(address_space_int_to_name): Rename to ...
(address_space_type_instance_flags_to_name): ... this.
* gdbtypes.h (address_space_name_to_int): Rename to ...
(address_space_name_to_type_instance_flags): ... this.
(address_space_int_to_name): Rename to ...
(address_space_type_instance_flags_to_name): ... this.
* type-stack.c (type_stack::insert): Adjust to rename.
* type-stack.h (type_stack::insert): Likewise.
|
|
A later patch in this series will rewrite enum_flags fixing some API
holes. That would cause build failures around code using
type_instance_flags. Or rather, that should be using it, but wasn't.
This patch fixes it by using type_instance_flags throughout instead of
plain integers.
Note that we can't make the seemingly obvious change to struct
type::instance_flags:
- unsigned instance_flags : 9;
+ ENUM_BITFIELD (type_instance_flag_value) instance_flags : 9;
Because G++ complains then that 9 bits isn't sufficient for holding
all values of type_instance_flag_value.
So the patch adds an type::instance_flags() method, which takes care
of casting appropriately, and adds a separate type::set_instance_flags
method, following the pattern of the ongoing TYPE_XXX macro
elimination. This converts uses of TYPE_INSTANCE_FLAGS to
type::instance_flags() in the places where the code was already being
touched, but there are still many references to the
TYPE_INSTANCE_FLAGS macro left behind. Those could/should be fully
replaced at some point.
gdb/ChangeLog:
* avr-tdep.c (avr_address_class_type_flags): Return
type_instance_flags.
(avr_address_class_type_flags_to_name): Take a
type_instance_flags.
(avr_address_class_name_to_type_flags): Return bool and take a
type_instance_flags.
* d-lang.c (build_d_types): Use type::set_instance_flags.
* ft32-tdep.c (ft32_address_class_type_flags): Return
type_instance_flags.
(ft32_address_class_type_flags_to_name): Take a
type_instance_flags.
(ft32_address_class_name_to_type_flags): Return bool and take a
type_instance_flags.
(ft32_gdbarch_init): Use type::set_instance_flags.
* eval.c (fake_method::fake_method): Use type::set_instance_flags.
* gdbarch.h, gdbarch.c: Regenerate.
* gdbarch.sh (address_class_type_flags): Use type_instance_flags.
(address_class_name_to_type_flags): Use type_instance_flags and
bool.
* gdbtypes.c (address_space_name_to_int)
(address_space_int_to_name, make_qualified_type): Use
type_instance_flags.
(make_qualified_type): Use type_instance_flags and
type::set_instance_flags.
(make_type_with_address_space, make_cv_type, make_vector_type)
(check_typedef): Use type_instance_flags.
(recursive_dump_type): Cast type_instance_flags to unsigned for
printing.
(copy_type_recursive): Use type::set_instance_flags.
(gdbtypes_post_init): Use type::set_instance_flags.
* gdbtypes.h (struct type) <instance_flags>: Rename to ...
<m_instance_flags>: ... this.
<instance_flags, set_instance_flags>: New methods.
(TYPE_INSTANCE_FLAGS): Use the instance_flags method.
(SET_TYPE_INSTANCE_FLAGS): New.
(address_space_name_to_int, address_space_int_to_name)
(make_type_with_address_space): Pass flags using
type_instance_flags instead of int.
* stabsread.c (cleanup_undefined_types_noname): Use
type::set_instance_flags.
* s390-tdep.c (s390_address_class_type_flags): Return
type_instance_flags.
(s390_address_class_type_flags_to_name): Take a
type_instance_flags.
(s390_address_class_name_to_type_flags): Return bool and take a
type_instance_flags.
* type-stack.c (type_stack::follow_types): Use
type_instance_flags.
* dwarf2/read.c (read_tag_pointer_type): Use type_instance_flags.
|
|
Many global arrays in gdb could be marked "const" but are not. This
patch changes some of them. (There may be other arrays that could
benefit from this treatment. I only examined arrays of strings.)
This lets the linker move some symbols to the readonly data section.
For example, previously:
0000000000000000 d _ZL18can_use_agent_enum
is now:
0000000000000030 r _ZL18can_use_agent_enum
2020-09-14 Tom Tromey <tromey@adacore.com>
* x86-tdep.h (x86_in_indirect_branch_thunk): Update.
* x86-tdep.c (x86_is_thunk_register_name)
(x86_in_indirect_branch_thunk): Update.
* sparc64-tdep.c (sparc64_fpu_register_names)
(sparc64_cp0_register_names, sparc64_register_names)
(sparc64_pseudo_register_names): Now const.
* sparc-tdep.h (struct gdbarch_tdep) <fpu_register_names,
cp0_registers_num>: Now const.
* sparc-tdep.c (sparc_core_register_names)
(sparc32_fpu_register_names, sparc32_cp0_register_names)
(sparc32_pseudo_register_names): Now const.
(validate_tdesc_registers): Update.
* rust-lang.c (rust_extensions): Now const.
* p-lang.c (p_extensions): Now const.
* objc-lang.c (objc_extensions): Now const.
* nto-tdep.c (nto_thread_state_str): Now const.
* moxie-tdep.c (moxie_register_names): Now const.
* mips-tdep.h (struct gdbarch_tdep) <mips_processor_reg_names>:
Now const.
* mips-tdep.c (mips_generic_reg_names, mips_tx39_reg_names)
(mips_linux_reg_names): Now const.
(mips_gdbarch_init): Update.
* microblaze-tdep.c (microblaze_register_names): Now const.
* m68k-tdep.c (m68k_register_names): Now const.
* m32r-tdep.c (m32r_register_names): Now const.
* ia64-tdep.c (ia64_register_names): Now const.
* i386-tdep.h (struct gdbarch_tdep) <register_names,
ymmh_register_names, ymm16h_regnum, mpx_register_names,
k_register_names, zmmh_register_names, xmm_avx512_register_names,
ymm_avx512_register_names, pkeys_register_names>: Now const.
* i386-tdep.c (i386_register_names, i386_zmm_names)
(i386_zmmh_names, i386_k_names, i386_ymm_names, i386_ymmh_names)
(i386_mpx_names, i386_pkeys_names, i386_bnd_names)
(i386_mmx_names, i386_byte_names, i386_word_names): Now const.
* f-lang.c (f_extensions): Now const.
* d-lang.c (d_extensions): Now const.
* csky-tdep.c (csky_register_names): Now const.
* charset.c (default_charset_names, charset_enum): Now const.
(_initialize_charset): Update.
* c-lang.c (c_extensions, cplus_extensions, asm_extensions): Now
const.
* bsd-uthread.c (bsd_uthread_solib_names): Now const.
(bsd_uthread_solib_loaded): Update.
(bsd_uthread_state): Now const.
* amd64-tdep.c (amd64_register_names, amd64_ymm_names)
(amd64_ymm_avx512_names, amd64_ymmh_names)
(amd64_ymmh_avx512_names, amd64_mpx_names, amd64_k_names)
(amd64_zmmh_names, amd64_zmm_names, amd64_xmm_avx512_names)
(amd64_pkeys_names, amd64_byte_names, amd64_word_names)
(amd64_dword_names): Now const.
* agent.c (can_use_agent_enum): Now const.
* ada-tasks.c (task_states, long_task_states): Now const.
* ada-lang.c (known_runtime_file_name_patterns)
(known_auxiliary_function_name_patterns, attribute_names)
(standard_exc, ada_extensions): Now const.
gdbserver/ChangeLog
2020-09-14 Tom Tromey <tromey@adacore.com>
* tracepoint.cc (eval_result_names): Now const.
* ax.cc (gdb_agent_op_names): Now const.
|
|
The two function pointers optionally passed to gdb::bcache are very good
candidates to be turned into virtual methods, this patch does that in
the most straightforward / unsurprising way.
gdb/ChangeLog:
* bcache.h (struct bcache) <bcache>: Remove constructor.
<m_hash_function, m_compare_function>: Remove.
<~bcache>: Make virtual.
<compare>: Remove static method, introduce virtual method.
<default_hash>: Remove.
<hash>: New virtual method.
* bcache.c (bcache::expand_hash_table): Update.
(bcache::insert): Update.
(bcache::hash): New.
(bcache::compare): Update comment and parameter names.
* gdbtypes.c (types_deeply_equal): Update.
* psymtab.h (struct psymbol_bcache): New struct.
(class psymtab_storage) <psymtab_storage>: Make default.
<psymbol_cache>: Change type to psymbol_bcache.
* psymtab.c (psymtab_storage::psymtab_storage): Remove.
(psymbol_hash): Change to...
(psymbol_bcache::hash): ... this.
(psymbol_compare): Change to...
(psymbol_bcache::compare): ... this.
Change-Id: I41d578e61de8ac1163461a28fbd220d1f855e372
|
|
target_ops::wait implementations should not rely on the value of
inferior_ptid on entry. While looking at another wait-related patch, I
noticed that the code in linux_nat_wait_1, checking for a newly created
process, did just that. This patch fixes it. Note that I didn't see
any bug, this "fix" is simply to make the function respect the
target_ops::wait contract.
Instead of checking inferior_ptid, check for the passed in `ptid`
value.
During startup, linux_nat_wait_1 gets called a few times with the
pid-only ptid, while startup_inferior waits for the expected number of
exec events. For this reason, I needed to add a `find_lwp_pid` call to
ensure that the actions of changing the main thread's ptid, and adding
the initial lwp, were done only once for a given process.
This was not needed before, since thread_change_ptid, through the
thread_ptid_changed observer, ends up changing inferior_ptid. So the
second time around, inferior_ptid was not a pid-only ptid.
That find_lwp_pid won't add much overhead, as it will only be called
when the ptid is a pid-only ptid. And AFAIK, that only happens during
inferior startup.
An alternative to that `find_lwp_pid` call might be to make
startup_inferior realize that the main thread has changed ptid, and make
it wait for the new ptid. But that doesn't look easy to do.
Regtested on amd64/Linux.
gdb/ChangeLog:
* linux-nat.c (linux_nat_wait_1): Don't use inferior_ptid when
checking for initial lwp.
Change-Id: I8f1d5c766f5cb2a29c948bc75fa4582d7130c23f
|
|
Recently I tried the m68k port of gdb. It had some issues, which are
fixed in this patch.
* Various types of return values were not being handled properly. In
particular:
* arrays are returned by following the same convention as
structures. This matters in languages like Ada, where an array
can in fact be returned as a value.
* "long double" was not being handled correctly in
m68k_svr4_return_value.
* GCC's m68k back end does not return vector types in registers, so
change gdb to follow.
* GCC's m68k back end doesn't faithfully implement the ABI, and so
some objects with unusual size (not possible in C, but possible in
Ada) are not returned correctly.
* gcc implements an m68k ABI variant that it simply describes as
"embedded". This ABI is similar to the SVR4 ABI, but rather than
returning pointer-typed values in %a0, such values are returned in
%d0. To support this, an ELF osabi sniffer is added.
* Commit 85f7484a ("m68k: tag floating-point ABI used") adds an
attribute that can be used to recognize when hard- or soft-float is
in use. gdb can now read this tag and choose the ABI accordingly.
I was unable to run the gdb test suite with this patch. Instead, I
tested it using qemu and the internal AdaCore test suite.
gdb/ChangeLog
2020-09-14 Tom Tromey <tromey@adacore.com>
* m68k-tdep.c (m68k_extract_return_value): Use
pointer_result_regnum.
(m68k_store_return_value): Likewise.
(m68k_reg_struct_return_p): Handle vectors and arrays.
(m68k_return_value): Handle arrays.
(m68k_svr4_return_value): Fix single-element aggregate handling.
Handle long double. Adjust for embedded ABI.
(m68k_svr4_init_abi): Set pointer_result_regnum.
(m68k_embedded_init_abi): New function.
(m68k_gdbarch_init): Handle Tag_GNU_M68K_ABI_FP.
(m68k_osabi_sniffer): New function.
(_initialize_m68k_tdep): Register osabi sniffer.
* m68k-tdep.h (struct gdbarch_tdep) <pointer_result_regnum>: New
member.
|
|
Replace an xfree with automatic memory management with a unique pointer.
gdb/ChangeLog:
* xml-support.c (xml_fetch_content_from_file): Replace xfree
with gdb::unique_xmalloc_ptr<char>.
Change-Id: Ia4d735b383e3b9eb660f445f2c7f2c5e27411b64
|
|
The xml_fetch_another is currently a plain function pointer type, with a
`void *` baton parameter. To improve type-safety, change this to a
function_view. Any required data is captured by a lambda at the call
site.
gdb/ChangeLog:
* xml-support.h (xml_fetch_another): Change type to be a
function_view.
(xml_process_xincludes): Remove baton parameter.
(xml_fetch_content_from_file): Change baton parameter to
dirname.
* xml-support.c (struct xinclude_parsing_data)
<xinclude_parsing_data>: Remove baton parameter.
<fetcher_baton>: Remove.
(xinclude_start_include): Adjust.
(xml_process_xincludes): Adjust.
(xml_fetch_content_from_file): Replace baton parameter with
dirname.
* xml-syscall.c (syscall_parse_xml): Remove baton parameter.
(xml_init_syscalls_info): Use a lambda.
* xml-tdesc.c (tdesc_parse_xml): Remove baton parameter.
(file_read_description_xml): Use a lambda.
(fetch_available_features_from_target): Change baton parameter
to target_ops.
(target_read_description_xml): Use a lambda.
(target_fetch_description_xml): Use a lambda.
(string_read_description_xml): Update.
Change-Id: I7ba4b8f5e97fc6a952c6c20ccc3be92a06cc2bd2
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): Remove, replace all
uses with type::endianity_is_not_default.
Change-Id: I61956093c8ce6703299e913746ba91313108a0f2
|
|
Add the `endianity_is_not_default` and `set_endianity_is_not_default`
methods on `struct type`, in order to remove the
`TYPE_ENDIANITY_NOT_DEFAULT` macro. In this patch, the macro is changed
to use the getter, so all the call sites of the macro that are used as a
setter are changed to use the setter method directly. The next patch
will remove the macro completely.
gdb/ChangeLog:
* gdbtypes.h (struct type) <endianity_is_not_default,
set_endianity_is_not_default>: New methods.
(TYPE_ENDIANITY_NOT_DEFAULT): Use
type::endianity_is_not_default, change all write call sites to
use type::set_endianity_is_not_default.
Change-Id: I67acd68fcdae424d7e4a601afda78612ad5d92db
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_FIXED_INSTANCE): Remove, replace all
uses with type::is_fixed_instance.
Change-Id: I57731b5ab44aac7d8896a32b9c7481891baea51a
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_GNU_IFUNC): Remove, replace all
uses with type::is_gnu_ifunc.
Change-Id: I72aae22599b5e582910c5d50588feaf159032bd8
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_STUB_SUPPORTED): Remove, replace all
uses with type::stub_is_supported.
Change-Id: I69dbc32a619455605b7f934a701bc36bd664b7c0
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_VECTOR): Remove, replace all
uses with type::is_vector.
Change-Id: I1ac28755af44b1585c190553f9961288c8fb9137
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_VARARGS): Remove, replace all
uses with type::has_varargs.
Change-Id: Ieea4a64b4bfa4b8be643e68cb403081881133740
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_PROTOTYPED): Remove, replace all
uses with type::is_prototyped.
Change-Id: Ic96b19c24ce5afcd7e1302a75c39909767e4d885
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_TARGET_STUB): Remove, replace all
uses with type::target_is_stub.
Change-Id: I3e7dadcb485d991af68a1e93693e3895b0e755d5
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_STUB): Remove, replace all
uses with type::is_stub.
Change-Id: Iec25b50449a0d10a38f815209e478c343e98632c
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_NOSIGN): Remove, replace all uses with
type::has_no_signedness.
Change-Id: Iaf8d1cedad195d03a4358e90f6ada77290d03bf2
|
|
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
|
|
gdb/ChangeLog:
* gdbtypes.h (TYPE_UNSIGNED): Remove, replace all uses with
type::is_unsigned.
Change-Id: I84f76f5cd44ff7294e421d317376a9e476bc8666
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|