Commit Graph

103628 Commits

Author SHA1 Message Date
Tom de Vries
76547ab31b [gdb] Fix segfault in solib_contains_address_p
Starting commit bb2a67773c "Use a std::vector in target_section_table" we run
into:
...
ERROR: GDB process no longer exists
GDB process exited with wait status 22239 exp12 0 0 CHILDKILLED SIGABRT
UNRESOLVED: gdb.base/exec-invalid-sysroot.exp: continue to exec catchpoint
...
which reproduces as:
...
Thread 1 "gdb" received signal SIGSEGV, Segmentation fault.
solib_contains_address_p (address=4196111, solib=0x1dd9970)
    at /home/vries/gdb_versions/devel/src/gdb/solib.c:1120
1120      for (target_section &p : solib->sections->sections)
(gdb) p solib->sections->sections
Cannot access memory at address 0x0
...

Fix this by handling solib->sections == nullptr in solib_contains_address_p.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-10-14  Tom de Vries  <tdevries@suse.de>

	PR gdb/26733
	* solib.c (solib_contains_address_p): Handle
	'solib->sections == nullptr'.
2020-10-14 12:24:42 +02:00
H.J. Lu
7b47a31256 x86: Rename VexOpcode to OpcodePrefix
Rename VexOpcode to OpcodePrefix so that OpcodePrefix can be used for
regular encoding prefix.

gas/

	* config/tc-i386.c (build_vex_prefix): Replace vexopcode with
	opcodeprefix.
	(build_evex_prefix): Likewise.
	(is_any_vex_encoding): Don't check vexopcode.
	(output_insn): Handle opcodeprefix.

opcodes/

	* i386-gen.c (opcode_modifiers): Replace VexOpcode with
	OpcodePrefix.
	* i386-opc.h (VexOpcode): Renamed to ...
	(OpcodePrefix): This.
	(PREFIX_NONE): New.
	(PREFIX_0X66): Likewise.
	(PREFIX_0XF2): Likewise.
	(PREFIX_0XF3): Likewise.
	* i386-opc.tbl (Prefix_0X66): New.
	(Prefix_0XF2): Likewise.
	(Prefix_0XF3): Likewise.
	Replace VexOpcode= with OpcodePrefix=.  Use Prefix_0X66 on xorpd.
	Use Prefix_0XF3 on cvtdq2pd.  Use Prefix_0XF2 on cvtpd2dq.
	* i386-tbl.h: Regenerated.
2020-10-13 19:29:09 -07:00
GDB Administrator
6248f5e4fc Automatic date update in version.in 2020-10-14 00:00:10 +00:00
Pedro Alves
b75d55d4d2 Eliminate mi_run_to_main, introduce mi_clean_restart
Since we now have mi_runto_main which is like runto_main, eliminate
mi_run_to_main, in favor of a new MI clean_restart counterpart --
mi_clean_restart -- and mi_runto_main.

This makes MI testcases look a bit more like CLI testcases.

gdb/testsuite/ChangeLog:

	* lib/mi-support.exp (mi_clean_restart): New.
	(mi_run_to_main): Delete.
	All callers adjust to use mi_clean_restart / mi_runto_main.

Change-Id: I34920bab4fea1f23fb752928c2969c1f6ad714b6
2020-10-13 22:34:54 +01:00
Pedro Alves
e777225bfd gdb/testsuite/: Use "-qualified" in explicit "break main", etc.
Similar to the previous patch, but this time add "-q" to tests that do
"break main", "list main", etc. explicitly.

gdb/testsuite/ChangeLog:

	* config/monitor.exp: Use "list -q".
	* gdb.arch/gdb1558.exp: Use "break -q".
	* gdb.arch/i386-permbkpt.exp: Use "break -q".
	* gdb.arch/i386-prologue-skip-cf-protection.exp: Use "break -q".
	* gdb.base/break.exp: Use "break -q", "list -q" and "tbreak -q".
	* gdb.base/commands.exp: Use "break -q".
	* gdb.base/condbreak.exp: Use "break -q".
	* gdb.base/ctf-ptype.exp: Use "list -q".
	* gdb.base/define.exp: Use "break -q".
	* gdb.base/del.exp: Use "break -q".
	* gdb.base/fullname.exp: Use "break -q".
	* gdb.base/hbreak-in-shr-unsupported.exp: Use "hbreak -q".
	* gdb.base/hbreak-unmapped.exp: Use "hbreak -q".
	* gdb.base/hbreak2.exp: Use "hbreak -q" and "list -q".
	* gdb.base/hw-sw-break-same-address.exp: Use "break -q" and
	"hbreak -q".
	* gdb.base/included.exp: Use "list -q".
	* gdb.base/label.exp: Use "break -q".
	* gdb.base/lineinc.exp: Use "break -q".
	* gdb.base/list.exp: Use "list -q".
	* gdb.base/macscp.exp: Use "list -q".
	* gdb.base/pending.exp: Use "break -q".
	* gdb.base/prologue-include.exp: Use "break -q".
	* gdb.base/ptype.exp: Use "list -q".
	* gdb.base/sepdebug.exp: Use "break -q", "list -q" and "tbreak -q".
	* gdb.base/server-del-break.exp: Use "break -q".
	* gdb.base/style.exp: Use "break -q".
	* gdb.base/symbol-without-target_section.exp: Use "list -q".
	* gdb.base/watchpoint-reuse-slot.exp: Use "hbreak -q".
	* gdb.cp/exception.exp: Use "tbreak -q".
	* gdb.dwarf2/dw2-error.exp: Use "break -q".
	* gdb.dwarf2/fission-mix.exp: Use "break -q".
	* gdb.dwarf2/fission-reread.exp: Use "break -q".
	* gdb.dwarf2/pr13961.exp: Use "break -q".
	* gdb.linespec/explicit.exp: Use "list -q".
	* gdb.linespec/linespec.exp: Use "break -q".
	* gdb.mi/mi-simplerun.exp: Use "--qualified".
	* gdb.python/py-mi-objfile-gdb.py: Use "list -q".
	* gdb.server/bkpt-other-inferior.exp: Use "break -q".
	* gdb.server/connect-without-multi-process.exp: Use "break -q".
	* gdb.trace/change-loc.exp: Use "break -q".
	* gdb.trace/pending.exp: Use "break -q".
	* gdb.tui/basic.exp: Use "list -q".
	* gdb.tui/list-before.exp: Use "list -q".
	* gdb.tui/list.exp: Use "list -q".
	* lib/gdb.exp (gdb_has_argv0): Use "break -q".

Change-Id: Iab9408e90ed71cbb111cd737d2d81b5ba8adb108
2020-10-13 22:34:26 +01:00
Pedro Alves
8abd8ee8c8 gdb/testsuite/: Use -qualified in runto_main / mi_runto_main
In some runtimes, there may be a "main" function in some class or
namespace.  The breakpoint created by runto_main may therefore have
unexpected locations on some other functions than the actual main.
These breakpoint locations can unexpectedly get hit during tests and
lead to failures.

I saw this while playing with AMD's ROCm toolchain -- I wrote a board
file to run the testsuite against device kernels.  There, the runtime
calls a "main" function before the device kernel code is reached:

 Thread 4 "bit_extract" hit Breakpoint 1, 0x00007ffeea140960 in lld:🧝:LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 (gdb) bt
 #0  0x00007ffeea140960 in lld:🧝:LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 #1  0x00007ffeea2257a5 in lld:🧝:link(llvm::ArrayRef<char const*>, bool, llvm::raw_ostream&, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #2  0x00007ffeea1bc374 in COMGR::linkWithLLD(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #3  0x00007ffeea1bfb09 in COMGR::InProcessDriver::execute(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 #4  0x00007ffeea1c4da9 in COMGR::AMDGPUCompiler::linkToExecutable() () from /opt/rocm/lib/libamd_comgr.so.1
 #5  0x00007ffeea1fde20 in dispatchCompilerAction(amd_comgr_action_kind_s, COMGR::DataAction*, COMGR::DataSet*, COMGR::DataSet*, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #6  0x00007ffeea203a87 in amd_comgr_do_action () from /opt/rocm/lib/libamd_comgr.so.1
 ...

To avoid that, pass "qualified" to runto, in runto_main, so that
gdb_breakpoint ends up creating a breakpoint with -qualified.  This
avoids creating breakpoints locations for other unrelated "main"
functions.

Note: I first tried making runto itself use "-qualified", but that
caused regressions in the gdb.ada/ tests, which use runto without
specifying the whole fully-qualified function name (i.e., without the
package).  So I end up restricting the -qualified to
runto_main/mi_runto_main.

The gdb.base/ui-redirect.exp change is necessary because that testcase
is looking at what "save breakpoint" generates.

gdb/testsuite/ChangeLog:

	* gdb.base/ui-redirect.exp: Expect "break -qualified main" in
	saved breakpoints file.
	* gdb.guile/scm-breakpoint.exp: Expect "-qualified main" when
	inspecting breakpoint list.
	* lib/gdb.exp (runto_main): Add "qualified" to options.
	* lib/mi-support.exp (mi_runto_helper): Add 'qualified' parameter,
	and handle it.
	(mi_runto_main): Pass 1 as qualified argument.

Change-Id: I51468359ab0a518f05f7c0394c97f7e33b45fe69
2020-10-13 22:28:48 +01:00
Pedro Alves
f71e6719e1 Introduce mi_runto_main
This adds an mi_runto_main routine, very much like the runto_main CLI
counterpart.

Note there's already a mi_run_to_main (extra underscore in "run_to"),
but unlike its intro comment says, that does more than the CLI's
runto_main -- it also starts GDB.  I would like to eliminate that
other one by introducing a mi_clean_restart function instead.  That is
done later in the series.

gdb/testsuite/ChangeLog:

	* lib/mi-support.exp (mi_runto_main): New proc.
	(mi_run_to_main): Use it.
	* gdb.mi/mi-catch-cpp-exceptions.exp: Likewise.
	* gdb.mi/mi-var-cmd.exp: Likewise.
	* gdb.mi/mi-var-invalidate.exp: Likewise.
	* mi-var-list-children-invalid-grandchild.exp: Likewise.
	* gdb.mi/mi2-amd64-entry-value.exp: Likewise.
	* gdb.mi/new-ui-mi-sync.exp: Likewise.
	* gdb.mi/user-selected-context-sync.exp: Likewise.
	* gdb.opt/inline-cmds.exp: Likewise.
	* gdb.python/py-framefilter-mi.exp: Likewise.
	* gdb.python/py-mi.exp: Likewise.

Change-Id: I2e49ca7b0b61cea57c1202e5dfa32417e6a4403d
2020-10-13 22:28:03 +01:00
Pedro Alves
50441f0f8c 'runto main' -> 'runto_main' throughout
This commit does 's/runto main/runto_main/g' throughout.

gdb/testsuite/ChangeLog:

	* gdb.ada/fun_in_declare.exp: Use "runto_main" instead of
	"runto main".
	* gdb.ada/small_reg_param.exp: Likewise.
	* gdb.arch/powerpc-d128-regs.exp: Likewise.
	* gdb.base/annota1.exp: Likewise.
	* gdb.base/anon.exp: Likewise.
	* gdb.base/breakpoint-in-ro-region.exp: Likewise.
	* gdb.base/dprintf-non-stop.exp: Likewise.
	* gdb.base/dprintf.exp: Likewise.
	* gdb.base/gdb11530.exp: Likewise.
	* gdb.base/gdb11531.exp: Likewise.
	* gdb.base/gnu_vector.exp: Likewise.
	* gdb.base/interrupt-noterm.exp: Likewise.
	* gdb.base/memattr.exp: Likewise.
	* gdb.base/step-over-syscall.exp: Likewise.
	* gdb.base/watch-cond-infcall.exp: Likewise.
	* gdb.base/watch-read.exp: Likewise.
	* gdb.base/watch-vfork.exp: Likewise.
	* gdb.base/watch_thread_num.exp: Likewise.
	* gdb.base/watchpoint-stops-at-right-insn.exp: Likewise.
	* gdb.guile/scm-frame-inline.exp: Likewise.
	* gdb.linespec/explicit.exp: Likewise.
	* gdb.opt/inline-break.exp: Likewise.
	* gdb.python/py-frame-inline.exp: Likewise.
	* gdb.reverse/break-precsave.exp: Likewise.
	* gdb.reverse/break-reverse.exp: Likewise.
	* gdb.reverse/consecutive-precsave.exp: Likewise.
	* gdb.reverse/consecutive-reverse.exp: Likewise.
	* gdb.reverse/finish-precsave.exp: Likewise.
	* gdb.reverse/finish-reverse.exp: Likewise.
	* gdb.reverse/fstatat-reverse.exp: Likewise.
	* gdb.reverse/getresuid-reverse.exp: Likewise.
	* gdb.reverse/i386-precsave.exp: Likewise.
	* gdb.reverse/i386-reverse.exp: Likewise.
	* gdb.reverse/i386-sse-reverse.exp: Likewise.
	* gdb.reverse/i387-env-reverse.exp: Likewise.
	* gdb.reverse/i387-stack-reverse.exp: Likewise.
	* gdb.reverse/insn-reverse.exp: Likewise.
	* gdb.reverse/machinestate-precsave.exp: Likewise.
	* gdb.reverse/machinestate.exp: Likewise.
	* gdb.reverse/pipe-reverse.exp: Likewise.
	* gdb.reverse/readv-reverse.exp: Likewise.
	* gdb.reverse/recvmsg-reverse.exp: Likewise.
	* gdb.reverse/rerun-prec.exp: Likewise.
	* gdb.reverse/s390-mvcle.exp: Likewise.
	* gdb.reverse/solib-precsave.exp: Likewise.
	* gdb.reverse/solib-reverse.exp: Likewise.
	* gdb.reverse/step-precsave.exp: Likewise.
	* gdb.reverse/step-reverse.exp: Likewise.
	* gdb.reverse/time-reverse.exp: Likewise.
	* gdb.reverse/until-precsave.exp: Likewise.
	* gdb.reverse/until-reverse.exp: Likewise.
	* gdb.reverse/waitpid-reverse.exp: Likewise.
	* gdb.reverse/watch-precsave.exp: Likewise.
	* gdb.reverse/watch-reverse.exp: Likewise.
	* gdb.threads/kill.exp: Likewise.
	* gdb.threads/tid-reuse.exp: Likewise.

Change-Id: I70f457253836019880b4d7fb981936afa56724c2
2020-10-13 22:27:43 +01:00
Simon Marchi
d3a071228e gdb: don't pass TARGET_WNOHANG to targets that can't async (PR 26642)
Debugging with "maintenance set target-async off" on Linux has been
broken since 5b6d1e4fa4 ("Multi-target support").

The issue is easy to reproduce:

    $ ./gdb -q --data-directory=data-directory -nx ./test
    Reading symbols from ./test...
    (gdb) maintenance set target-async off
    (gdb) start
    Temporary breakpoint 1 at 0x1151: file test.c, line 5.
    Starting program: /home/simark/build/binutils-gdb/gdb/test

... and it hangs there.

The difference between pre-5b6d1e4fa4f and 5b6d1e4fa4 is that
fetch_inferior_event now calls target_wait with TARGET_WNOHANG for
non-async-capable targets, whereas it didn't before.

For non-async-capable targets, this is how it's expected to work when
resuming execution:

1. we call resume
2. the infrun async handler is marked in prepare_to_wait, to immediately
   wake up the event loop when we get back to it
3. fetch_inferior_event calls the target's wait method without
   TARGET_WNOHANG, effectively blocking until the target has something
   to report

However, since we call the target's wait method with TARGET_WNOHANG,
this happens:

1. we call resume
2. the infrun async handler is marked in prepare_to_wait, to immediately
   wake up the event loop when we get back to it
3. fetch_inferior_event calls the target's wait method with
   TARGET_WNOHANG, the target has nothing to report yet
4. we go back to blocking on the event loop
5. SIGCHLD finally arrives, but the event loop is not woken up, because
   we are not in async mode.  Normally, we should have been stuck in
   waitpid the SIGCHLD would have unblocked us.

We end up in this situation because these two necessary conditions are
met:

1. GDB uses the TARGET_WNOHANG option with a target that can't do async.
   I don't think this makes sense.  I mean, it's technically possible,
   the doc for TARGET_WNOHANG is:

  /* Return immediately if there's no event already queued.  If this
     options is not requested, target_wait blocks waiting for an
     event.  */
  TARGET_WNOHANG = 1,

   ... which isn't in itself necessarily incompatible with synchronous
   targets.  It could be possible for a target to support non-blocking
   polls, while not having a way to asynchronously wake up the event
   loop, which is also necessary to support async.  But as of today,
   we don't expect GDB and sync targets to work this way.

2. The linux-nat target, even in the mode where it emulates a
   synchronous target (with "maintenance set target-async off") respects
   TARGET_WNOHANG.  Other non-async targets, such as windows_nat_target,
   simply don't check / support TARGET_WNOHANG, so their wait method is
   always blocking.

Fix the first issue by avoiding using TARGET_WNOHANG on non-async
targets, in do_target_wait_1.  Add an assert in target_wait to verify it
doesn't happen.

The new test gdb.base/maint-target-async-off.exp is a simple test that
just tries running to main and then to the end of the program, with
"maintenance set target-async off".

gdb/ChangeLog:

	PR gdb/26642
	* infrun.c (do_target_wait_1): Clear TARGET_WNOHANG if the
	target can't do async.
	* target.c (target_wait): Assert that we don't pass
	TARGET_WNOHANG to a target that can't async.

gdb/testsuite/ChangeLog:

	PR gdb/26642
	* gdb.base/maint-target-async-off.c: New test.
	* gdb.base/maint-target-async-off.exp: New test.

Change-Id: I69ad3a14598863d21338a8c4e78700a58ce7ad86
2020-10-13 12:01:19 -04:00
Kamil Rytarowski
b07993f695 Remove unneeded netbsd_add_process()
Currently it does not add any value.

The netbsd_tdesc local variable is no longer needed. Remove it.
The tdesc value is set by the low target now.

gdbserver/ChangeLog:

        * netbsd-low.cc (netbsd_tdesc): Remove.
        (netbsd_add_process): Likewise.
        (netbsd_process_target::create_inferior): Update.
2020-10-13 16:28:29 +02:00
H.J. Lu
6c0005b8f4 gold: Skip some incremental tests
Skip incremental_test_2, incremental_test_3, incremental_test_4,
incremental_test_5, incremental_copy_test, incremental_common_test_1
and incremental_comdat_test_1 when -fcf-protection is used to compile
gold since gold doesn't properly support -fcf-protection on Intel CET
enabled OS.

Also skip incremental_copy_test and incremental_comdat_test_1 for GCC 9
or later since they failed with GCC 9 or later.

	PR gold/23539
	* configure.ac: Check for GCC 9 or later and for -fcf-protection.
	* configure: Regenerated.
	* testsuite/Makefile.am (check_PROGRAMS): Skip incremental_test_2,
	incremental_test_3, incremental_test_4, incremental_test_5,
	incremental_copy_test, incremental_common_test_1 and
	incremental_comdat_test_1 for -fcf-protection.  Also Skip
	incremental_copy_test and incremental_comdat_test_1 for GCC 9 or
	later.
	* testsuite/Makefile.in: Regenerated.
2020-10-13 05:23:13 -07:00
H.J. Lu
29700bfff4 gold: Discard .note.gnu.property section
Discard .note.gnu.property section since it changes the expected section
order.

	PR gold/23503
	* testsuite/Makefile.am (justsyms_lib): Pass
	-T $(srcdir)/justsyms_lib.t to gold.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/justsyms_lib.t: New file.
	* testsuite/script_test_10.t: Discard .note.gnu.property section.
2020-10-13 05:22:08 -07:00
H.J. Lu
586e30940e gold: Update GNU_PROPERTY_X86_XXX macros
This patch updates GNU_PROPERTY_X86_XXX macros for gold:

1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in all relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_AND_LO      0xc0000002
 #define GNU_PROPERTY_X86_UINT32_AND_HI      0xc0007fff

2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_OR_LO    0xc0008000
 #define GNU_PROPERTY_X86_UINT32_OR_HI    0xc000ffff

3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs and the property is
present in all relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_OR_AND_LO   0xc0010000
 #define GNU_PROPERTY_X86_UINT32_OR_AND_HI   0xc0017fff

4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED
and GNU_PROPERTY_X86_FEATURE_2_XXX bits.

GNU_PROPERTY_X86_FEATURE_1_AND is unchanged.  GNU_PROPERTY_X86_ISA_1_USED
and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted
processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful.
A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined.  The previous
GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to
GNU_PROPERTY_X86_COMPAT_ISA_1_XXX and GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX.

elfcpp/

	* elfcpp.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ...
	(GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ...
	(GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This.
	(GNU_PROPERTY_X86_UINT32_AND_LO): New.
	(GNU_PROPERTY_X86_UINT32_AND_HI): Likewise.
	(GNU_PROPERTY_X86_UINT32_OR_LO): Likewise.
	(GNU_PROPERTY_X86_UINT32_OR_HI): Likewise.
	(GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise.
	(GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise.
	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): New.
	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): Likewise.
	(GNU_PROPERTY_X86_FEATURE_1_AND): Updated to
	(GNU_PROPERTY_X86_UINT32_AND_LO + 0).
	(GNU_PROPERTY_X86_ISA_1_NEEDED): New.  Defined to
	GNU_PROPERTY_X86_UINT32_OR_LO + 2.
	(GNU_PROPERTY_X86_FEATURE_2_NEEDED): New.  Defined to
	(GNU_PROPERTY_X86_UINT32_OR_LO + 1).
	(GNU_PROPERTY_X86_ISA_1_USED): New.  Defined to
	GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2.
	(GNU_PROPERTY_X86_FEATURE_2_USED): New.  Defined to
	(GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1).

gold/

	* x86_64.cc (Target_x86_64::Target_x86_64): Initialize
	feature_2_used_, feature_2_needed_ and object_feature_2_used_.
	(Target_x86_64::feature_2_used_): New data member.
	(Target_x86_64::feature_2_needed_): Likewise.
	(Target_x86_64::object_isa_1_used_): Likewise.
	(Target_x86_64::record_gnu_property): Support
	GNU_PROPERTY_X86_COMPAT_ISA_1_USED,
	GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED,
	GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED,
	GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED,
	GNU_PROPERTY_X86_FEATURE_2_USED and
	GNU_PROPERTY_X86_FEATURE_2_NEEDED.
	(Target_x86_64::merge_gnu_properties): Merge FEATURE_2_USED bits.
	Initialize object_feature_2_used_.
	(Target_x86_64::do_finalize_gnu_properties): Support
	GNU_PROPERTY_X86_FEATURE_2_USED and
	GNU_PROPERTY_X86_FEATURE_2_NEEDED.
	* testsuite/gnu_property_a.S (GNU_PROPERTY_X86_ISA_1_USED): Set
	to 0xc0010002.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
	* testsuite/gnu_property_b.S (GNU_PROPERTY_X86_ISA_1_USED): Set
	to 0xc0010002.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
	* testsuite/gnu_property_c.S (GNU_PROPERTY_X86_ISA_1_USED): Set
	to 0xc0010002.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
	* testsuite/gnu_property_test.sh: Updated.
2020-10-13 05:21:05 -07:00
H.J. Lu
6bf4a34047 gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
The NT_GNU_PROPERTY_TYPE_0 note should be aligned to 8 bytes for 64-bit
ELF as specified by gABI.  A note section can be only placed in a PT_NOTE
segment with the same alignment.

	PR gold/22914
	PR gold/23535
	* layout.cc (Layout::attach_allocated_section_to_segment): Place
	a note section in a PT_NOTE segment with the same alignment.  Set
	the alignment of the PT_NOTE segment from the alignment of the
	note section.
	(Layout::create_note): Align the NT_GNU_PROPERTY_TYPE_0 note to 8
	bytes for 64-bit ELF.
	(Layout::segment_precedes): Place segments with larger alignments
	first.
	* output.cc (Output_segment::Output_segment): Initialize align_.
	* output.h (Output_segment): Add align, set_align and align_.
	* testsuite/Makefile.am (gnu_property_test.stdout): Pass -lhSWn
	to $(TEST_READELF).
	(gnu_property_test): Pass --build-id to ld.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/gnu_property_test.sh (check_alignment): New.
	Use check_alignment to check the NT_GNU_PROPERTY_TYPE_0 note
	alignment.  Verify that there are 2 PT_NOTE segments.
2020-10-13 05:18:24 -07:00
H.J. Lu
aac1d94f19 Gold: Enable safe ICF for shared object on x86-64
With

commit 4aebb6312e
Author: Rahul Chaudhry <rahulchaudhry@google.com>
Date:   Wed Feb 15 00:37:10 2017 -0800

    Improved support for --icf=safe when used with -pie.

we now check opcode with R_X86_64_PC32 relocation, which tell branches
from other instructions.  We can enable safe ICF for shared object on
x86-64.  Also, global symbols with non-default visibility should be
folded like local symbols.

	PR gold/21452
	* x86_64.cc (Scan::local_reloc_may_be_function_pointer): Remove
	check for shared library.
	(Scan::global_reloc_may_be_function_pointer): Remove check for
	shared library and symbol visibility.
	* testsuite/icf_safe_so_test.cc (bar_static): New function.
	(main): Take function address of bar_static and use it.
	* testsuite/icf_safe_so_test.sh (arch_specific_safe_fold): Also
	check fold on x86-64.  Check bar_static isn't folded.
2020-10-13 05:10:36 -07:00
H.J. Lu
1fb1d64f4a Gold: Skip zero-sized sections for ICF
Skip zero-sized sections since there is no need to do ICF on them.

	* icf.cc (Icf::find_identical_sections): Skip zero-sized sections.
2020-10-13 05:08:39 -07:00
Kamil Rytarowski
1b71cfcfdc Normalize names of the NetBSD files
The files used to be named 'nbsd', which incorrectly reflects
the name of the OS and confuses it with other BSD derived OSes.

gdb/ChangeLog:

        * Makefile.in (ALL_64_TARGET_OBS, ALL_TARGET_OBS)
        HFILES_NO_SRCDIR, ALLDEPFILES): Rename files.
        * alpha-bsd-nat.c: Adjust include.
        * alpha-bsd-tdep.h: Adjust comment.
        * alpha-nbsd-tdep.c: Rename to ...
        * alpha-netbsd-tdep.c: ... this, adjust include.
        * amd64-nbsd-nat.c: Rename to ...
        * amd64-netbsd-nat.c: ... this, adjust include.
        * amd64-nbsd-tdep.c: Rename to ...
        * amd64-netbsd-tdep.c: ... this, adjust include.
        * amd64-tdep.h: Adjust include.
        * arm-nbsd-nat.c: Rename to ...
        * arm-netbsd-nat.c: ... this, adjust include.
        * arm-nbsd-tdep.c: Rename to ...
        * arm-netbsd-tdep.c: ... this, adjust include.
        * arm-nbsd-tdep.h: Rename to ...
        * arm-netbsd-tdep.h: ... this, adjust include.
        * configure.nat: Adjust file lists.
        * configure.tgt: Likewise.
        * hppa-nbsd-nat.c: Rename to ...
        * hppa-netbsd-nat.c: ... this, adjust include.
        * hppa-nbsd-tdep.c: Rename to ...
        * hppa-netbsd-tdep.c: ... this, adjust include.
        * i386-nbsd-nat.c: Rename to ...
        * i386-netbsd-nat.c: ... this, adjust include.
        * i386-nbsd-tdep.c: Rename to ...
        * i386-netbsd-tdep.c: ... this, adjust include.
        * m68k-bsd-nat.c: Adjust include.
        * mips-nbsd-nat.c: Rename to ...
        * mips-netbsd-nat.c: ... this, adjust include.
        * mips-nbsd-tdep.c: Rename to ...
        * mips-netbsd-tdep.c: ... this, adjust include.
        * mips-nbsd-tdep.h: Rename to ...
        * mips-netbsd-tdep.h: ... this.
        * nbsd-nat.c: Rename to ...
        * netbsd-nat.c: ... this, adjust include.
        * nbsd-nat.h: Rename to ...
        * netbsd-nat.h: ... this, adjust include.
        * nbsd-tdep.c: Rename to ...
        * netbsd-tdep.c: ... this, adjust include.
        * nbsd-tdep.h: Rename to ...
        * netbsd-tdep.h: ... this.
        * ppc-nbsd-nat.c: Rename to ...
        * ppc-netbsd-nat.c: ... this, adjust include.
        * ppc-nbsd-tdep.c: Rename to ...
        * ppc-netbsd-tdep.c: ... this, adjust include and comment.
        * ppc-nbsd-tdep.h: Rename to ...
        * ppc-netbsd-tdep.h: ... this.
        * sh-nbsd-nat.c: Rename to ...
        * sh-netbsd-nat.c: ... this, adjust include.
        * sh-nbsd-tdep.c: Rename to ...
        * sh-netbsd-tdep.c: ... this, adjust include.
        * sparc-nbsd-nat.c: Rename to ...
        * sparc-netbsd-nat.c: ... this.
        * sparc-nbsd-tdep.c: Rename to ...
        * sparc-netbsd-tdep.c: ... this, adjust include.
        * sparc64-nbsd-nat.c: Rename to ...
        * sparc64-netbsd-nat.c: ... this.
        * sparc64-nbsd-tdep.c: Rename to ...
        * sparc64-netbsd-tdep.c: ... this, adjust include.
        * sparc64-tdep.h: Adjust comment.
        * vax-bsd-nat.c: Adjust include.
        * vax-nbsd-tdep.c: Rename to ...
        * vax-netbsd-tdep.c: ... this, adjust include.
2020-10-13 13:33:35 +02:00
Tom Tromey
d7a78e5c41 Change target_section_table to std::vector alias
Because target_section_table only holds a vector, and because it is
used in an "open" way, this patch makes it just be an alias for the
std::vector specialization.  This makes the code less wordy.  If we do
ever want to add more specialized behavior to this type, it's simple
enough to convert it back to a struct with the few needed methods
implied by this change.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* target.h (struct target_ops) <get_section_table>: Update.
	(target_get_section_table): Update.
	* target.c (target_get_section_table, target_section_by_addr)
	(memory_xfer_partial_1): Update.
	* target-section.h (target_section_table): Now an alias.
	* target-delegates.c: Rebuild.
	* target-debug.h (target_debug_print_target_section_table_p):
	Rename from target_debug_print_struct_target_section_table_p.
	* symfile.c (build_section_addr_info_from_section_table): Update.
	* solib.c (solib_map_sections, solib_contains_address_p): Update.
	* solib-svr4.c (scan_dyntag): Update.
	* solib-dsbt.c (scan_dyntag): Update.
	* remote.c (remote_target::remote_xfer_live_readonly_partial):
	Update.
	* record-full.c (record_full_core_target::xfer_partial): Update.
	* progspace.h (struct program_space) <target_sections>: Update.
	* exec.h (print_section_info): Update.
	* exec.c (exec_target::close, build_section_table)
	(add_target_sections, add_target_sections_of_objfile)
	(remove_target_sections, exec_on_vfork)
	(section_table_available_memory)
	(section_table_xfer_memory_partial)
	(exec_target::get_section_table, exec_target::xfer_partial)
	(print_section_info, set_section_command)
	(exec_set_section_address, exec_target::has_memory): Update.
	* corelow.c (core_target::build_file_mappings)
	(core_target::xfer_partial, core_target::info_proc_mappings)
	(core_target::info_proc_mappings): Update.
	* bfd-target.c (class target_bfd): Update
2020-10-12 20:18:48 -06:00
Tom Tromey
eda214cec1 Remove clear_section_table
The call to clear_section_table in ~program_space is now clearly not
needed -- the section table will clear itself.  This patch removes
this call and then inlines the one remaining call to
clear_section_table.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* progspace.c (program_space::~program_space): Don't call
	clear_section_table.
	* exec.h (clear_section_table): Don't declare.
	* exec.c (exec_target::close): Update.
	(clear_section_table): Remove.
2020-10-12 20:18:48 -06:00
Tom Tromey
91840ee38a Simplify add_target_sections_of_objfile
Now that target_section_table uses std::vector,
add_target_sections_of_objfile does not need to loop twice.  This
patch simplifies this code to have just a single loop.  Also, the
passed-in objfile can never be NULL, so this changes this function to
assert that.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* exec.c (add_target_sections_of_objfile): Simplify.
2020-10-12 20:18:47 -06:00
Tom Tromey
2d128614d4 build_section_table cannot fail
I noticed that build_section_table cannot fail.  This patch changes it
to return a target_section_table and then removes the dead code.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* solib.c (solib_map_sections): Update.
	* record-full.c (record_full_core_open_1): Update.
	* exec.h (build_section_table): Return a target_section_table.
	* exec.c (exec_file_attach): Update.
	(build_section_table): Return a target_section_table.
	* corelow.c (core_target::core_target): Update.
	* bfd-target.c (target_bfd::target_bfd): Update.
2020-10-12 20:18:47 -06:00
Tom Tromey
bb2a67773c Use a std::vector in target_section_table
This changes target_section_table to wrap a std::vector.  This
simplifies some code, and also enables the simplifications coming in
the subsequent patches.

Note that for solib, I chose to have it use a pointer to a
target_section_table.  This is more convoluted than would be ideal,
but I didn't want to convert solib to new/delete as a prerequisite for
this series.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* target.c (target_section_by_addr, memory_xfer_partial_1):
	Update.
	* target-section.h (struct target_section_table): Use
	std::vector.
	* symfile.h (build_section_addr_info_from_section_table): Take a
	target_section_table.
	* symfile.c (build_section_addr_info_from_section_table): Take a
	target_section_table.
	* solist.h (struct so_list) <sections>: Change type.
	<sections_end>: Remove.
	* solib.c (solib_map_sections, clear_so, solib_read_symbols)
	(solib_contains_address_p): Update.
	* solib-svr4.c (scan_dyntag): Update.
	* solib-dsbt.c (scan_dyntag): Update.
	* remote.c (remote_target::remote_xfer_live_readonly_partial):
	Update.
	* record-full.c (record_full_core_start, record_full_core_end):
	Remove.
	(record_full_core_sections): New global.
	(record_full_core_open_1, record_full_core_target::xfer_partial):
	Update.
	* exec.h (build_section_table, section_table_xfer_memory_partial)
	(add_target_sections): Take a target_section_table.
	* exec.c (exec_file_attach, clear_section_table): Update.
	(resize_section_table): Remove.
	(build_section_table, add_target_sections): Take a
	target_section_table.
	(add_target_sections_of_objfile, remove_target_sections)
	(exec_on_vfork): Update.
	(section_table_available_memory): Take a target_section_table.
	(section_table_read_available_memory): Update.
	(section_table_xfer_memory_partial): Take a target_section_table.
	(print_section_info, set_section_command)
	(exec_set_section_address, exec_target::has_memory): Update.
	* corelow.c (class core_target) <m_core_section_table,
	m_core_file_mappings>: Remove braces.
	<~core_target>: Remove.
	(core_target::core_target): Update.
	(core_target::~core_target): Remove.
	(core_target::build_file_mappings)
	(core_target::xfer_memory_via_mappings)
	(core_target::xfer_partial, core_target::info_proc_mappings):
	Update.
	* bfd-target.c (target_bfd::xfer_partial): Update.
	(target_bfd::target_bfd): Update.
	(target_bfd::~target_bfd): Remove.
2020-10-12 20:18:47 -06:00
Tom Tromey
7b466b1024 Introduce target-section.h
This introduces a new target-section.h file.  This makes some of the
later patches in this series a bit cleaner, because new includes of
target.h won't be required.  Also I think it's better to have small
header files for each separate data structure.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

	* target.h (struct target_section, struct target_section_table):
	Move to target-section.h.
	* target-section.h: New file.
2020-10-12 20:18:47 -06:00
GDB Administrator
af1b7b5159 Automatic date update in version.in 2020-10-13 00:00:07 +00:00
Alan Modra
c65c6c4223 PowerPC testsuite fails and duplicates
binutils commit 5fbec329ec changed disassembly of mfvsrd and mtvsrd
to be consistent with the mfvsrwz and mtvsrw/mtvsrwz, which favour
output of the fp/vr extended mnemonic and regs over the vsx form.
This patch fixes the following, and removes some duplicates.

FAIL: gdb.arch/powerpc-power8.exp: found: mfvsrd  r12,vs62
FAIL: gdb.arch/powerpc-power8.exp: found: mtvsrd  vs48,r11
FAIL: gdb.arch/powerpc-vsx2.exp: found: mfvsrd  r12,vs30
FAIL: gdb.arch/powerpc-vsx2.exp: found: mfvsrd  r12,vs30
FAIL: gdb.arch/powerpc-vsx2.exp: found: mfvsrd  r12,vs62
FAIL: gdb.arch/powerpc-vsx2.exp: found: mfvsrd  r12,vs62
FAIL: gdb.arch/powerpc-vsx2.exp: found: mtvsrd  vs11,r28
FAIL: gdb.arch/powerpc-vsx2.exp: found: mtvsrd  vs11,r28
FAIL: gdb.arch/powerpc-vsx2.exp: found: mtvsrd  vs43,r29
FAIL: gdb.arch/powerpc-vsx2.exp: found: mtvsrd  vs43,r29

	* gdb.arch/powerpc-altivec.s,
	* gdb.arch/powerpc-power7.s,
	* gdb.arch/powerpc-power8.s,
	* gdb.arch/powerpc-power9.s,
	* gdb.arch/powerpc-vsx.s,
	* gdb.arch/powerpc-vsx2.s: Remove duplicate instructions.
	* gdb.arch/powerpc-altivec.exp,
	* gdb.arch/powerpc-power7.exp,
	* gdb.arch/powerpc-power8.exp,
	* gdb.arch/powerpc-power9.exp,
	* gdb.arch/powerpc-vsx.exp,
	* gdb.arch/powerpc-vsx2.exp: Likewise, and update expected
	disassembly of mfvsrd/mtvsrd.
2020-10-13 08:17:12 +10:30
Alan Modra
f4a0f710ae Re: gdb: Improve formatting of 'show architecture' messages
Commit ccb9eba6a2 updated the testsuite for some targets without
running the testsuite on those targets.  This patch corrects the
update, in most cases just adding the expected full-stop.

On powerpc64le-linux, fixes these:
FAIL: gdb.arch/powerpc-d128-regs.exp: checking for PPC arch
FAIL: gdb.arch/powerpc-disassembler-options.exp: set architecture powerpc:common64
FAIL: gdb.arch/powerpc-disassembler-options.exp: set architecture rs6000:6000
FAIL: gdb.arch/ppc64-symtab-cordic.exp: show architecture

I also verified that arm-linuxeabi and s390x-linux cross-builds now
pass their disassembler-options.exp tests.

	* gdb.arch/arm-disassembler-options.exp: Adjust expected
	"target architecture" output.
	* gdb.arch/powerpc-d128-regs.exp: Likewise.
	* gdb.arch/powerpc-disassembler-options.exp: Likewise.
	* gdb.arch/ppc64-symtab-cordic.exp: Likewise.
	* gdb.arch/s390-disassembler-options.exp: Likewise.
2020-10-13 08:15:32 +10:30
Pedro Alves
87a37e5e07 Reject ambiguous C++ field accesses (PR exp/26602)
The gdb.cp/ambiguous.exp testcase had been disabled for many years,
but recently it was re-enabled.  However, it is failing everywhere.
That is because it is testing an old feature that is gone from GDB.

The testcase is expecting to see an ambiguous field warning, like:

 # X is derived from A1 and A2; both A1 and A2 have a member 'x'
 send_gdb "print x.x\n"
 gdb_expect {
    -re "warning: x ambiguous; using X::A2::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" {
	pass "print x.x"
    }
    -re "warning: x ambiguous; using X::A1::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" {
	pass "print x.x"
    }
    -re ".*$gdb_prompt $" { fail "print x.x" }
    timeout { fail "(timeout) print x.x" }
  }

However, GDB just accesses one of the candidates without warning or
error:

 print x.x
 $1 = 1431655296
 (gdb) FAIL: gdb.cp/ambiguous.exp: print x.x

(The weird number is because the testcase does not initialize the
variables.)

The testcase come in originally with the big HP merge:

 +Sun Jan 10 23:44:11 1999  David Taylor  <taylor@texas.cygnus.com>
 +
 +
 +       The following files are part of the HP merge; some had longer
 +       names at HP, but have been renamed to be no more than 14
 +       characters in length.

Looking at the tree back then, we find that warning:

 /* Helper function used by value_struct_elt to recurse through baseclasses.
    Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
    and search in it assuming it has (class) type TYPE.
    If found, return value, else return NULL.

    If LOOKING_FOR_BASECLASS, then instead of looking for struct fields,
    look for a baseclass named NAME.  */

 static value_ptr
 search_struct_field (name, arg1, offset, type, looking_for_baseclass)
      char *name;
      register value_ptr arg1;
      int offset;
      register struct type *type;
      int looking_for_baseclass;
 {
   int found = 0;
   char found_class[1024];
   value_ptr v;
   struct type *vbase = NULL;

   found_class[0] = '\000';

   v = search_struct_field_aux (name, arg1, offset, type, looking_for_baseclass, &found, found_class, &vbase);
   if (found > 1)
     warning ("%s ambiguous; using %s::%s. Use a cast to disambiguate.",
              name, found_class, name);

   return v;
 }


However, in current GDB, search_struct_field does not handle the
ambiguous field case, nor is that warning found anywhere.  Somehow it
got lost over the years.  That seems like a regression, because the
compiler (as per language rules) rejects the ambiguous accesses as
well.  E.g.:

 gdb.cp/ambiguous.cc:98:5: error: request for member 'x' is ambiguous
    98 |   x.x = 1;
       |     ^
 gdb.cp/ambiguous.cc:10:7: note: candidates are: 'int A2::x'
    10 |   int x;
       |       ^
 gdb.cp/ambiguous.cc:4:7: note:                 'int A1::x'
     4 |   int x;
       |       ^


This patch restores the feature, though implemented differently and
with better user experience, IMHO.  An ambiguous access is now an
error instead of a warning, and also GDB shows you all the candidates,
like:

 (gdb) print x.x
 Request for member 'x' is ambiguous in type 'X'. Candidates are:
   'int A1::x' (X -> A1)
   'int A2::x' (X -> A2)
 (gdb) print j.x
 Request for member 'x' is ambiguous in type 'J'. Candidates are:
   'int A1::x' (J -> K -> A1)
   'int A1::x' (J -> L -> A1)

Users can then fix their commands by casting or by specifying the
baseclass explicitly, like:

 (gdb) p x.A1::x
 $1 = 1
 (gdb) p x.A2::x
 $2 = 2
 (gdb) p ((A1) x).x
 $3 = 1
 (gdb) p ((A2) x).x
 $4 = 2
 (gdb) p j.K::x
 $12 = 1
 (gdb) p j.L::x
 $13 = 2
 (gdb) p j.A1::x
 base class 'A1' is ambiguous in type 'J'

The last error I've not touched; could be improved to also list the
baseclass candidates.

The showing the class "path" for each candidate was inspired by GCC's
output when you try an ambiguous cast:

  gdb.cp/ambiguous.cc:161:8: error: ambiguous conversion from derived class 'const JVA1' to base class 'const A1':
      class JVA1 -> class KV -> class A1
      class JVA1 -> class A1
    (A1) jva1;
	 ^~~~

I did not include the "class" word as it seemed unnecessarily
repetitive, but I can include it if people prefer it:

 (gdb) print j.x
 Request for member 'x' is ambiguous in type 'J'. Candidates are:
   'int A1::x' (class J -> class K -> class A1)
   'int A1::x' (class J -> class L -> class A1)

The testcase is adjusted accordingly.  I also took the chance to
modernize it at the same time.

Also, as mentioned above, the testcase doesn't currently initialize
the tested variables.  This patch inializes them all, giving each
field a distinct value, so that we can be sure that GDB is accessing
the right fields / offsets.  The testcase is extended accordingly.

Unfortunately, this exposes a bug, not addressed in this patch.  The
bug is around a class that inherits from A1 directly and also inherits
from two other distinct base classes that inherit virtually from A1 in
turn:

 print jva1.KV::x
 $51 = 1431665544
 (gdb) FAIL: gdb.cp/ambiguous.exp: all fields: print jva1.KV::x
 print jva1.KV::y
 $52 = 21845
 (gdb) FAIL: gdb.cp/ambiguous.exp: all fields: print jva1.KV::y

 (gdb) print /x (KV)jva1
 $4 = {<A1> = <invalid address>, _vptr.KV = 0x555555557b88 <vtable for JVA1+24>, i = 0x457}
 (gdb) print /x (A1)(KV)jva1
 Cannot access memory at address 0x0

Since that's an orthogonal issue, I filed PR c++/26550 and kfailed the
tests that fail because of it.

gdb/ChangeLog:

	PR exp/26602
	* valops.c (struct struct_field_searcher): New.
	(update_search_result): Rename to ...
	(struct_field_searcher::update_result): ... this.  Simplify
	prototype.  Record all found fields.
	(do_search_struct_field): Rename to ...
	(struct_field_searcher::search): ... this.  Simplify prototype.
	Maintain stack of visited baseclass path.  Call update_result for
	fields too.  Keep searching fields in baseclasses instead of
	stopping at the first found field.
	(search_struct_field): Use struct_field_searcher.  When looking
	for fields, report ambiguous access attempts.

gdb/testsuite/ChangeLog:

	PR exp/26602
	PR c++/26550
	* gdb.cp/ambiguous.cc (marker1): Delete.
	(main): Initialize all the fields of the locals.  Replace marker1
	call with a "set breakpoint here" marker.
	* gdb.cp/ambiguous.exp: Modernize.  Use gdb_continue_to_breakpoint
	instead of running to marker1.  Add tests printing all the
	variables and all the fields of the variables.
	(test_ambiguous): New proc, expecting the new GDB output when a
	field access is ambiguous.  Change all "warning: X ambiguous"
	tests to use it.
2020-10-12 18:06:09 +01:00
Gary Benson
71e1b6b0ac Fix testcases with required but unreferenced functions and variables
A number of testcases define variables and/or functions which are
referenced by GDB during the test, but which are not referenced from
within the test executable.  Clang correctly recognizes that these
variables and functions are unused, and optimizes them out, causing
the testcases in question to fail.  This commit adds __attribute__
((used)) in various places to prevent this.

gdb/testsuite/ChangeLog:

	* gdb.base/msym-bp.c (foo): Add __attribute__ ((used)).
	* gdb.base/msym-bp-2.c (foo): Likewise.
	* gdb.base/msym-lang.c (foo): Likewise.
	* gdb.base/msym-lang-main.c (foo): Likewise.
	* gdb.base/symtab-search-order-1.c (static_global): Likewise.
	* gdb.guile/scm-pretty-print.c (eval_func): Likewise.
	* gdb.mi/mi-sym-info-1.c (global_f1): Likewise.
	* gdb.mi/mi-sym-info-2.c (global_f1, var1, var2): Likewise.
	* gdb.multi/watchpoint-multi-exit.c (globalvar): Likewise.
	* gdb.python/py-as-string.c (enum_valid, enum_invalid): Likewise.
	* gdb.python/py-objfile.c (static_var): Likewise.
	* gdb.python/py-symbol.c (rr): Likewise.
	* gdb.python/py-symbol-2.c (anon, rr): Likewise.
	* gdb.mi/mi-sym-info.exp (lineno1, lineno2): Updated.
2020-10-12 10:35:23 +01:00
GDB Administrator
8a6e98c4a3 Automatic date update in version.in 2020-10-12 00:00:07 +00:00
Andrew Burgess
9370fd51eb gdb: detect main function even when there's no matching msymbol
Currently, GDB will only stop the backtrace at the main function if
there is a minimal symbol with the matching name.  In Fortran programs
compiled with gfortran this is not the case.  The main function is
present in the DWARF, and as marked as DW_AT_main_subprogram, but
there's no minimal symbol.

This commit extends `inside_main_func` to check the full symbols if no
matching minimal symbol is found.

There's an updated test case that covers this change.

gdb/ChangeLog:

	* frame.c (inside_main_func): Check full symbols as well as
	minimal symbols.

gdb/testsuite/ChangeLog:

	* gdb.fortran/mixed-lang-stack.exp (run_tests): Update expected
	output of backtrace.
2020-10-11 18:35:39 +01:00
GDB Administrator
f7c1edaa78 Automatic date update in version.in 2020-10-11 00:00:07 +00:00
GDB Administrator
448ba6860e Automatic date update in version.in 2020-10-10 00:00:07 +00:00
Joel Brobecker
59c8a30b81 ada-lang.c::advance_wild_match improve doc and parameter+temporaries types
This commit fixes the type of one of the parameters as well as a couple
of temporaries.

While at it, the function's description is slightly rewritten to make it
a little clearer what the function does.

gdb/ChangeLog:

        * ada-lang.c (advance_wild_match): Rewrite the function's
        description.  Change the type of target0, t0 and t1 to char.
2020-10-09 13:31:07 -07:00
Tom Tromey
7c184d334a Fix bit offset regression
The type-safe attribute patch introduced a regression that can occur
when the DW_AT_bit_offset value is negative.  This can happen with
some Ada programs.

This patch fixes the problem.  It also fixes a minor oddity in the
existing scalar storage test -- this test was intended to assign a
smaller number of bits to the field.

2020-10-09  Tom Tromey  <tromey@adacore.com>

	* dwarf2/read.c (dwarf2_add_field): Handle signed offsets.

gdb/testsuite/ChangeLog
2020-10-09  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/scalar_storage/storage.adb (Another_Range): New type.
	(Rec): Add field.  Fix range.
	* gdb.ada/scalar_storage.exp: Update.
2020-10-09 11:18:52 -06:00
Tom Tromey
5c4258f4c0 Return std::string from ada_encode
This changes ada_encode to return a std::string.  This simplifies it
somewhat, removes a use of GROW_VECT, and is also simpler for callers
to use.

gdb/ChangeLog
2020-10-09  Tom Tromey  <tromey@adacore.com>

	* ada-lang.h (ada_encode): Return std::string.
	* ada-lang.c (ada_encode_1): Return std::string.
	(ada_encode): Likewise.
	(type_from_tag, ada_lookup_name_info::ada_lookup_name_info):
	Update.
	* ada-exp.y (block_lookup, write_var_or_type): Update.
2020-10-09 08:27:30 -06:00
Alan Modra
fa40fbe484 [GOLD] Power10 segv due to wild r2
Calling non-pcrel functions from pcrel code requires a stub to set up
r2.  Gold created the stub, but an "optimisation" made the stub jump
to the function local entry, ie. r2 was not initialised.

This patch fixes that long branch stub problem, and another that might
occur for plt call stubs to local functions.

bfd/
	* elf64-ppc.c (write_plt_relocs_for_local_syms): Don't do local
	entry offset optimisation.
gold/
	* powerpc.cc (Powerpc_relobj::do_relocate_sections): Don't do
	local entry offset optimisation for lplt_section.
	(Target_powerpc::Branch_info::make_stub): Don't add local
	entry offset to long branch dest passed to
	add_long_branch_entry.  Do pass st_other bits.
	(Stub_table::Branch_stub_ent): Add "other_" field.
	(Stub_table::add_long_branch_entry): Add "other" param, and
	save.
	(Stub_table::branch_stub_size): Adjust long branch offset.
	(Stub_table::do_write): Likewise.
	(Target_powerpc::Relocate::relocate): Likewise.
2020-10-09 23:24:17 +10:30
Alan Modra
4290b0ab2b [GOLD] internal error in relocate, at powerpc.cc:10473
GOT relocations can refer directly to a function in a fixed position
executable, unlike ADDR64 which needs a global entry stub, or branch
relocs, which need PLT stubs.

	* powerpc.cc (is_got_reloc): New function.
	(Target_powerpc::Relocate::relocate): Use it here, exclude GOT
	relocs when looking for stubs.
2020-10-09 23:23:27 +10:30
H.J. Lu
32930e4edb x86: Support GNU_PROPERTY_X86_ISA_1_V[234] marker
GCC 11 supports -march=x86-64-v[234] to enable x86 micro-architecture ISA
levels:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97250

Update GNU_PROPERTY_X86_ISA_1_XXX macros:

https://gitlab.com/x86-psABIs/x86-64-ABI/-/merge_requests/13

in x86 ELF binaries to indicate that micro-architecture ISA levels
required to execute the binary:

 #define GNU_PROPERTY_X86_ISA_1_NEEDED (GNU_PROPERTY_X86_UINT32_OR_LO + 2)
 #define GNU_PROPERTY_X86_ISA_1_USED (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2)
 #define GNU_PROPERTY_X86_ISA_1_V2 (1U << 0)
 #define GNU_PROPERTY_X86_ISA_1_V3 (1U << 1)
 #define GNU_PROPERTY_X86_ISA_1_V4 (1U << 2)

The previous GNU_PROPERTY_X86_ISA_1_XXX  macros are deprecated and renamed
to GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX.

In addition to EM_X86_64, GNU_PROPERTY_X86_ISA_1_V[234] marker can be used
by ld.so to detect the x86-64-v4 shared library placed in an x86-64-v2
directory by mistake on an x86-64-v2 machine to avoid crashes on x86-64-v4
instructions.

Add -z x86-64-v[234] linker command line option to mark x86-64-v[234]
ISA level as needed.

Also add

 #define GNU_PROPERTY_X86_FEATURE_2_MASK (1U << 11)

for mask registers.

bfd/

	PR gas/26703
	* elf-linker-x86.h (elf_linker_x86_params): Add isa_level.
	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Merge
	GNU_PROPERTY_X86_ISA_1_V[234].
	(_bfd_x86_elf_link_setup_gnu_properties): Generate
	GNU_PROPERTY_X86_ISA_1_V[234] for -z x86-64-v[234].

binutils/

	PR gas/26703
	* readelf.c (decode_x86_compat_2_isa): New function.
	(decode_x86_isa): Updated for new X86_ISA_1_XXX bits.
	(decode_x86_feature_1): Handle GNU_PROPERTY_X86_FEATURE_2_MASK.
	(print_gnu_property_note): Handle X86_COMPAT_2_ISA_1_USED,
	and X86_COMPAT_2_ISA_1_NEEDED.
	* testsuite/binutils-all/i386/pr21231b.s: Updated to the current
	GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED
	values.
	* testsuite/binutils-all/x86-64/pr21231b.s: Likewise.
	* testsuite/binutils-all/x86-64/pr23494a.s: Likewise.
	* testsuite/binutils-all/x86-64/pr23494b.s: Likewise.
	* testsuite/binutils-all/x86-64/pr23494c.s: Likewise.
	* testsuite/binutils-all/i386/empty.d: Updated.
	* testsuite/binutils-all/i386/ibt.d: Likewise.
	* testsuite/binutils-all/i386/pr21231a.d: Likewise.
	* testsuite/binutils-all/i386/pr21231b.d: Likewise.
	* testsuite/binutils-all/i386/shstk.d: Likewise.
	* testsuite/binutils-all/x86-64/empty-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/empty.d: Likewise.
	* testsuite/binutils-all/x86-64/ibt-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/ibt.d: Likewise.
	* testsuite/binutils-all/x86-64/pr21231a.d: Likewise.
	* testsuite/binutils-all/x86-64/pr21231b.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494a-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494a.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494c-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494c.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494d-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494d.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/pr23494e.d: Likewise.
	* testsuite/binutils-all/x86-64/shstk-x32.d: Likewise.
	* testsuite/binutils-all/x86-64/shstk.d: Likewise.

gas/

	PR gas/26703
	* config/tc-i386.c (xstate): Add xstate_mask.
	(md_assemble): Check i.types[j], instead of i.tm.operand_types[j],
	for xstate.  Set xstate_mask, instead of xstate_zmm, for RegMask.
	(output_insn): Update for GNU_PROPERTY_X86_ISA_1_V[234].  Update
	xstate for mask register and VSIB.
	* testsuite/gas/i386/i386.exp: Run more GNU_PROPERTY tests.
	* testsuite/gas/i386/property-1.s: Updated to the current
	GNU_PROPERTY_X86_ISA_1_USED value.
	* testsuite/gas/i386/property-2.s: Only keep cmove.
	* testsuite/gas/i386/property-3.s: Changed to addsubpd.
	* testsuite/gas/i386/property-1.d: Updated.
	* testsuite/gas/i386/property-2.d: Likewise.
	* testsuite/gas/i386/property-3.d: Likewise.
	* testsuite/gas/i386/property-4.d: Likewise.
	* testsuite/gas/i386/property-5.d: Likewise.
	* testsuite/gas/i386/property-6.d: Likewise.
	* testsuite/gas/i386/x86-64-property-1.d: Likewise.
	* testsuite/gas/i386/x86-64-property-2.d: Likewise.
	* testsuite/gas/i386/x86-64-property-3.d: Likewise.
	* testsuite/gas/i386/x86-64-property-4.d: Likewise.
	* testsuite/gas/i386/x86-64-property-5.d: Likewise.
	* testsuite/gas/i386/x86-64-property-6.d: Likewise.
	* testsuite/gas/i386/x86-64-property-7.d: Likewise.
	* testsuite/gas/i386/x86-64-property-8.d: Likewise.
	* testsuite/gas/i386/x86-64-property-9.d: Likewise.
	* testsuite/gas/i386/property-11.d: New file.
	* testsuite/gas/i386/property-11.s: Likewise.
	* testsuite/gas/i386/property-12.d: Likewise.
	* testsuite/gas/i386/property-12.s: Likewise.
	* testsuite/gas/i386/property-13.d: Likewise.
	* testsuite/gas/i386/property-13.s: Likewise.
	* testsuite/gas/i386/x86-64-property-11.d: Likewise.
	* testsuite/gas/i386/x86-64-property-12.d: Likewise.
	* testsuite/gas/i386/x86-64-property-13.d: Likewise.
	* testsuite/gas/i386/x86-64-property-14.d: Likewise.
	* testsuite/gas/i386/x86-64-property-14.s: Likewise.

include/

	PR gas/26703
	* elf/common.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ...
	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED): This.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ...
	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): This.
	(GNU_PROPERTY_X86_ISA_1_XXX): Renamed to ...
	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX): This.
	(GNU_PROPERTY_X86_ISA_1_NEEDED): New.
	(GNU_PROPERTY_X86_ISA_1_USED): Likewise.
	(GNU_PROPERTY_X86_ISA_1_V2): Likewise.
	(GNU_PROPERTY_X86_ISA_1_V3): Likewise.
	(GNU_PROPERTY_X86_ISA_1_V4): Likewise.
	(GNU_PROPERTY_X86_FEATURE_2_MASK): Likewise.

ld/

	PR gas/26703
	* NEWS: Mention -z x86-64-v[234].
	* ld.texi: Document -z x86-64-v[234].
	* emulparams/elf32_x86_64.sh: Use x86-64-level.sh.
	* emulparams/elf_i386.sh: Likewise.
	* emulparams/elf_x86_64.sh: Likewise.
	* emulparams/x86-64-level.sh: New file.
	* testsuite/ld-elf/x86-feature-1a.rd: Update.
	* testsuite/ld-elf/x86-feature-1b.rd: Likewise.
	* testsuite/ld-elf/x86-feature-1c.rd: Likewise.
	* testsuite/ld-elf/x86-feature-1d.rd: Likewise.
	* testsuite/ld-elf/x86-feature-1e.rd: Likewise.
	* testsuite/ld-i386/pr23372c.d: Likewise.
	* testsuite/ld-i386/pr23486c.d: Likewise.
	* testsuite/ld-i386/pr23486d.d: Likewise.
	* testsuite/ld-i386/pr24322a.d: Likewise.
	* testsuite/ld-i386/pr24322b.d: Likewise.
	* testsuite/ld-i386/property-1a.r: Likewise.
	* testsuite/ld-i386/property-2a.r: Likewise.
	* testsuite/ld-i386/property-3.r: Likewise.
	* testsuite/ld-i386/property-3a.r: Likewise.
	* testsuite/ld-i386/property-4.r: Likewise.
	* testsuite/ld-i386/property-4a.r: Likewise.
	* testsuite/ld-i386/property-5.r: Likewise.
	* testsuite/ld-i386/property-5a.r: Likewise.
	* testsuite/ld-i386/property-7a.r: Likewise.
	* testsuite/ld-i386/property-x86-3.d: Likewise.
	* testsuite/ld-i386/property-x86-4a.d: Likewise.
	* testsuite/ld-i386/property-x86-5.d: Likewise.
	* testsuite/ld-i386/property-x86-cet1.d: Likewise.
	* testsuite/ld-i386/property-x86-cet2a.d: Likewise.
	* testsuite/ld-i386/property-x86-cet5a.d: Likewise.
	* testsuite/ld-i386/property-x86-cet5b.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt1a.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt1b.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt2.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt4.d: Likewise.
	* testsuite/ld-i386/property-x86-ibt5.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk1a.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk1b.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk2.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk4.d: Likewise.
	* testsuite/ld-i386/property-x86-shstk5.d: Likewise.
	* testsuite/ld-x86-64/pr23372c-x32.d: Likewise.
	* testsuite/ld-x86-64/pr23372c.d: Likewise.
	* testsuite/ld-x86-64/pr23486c.d: Likewise.
	* testsuite/ld-x86-64/pr23486d-x32.d: Likewise.
	* testsuite/ld-x86-64/pr23486d.d: Likewise.
	* testsuite/ld-x86-64/pr24322a-x32.d: Likewise.
	* testsuite/ld-x86-64/pr24322a.d: Likewise.
	* testsuite/ld-x86-64/pr24322b-x32.d: Likewise.
	* testsuite/ld-x86-64/pr24322b.d: Likewise.
	* testsuite/ld-x86-64/pr24458a-x32.d: Likewise.
	* testsuite/ld-x86-64/pr24458a.d: Likewise.
	* testsuite/ld-x86-64/pr24458b-x32.d: Likewise.
	* testsuite/ld-x86-64/pr24458b.d: Likewise.
	* testsuite/ld-x86-64/pr24458c-x32.d: Likewise.
	* testsuite/ld-x86-64/pr24458c.d: Likewise.
	* testsuite/ld-x86-64/property-1a.r: Likewise.
	* testsuite/ld-x86-64/property-2a.r: Likewise.
	* testsuite/ld-x86-64/property-3.r: Likewise.
	* testsuite/ld-x86-64/property-3a.r: Likewise.
	* testsuite/ld-x86-64/property-4.r: Likewise.
	* testsuite/ld-x86-64/property-4a.r: Likewise.
	* testsuite/ld-x86-64/property-5.r: Likewise.
	* testsuite/ld-x86-64/property-5a.r: Likewise.
	* testsuite/ld-x86-64/property-7a.r: Likewise.
	* testsuite/ld-x86-64/property-x86-3-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-3.d: Likewise.
	* testsuite/ld-x86-64/property-x86-4a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-4a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-5-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-5.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet1-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet1.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet2a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet2a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet5a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet5a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet5b-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-cet5b.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt1a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt1a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt1b-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt1b.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt2-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt2.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt4-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt4.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt5-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-ibt5.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk1a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk1a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk1b-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk1b.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk2-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk2.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk4-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk4.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk5-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-shstk5.d: Likewise.
	* testsuite/ld-i386/i386.exp: Run property-x86-6,
	property-x86-isa1, property-x86-isa2 and property-x86-isa3.
	* testsuite/ld-i386/property-x86-1.S: Updated to the current
	GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED
	values.
	* testsuite/ld-i386/property-x86-2.S: Likewise.
	* testsuite/ld-i386/property-x86-3.s: Likewise.
	* testsuite/ld-x86-64/pr23372d.s: Likewise.
	* testsuite/ld-x86-64/pr23372e.s: Likewise.
	* testsuite/ld-x86-64/pr23372f.s: Likewise.
	* testsuite/ld-x86-64/pr23486c.s: Likewise.
	* testsuite/ld-x86-64/pr23486d.s: Likewise.
	* testsuite/ld-x86-64/property-x86-1.S: Likewise.
	* testsuite/ld-x86-64/property-x86-2.S: Likewise.
	* testsuite/ld-x86-64/property-x86-3.s: Likewise.
	* testsuite/ld-x86-64/property-x86-5a.s: Likewise.
	* testsuite/ld-x86-64/property-x86-5b.s: Likewise.
	* testsuite/ld-i386/property-x86-6.d: New file.
	* testsuite/ld-i386/property-x86-isa1.d: Likewise.
	* testsuite/ld-i386/property-x86-isa2.d: Likewise.
	* testsuite/ld-i386/property-x86-isa3.d: Likewise.
	* testsuite/ld-x86-64/property-x86-6-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-6.d: Likewise.
	* testsuite/ld-x86-64/property-x86-6.s: Likewise.
	* testsuite/ld-x86-64/property-x86-isa1-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-isa1.d: Likewise.
	* testsuite/ld-x86-64/property-x86-isa1.s: Likewise.
	* testsuite/ld-x86-64/property-x86-isa2-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-isa2.d: Likewise.
	* testsuite/ld-x86-64/property-x86-isa3-x32.d: Likewise.
	* testsuite/ld-x86-64/property-x86-isa3.d: Likewise.
	* testsuite/ld-x86-64/simple.s: Likewise.
	* ld/testsuite/ld-x86-64/x86-64.exp: Run property-x86-6,
	property-x86-6-x32, property-x86-isa1, property-x86-isa1-x32,
	property-x86-isa2, property-x86-isa2-x32, property-x86-isa3-x32
	and property-x86-isa3.
2020-10-09 05:13:26 -07:00
Hannes Domani
3d87245cc1 Handle void results as unformatted prints
When printing void results without any format letter, they are output
as expected:
(gdb) p $abcd
$1 = void
(gdb) p (void)10
$2 = void

But if any format letter (besides s) is used, it always outputs zero:
(gdb) p/x $abcd
$3 = 0x0
(gdb) p/x (void)10
$4 = 0x0

So this adds void results to the types handled like unformatted prints.

gdb/ChangeLog:

2020-10-09  Hannes Domani  <ssbssa@yahoo.de>

	PR exp/26714
	* printcmd.c (print_formatted): Handle void results as
	unformatted prints.

gdb/testsuite/ChangeLog:

2020-10-09  Hannes Domani  <ssbssa@yahoo.de>

	PR exp/26714
	* gdb.base/printcmds.exp: Add tests for void results.
2020-10-09 13:51:50 +02:00
Andrew Burgess
bbb826f5e9 gdb: Delay releasing target_desc_up in more cases
After commit:

  commit 51a948fdf0
  Date:   Mon Jul 20 14:18:04 2020 +0100

      gdb: Have allocate_target_description return a unique_ptr

There were a few places where we could (should?) have delayed
releasing the target_desc_up until a little later.  This commit
catches these cases.

In the case of ARC, the target_desc_up is now exposed right out to
gdbserver, which means making a small change there too.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* arch/aarch32.c (aarch32_create_target_description): Release the
	target_desc_up as late as possible.
	* arch/aarch64.c (aarch64_create_target_description): Likewise.
	* arch/amd64.c (amd64_create_target_description): Likewise.
	* arch/arc.c (arc_create_target_description): Return a
	target_desc_up, don't release it.
	* arch/arc.h (arc_create_target_description): Update declaration.
	(arc_lookup_target_description): Move target_desc_up into the
	cache, and return a borrowed pointer.
	* arch/arm.c (arm_create_target_description): Release the
	target_desc_up as late as possible.
	* arch/i386.c (i386_create_target_description): Likewise.
	* arch/riscv.h (riscv_create_target_description): Update
	declaration to match definition.
	* arch/tic6x.c (tic6x_create_target_description): Release the
	target_desc_up as late as possible.

gdbserver/ChangeLog:

	* linux-arc-low.cc (arc_linux_read_description): Release the
	unique_ptr returned from arc_create_target_description.
2020-10-09 11:45:44 +01:00
Andrew Burgess
361cb21935 gnulib: Ensure all libraries are used when building gdb/gdbserver
An issue was reported here related to building GDB on MinGW:

  https://sourceware.org/pipermail/gdb/2020-September/048927.html

It was suggested here:

  https://sourceware.org/pipermail/gdb/2020-September/048931.html

that the solution might be to make use of $(LIB_GETRANDOM), a variable
defined in the gnulib makefile, when linking GDB.

In fact I think the issue is bigger than just LIB_GETRANDOM.  When
using the script binutils-gdb/gnulib/update-gnulib.sh to reimport
gnulib there is a lot of output from gnulib's gnulib-tool.  Part of
that output is this:

  You may need to use the following makefile variables when linking.
  Use them in <program>_LDADD when linking a program, or
  in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library.
    $(FREXPL_LIBM)
    $(FREXP_LIBM)
    $(INET_NTOP_LIB)
    $(LIBTHREAD)
    $(LIB_GETLOGIN)
    $(LIB_GETRANDOM)
    $(LIB_HARD_LOCALE)
    $(LIB_MBRTOWC)
    $(LIB_SETLOCALE_NULL)
    $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise

What I think this is telling us is that we should be including the
value of all these variables on the link line for gdb and gdbserver.

The problem though is that these variables are define in gnulib's
makefile, but are not (necessarily) defined in GDB's makefile.

One solution would be to recreate the checks that gnulib performs in
order to recreate these variables in both gdb's and gdbserver's
makefile.  Though this shouldn't be too hard, most (if not all) of
these checks are in the form macros defined in m4 files in the gnulib
tree, so we could just reference these as needed.  However, in this
commit I propose a different solution.

Currently, in the top level makefile, we give gdb and gdbserver a
dependency on gnulib.  Once gnulib has finished building gdb and
gdbserver can start, these projects then have a hard coded (relative)
path to the compiled gnulib library in their makefiles.

In this commit I extend the gnulib configure script to install a new
makefile fragment in the gnulib build directory.  This new file will
have the usual variable substitutions applied to it, and so can
include the complete list (see above) of all the extra libraries that
are needed when linking against gnulib.

In fact the new makefile fragment defines three variables, these are:

LIBGNU: The path to the archive containing gnulib.  Can be used as a
       dependency as when this file changes gdb/gdbserver should be
       relinked.

LIBGNU_EXTRA_LIBS: A list of linker -l.... flags that should be
       included in the link line of gdb/gdbserver.  These are
       libraries that $(LIBGNU) depends on.  This list is taken from
       the output of gnulib-tool, which is run by our
       gnulib/update-gnulib.sh script.

INCGNU: A list of -I.... include paths that should be passed to the
       compiler, these are where the gnulib headers can be found.

Now both gdb and gdbserver can include the makefile fragment and make
use of these variables.

The makefile fragment relies on the variable GNULIB_BUILDDIR being
defined.  This is checked for in the fragment, and was already defined
in the makefiles of gdb and gdbserver.

gdb/ChangeLog:

	* Makefile.in: Include Makefile.gnulib.inc.  Don't define LIBGNU
	or INCGNU.  Make use of LIBGNU_EXTRA_LIBS when linking.

gdbserver/ChangeLog:

	* Makefile.in: Include Makefile.gnulib.inc.  Don't define LIBGNU
	or INCGNU.  Make use of LIBGNU_EXTRA_LIBS when linking.

gnulib/ChangeLog:

	* Makefile.gnulib.inc.in: New file.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Install the new file.
2020-10-09 09:31:43 +01:00
Jan Vrany
f5c4b229c6 Notify observers that directories have changed when using "directory" CLI command
gdb/ChangeLog

	* source.c (directory_command): Notify observers that "directories"
	parameter has changed.

gdb/testsuite/ChangeLog

	* gdb.mi/mi-cmd-param-changed.exp: Check that notification is
	is emmited for both 'set directories' and 'directory' commands.
2020-10-09 06:49:33 +01:00
Tom Tromey
b270168504 Style more output of "disassemble" command
I noticed a couple of spots where the "disassemble" could style its
output, but currently does not.  This patch adds styling to the
function name at the start of the disassembly, and any addresses
printed there.

gdb/ChangeLog
2020-10-08  Tom Tromey  <tom@tromey.com>

	* cli/cli-cmds.c (print_disassembly): Style function name and
	addresses.  Add _() wrappers.

gdb/testsuite/ChangeLog
2020-10-08  Tom Tromey  <tom@tromey.com>

	* gdb.base/style.exp: Check that "main"'s name is styled.
2020-10-08 19:41:45 -06:00
GDB Administrator
b3d3944ee5 Automatic date update in version.in 2020-10-09 00:00:07 +00:00
H.J. Lu
f511427204 gold: Update testsuite/split_[i386|x32|x86_64].sh
Update testsuite/split_i386.sh, testsuite/split_x32.sh and
testsuite/split_x86_64.sh for

commit f9ff65d4df
Author: Alan Modra <amodra@gmail.com>
Date:   Thu Oct 8 10:27:43 2020 +1030

    [GOLD] Increase --split-stack-adjust-size

	* testsuite/split_i386.sh: Updated for --split-stack-adjust-size
	default change.
	* testsuite/split_x32.sh: Likewise.
	* testsuite/split_x86_64.sh: Likewise.
2020-10-08 05:01:22 -07:00
Shahab Vahedi
ada508b6cc Update GDB NEWS with ARC support in GDBserver
gdb/ChangeLog:

	* NEWS: Mention ARC support in GDBserver.
2020-10-08 13:51:42 +02:00
Andrew Burgess
51a948fdf0 gdb: Have allocate_target_description return a unique_ptr
Update allocate_target_description to return a target_desc_up, a
specialisation of unique_ptr.

This commit does not attempt to make use of the unique_ptr in the
best possible way, in almost all cases we immediately release the
pointer from within the unique_ptr and then continue as before.

There are a few places where it was easy to handle the unique_ptr, and
in these cases I've done that.

Everything under gdb/features/* is auto-regenerated.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* arch/aarch32.c (aarch32_create_target_description): Release
	unique_ptr returned from allocate_target_description.
	* arch/aarch64.c (aarch64_create_target_description): Likewise.
	* arch/amd64.c (amd64_create_target_description): Likewise.
	* arch/arc.c (arc_create_target_description): Likewise.
	* arch/arm.c (arm_create_target_description): Likewise.
	* arch/i386.c (i386_create_target_description): Likewise.
	* arch/riscv.c (riscv_create_target_description): Update return
	type.  Handle allocate_target_description returning a unique_ptr.
	(riscv_lookup_target_description): Update to handle unique_ptr.
	* arch/tic6x.c (tic6x_create_target_description): Release
	unique_ptr returned from allocate_target_description.
	* features/microblaze-with-stack-protect.c: Regenerate.
	* features/microblaze.c: Regenerate.
	* features/mips-dsp-linux.c: Regenerate.
	* features/mips-linux.c: Regenerate.
	* features/mips64-dsp-linux.c: Regenerate.
	* features/mips64-linux.c: Regenerate.
	* features/nds32.c: Regenerate.
	* features/nios2.c: Regenerate.
	* features/or1k.c: Regenerate.
	* features/rs6000/powerpc-32.c: Regenerate.
	* features/rs6000/powerpc-32l.c: Regenerate.
	* features/rs6000/powerpc-403.c: Regenerate.
	* features/rs6000/powerpc-403gc.c: Regenerate.
	* features/rs6000/powerpc-405.c: Regenerate.
	* features/rs6000/powerpc-505.c: Regenerate.
	* features/rs6000/powerpc-601.c: Regenerate.
	* features/rs6000/powerpc-602.c: Regenerate.
	* features/rs6000/powerpc-603.c: Regenerate.
	* features/rs6000/powerpc-604.c: Regenerate.
	* features/rs6000/powerpc-64.c: Regenerate.
	* features/rs6000/powerpc-64l.c: Regenerate.
	* features/rs6000/powerpc-7400.c: Regenerate.
	* features/rs6000/powerpc-750.c: Regenerate.
	* features/rs6000/powerpc-860.c: Regenerate.
	* features/rs6000/powerpc-altivec32.c: Regenerate.
	* features/rs6000/powerpc-altivec32l.c: Regenerate.
	* features/rs6000/powerpc-altivec64.c: Regenerate.
	* features/rs6000/powerpc-altivec64l.c: Regenerate.
	* features/rs6000/powerpc-e500.c: Regenerate.
	* features/rs6000/powerpc-e500l.c: Regenerate.
	* features/rs6000/powerpc-isa205-32l.c: Regenerate.
	* features/rs6000/powerpc-isa205-64l.c: Regenerate.
	* features/rs6000/powerpc-isa205-altivec32l.c: Regenerate.
	* features/rs6000/powerpc-isa205-altivec64l.c: Regenerate.
	* features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c: Regenerate.
	* features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c: Regenerate.
	* features/rs6000/powerpc-isa205-vsx32l.c: Regenerate.
	* features/rs6000/powerpc-isa205-vsx64l.c: Regenerate.
	* features/rs6000/powerpc-isa207-htm-vsx32l.c: Regenerate.
	* features/rs6000/powerpc-isa207-htm-vsx64l.c: Regenerate.
	* features/rs6000/powerpc-isa207-vsx32l.c: Regenerate.
	* features/rs6000/powerpc-isa207-vsx64l.c: Regenerate.
	* features/rs6000/powerpc-vsx32.c: Regenerate.
	* features/rs6000/powerpc-vsx32l.c: Regenerate.
	* features/rs6000/powerpc-vsx64.c: Regenerate.
	* features/rs6000/powerpc-vsx64l.c: Regenerate.
	* features/rs6000/rs6000.c: Regenerate.
	* features/rx.c: Regenerate.
	* features/s390-gs-linux64.c: Regenerate.
	* features/s390-linux32.c: Regenerate.
	* features/s390-linux32v1.c: Regenerate.
	* features/s390-linux32v2.c: Regenerate.
	* features/s390-linux64.c: Regenerate.
	* features/s390-linux64v1.c: Regenerate.
	* features/s390-linux64v2.c: Regenerate.
	* features/s390-te-linux64.c: Regenerate.
	* features/s390-tevx-linux64.c: Regenerate.
	* features/s390-vx-linux64.c: Regenerate.
	* features/s390x-gs-linux64.c: Regenerate.
	* features/s390x-linux64.c: Regenerate.
	* features/s390x-linux64v1.c: Regenerate.
	* features/s390x-linux64v2.c: Regenerate.
	* features/s390x-te-linux64.c: Regenerate.
	* features/s390x-tevx-linux64.c: Regenerate.
	* features/s390x-vx-linux64.c: Regenerate.
	* mips-tdep.c (_initialize_mips_tdep): Release unique_ptr returned
	from allocate_target_description.
	* target-descriptions.c (allocate_target_description): Update
	return type.
	(print_c_tdesc::visit_pre): Release unique_ptr returned from
	allocate_target_description.

gdbserver/ChangeLog:

	* linux-low.cc (linux_process_target::handle_extended_wait):
	Release the unique_ptr returned from allocate_target_description.
	* linux-riscv-low.cc (riscv_target::low_arch_setup): Likewise.
	* linux-x86-low.cc (tdesc_amd64_linux_no_xml): Change type.
	(tdesc_i386_linux_no_xml): Change type.
	(x86_linux_read_description): Borrow pointer from unique_ptr
	object.
	(x86_target::get_ipa_tdesc_idx): Likewise.
	(initialize_low_arch): Likewise.
	* tdesc.cc (allocate_target_description): Update return type.

gdbsupport/ChangeLog:

	* tdesc.h (allocate_target_description): Update return type.
2020-10-08 10:14:14 +01:00
Alan Modra
f9ff65d4df [GOLD] Increase --split-stack-adjust-size
For functions with small (< 256 bytes) stack frames, the current x86
do_calls_non_split ignores --split-stack-adjust-size and, in
combination with __morestack_non_split, supplies a non-split-stack
function with at least 0x100000 (1M) available stack.  On powerpc64, a
default of 0x4000 is not large enough to reliably work with the golang
testsuite.  This increase the default size to the defacto x86 value.

	* options.h (split_stack_adjust_size): Default to 0x100000.
2020-10-08 11:28:05 +10:30
GDB Administrator
467eed626a Automatic date update in version.in 2020-10-08 00:00:06 +00:00
H.J. Lu
3d08aa66b3 x86: Update GNU property tests
Update property tests for glibc compiled by Fedora binary annotation
plugin for GCC, which may insert additonal GNU properties:

	x86 ISA needed: SSE, SSE2

	* testsuite/ld-i386/property-3.r: Updated for Fedora binary
	annotation plugin for GCC.
	* testsuite/ld-i386/property-4.r: Likewise.
	* testsuite/ld-i386/property-5.r: Likewise.
	* testsuite/ld-x86-64/property-3.r: Likewise.
	* testsuite/ld-x86-64/property-4.r: Likewise.
	* testsuite/ld-x86-64/property-5.r: Likewise.
2020-10-07 15:54:18 -07:00