Commit Graph

99754 Commits

Author SHA1 Message Date
Simon Marchi
d043f8c867 Fix double-free when creating more than one block in JIT debug info reader
A double-free happens when using a JIT debug info reader that creates
more than one block.  In the loop that frees blocks in finalize_symtab,
at the very end, the gdb_block_iter_tmp variable is set initially, but
not changed as the loop advances.  If we have two blocks, the first
iteration frees the first block, the second iteration frees the second
block, but the third iteration tries to free the second block again, as
gdb_block_iter_tmp keeps pointing on the second block.

Fix it by assigning the gdb_block_iter_tmp variable in the loop.

I have improved the jit-reader.exp test to cover this case, by adding a
second "JIT-ed" function and creating a block for it.  I have renamed
the existing function to something I find a bit more descriptive.  There
are no significant changes to jit-reader.exp itself, only updates
following the renaming.  The important changes are in jithost.c
(generate a new function) and in jitreader.c (create a gdb_block for
that function).

This was found because of an ASan report:

$ ./gdb testsuite/outputs/gdb.base/jit-reader/jit-reader -ex "jit-reader-load /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/jit-reader/jitreader.so" -ex r
Reading symbols from testsuite/outputs/gdb.base/jit-reader/jit-reader...
Starting program: /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/jit-reader/jit-reader
=================================================================
==1751048==ERROR: AddressSanitizer: heap-use-after-free on address 0x604000042eb8 at pc 0x5650ef8eec88 bp 0x7ffe52767290 sp 0x7ffe52767280
READ of size 8 at 0x604000042eb8 thread T0
    #0 0x5650ef8eec87 in finalize_symtab /home/simark/src/binutils-gdb/gdb/jit.c:768
    #1 0x5650ef8eef88 in jit_object_close_impl /home/simark/src/binutils-gdb/gdb/jit.c:797
    #2 0x7fbbda986278 in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:71
    #3 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #4 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #5 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #6 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

0x604000042eb8 is located 40 bytes inside of 48-byte region [0x604000042e90,0x604000042ec0)
freed by thread T0 here:
    #0 0x7fbbe57376b0 in __interceptor_free /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:122
    #1 0x5650ef8f350b in xfree<gdb_block> /home/simark/src/binutils-gdb/gdb/gdbsupport/common-utils.h:62
    #2 0x5650ef8eeca9 in finalize_symtab /home/simark/src/binutils-gdb/gdb/jit.c:769
    #3 0x5650ef8eef88 in jit_object_close_impl /home/simark/src/binutils-gdb/gdb/jit.c:797
    #4 0x7fbbda986278 in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:71
    #5 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #6 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #7 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #8 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

previously allocated by thread T0 here:
    #0 0x7fbbe5737cd8 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:153
    #1 0x5650eef662f3 in xcalloc /home/simark/src/binutils-gdb/gdb/alloc.c:100
    #2 0x5650ef8f34ea in xcnew<gdb_block> /home/simark/src/binutils-gdb/gdb/gdbsupport/poison.h:122
    #3 0x5650ef8ed467 in jit_block_open_impl /home/simark/src/binutils-gdb/gdb/jit.c:557
    #4 0x7fbbda98620a in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:60
    #5 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #6 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #7 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #8 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

gdb/ChangeLog:

	* jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop.

gdb/testsuite/ChangeLog:

	* gdb.base/jit-reader.exp (jit_reader_test): Rename
	jit_function_00 to jit_function_stack_mangle.
	* gdb.base/jithost.c (jit_function_t): Rename to...
	(jit_function_stack_mangle_t): ... this.
	(jit_function_add_t): New typedef.
	(jit_function_00_code): Rename to...
	(jit_function_stack_mangle_code): ... this, make static.
	(jit_function_add_code): New.
	(main): Generate "add" function and call it.  Adjust to changes
	in jithost_abi.
	* gdb.base/jithost.h (struct jithost_abi_bounds): New.
	(struct jithost_abi) <begin, end>: Remove fields.
	<object, function_stack_mangle, function_add>: New fields.
	* gdb.base/jitreader.c (struct reader_state) <code_begin,
	code_end>: Remove fields.
	<func_stack_mangle>: New field.
	(read_debug_info): Adjust to renaming, create block for "add"
	function.
	(read_sp, unwind_frame, get_frame_id): Adjust to other changes.
2019-12-16 16:30:49 -05:00
Tom Tromey
d9fa87f4f6 Constify get_exec_file
I noticed that get_exec_file could return a "const char *".  This
patch implements this change.

I couldn't build all the code -- but I did build Linux native and a
mingw cross.

Consequently, the NTO code has a hack, where it casts away const.  I
think this can be removed, but that required more work there, and
since I couldn't compile it, I felt it best not to try.

Let me know what you think.

gdb/ChangeLog
2019-12-16  Tom Tromey  <tromey@adacore.com>

	* windows-nat.c (windows_nat_target::attach): Update.
	* remote.c (extended_remote_target::attach): Update.
	* procfs.c (procfs_target::attach): Update.
	* nto-procfs.c (nto_procfs_target::attach): Update.
	(nto_procfs_target::create_inferior): Update.
	* inf-ptrace.c (inf_ptrace_target::attach): Update.
	* gnu-nat.c (gnu_nat_target::attach): Update.
	(gnu_nat_target::detach): Update.
	* darwin-nat.c (darwin_nat_target::attach): Update.
	* corefile.c (get_exec_file): Constify result.  Remove extraneous
	return.
	* bsd-kvm.c (bsd_kvm_target_open): Update.
	* gdbsupport/common-inferior.h (get_exec_file): Constify result.

gdb/gdbserver/ChangeLog
2019-12-16  Tom Tromey  <tromey@adacore.com>

	* server.c (get_exec_file): Constify result.

Change-Id: I29c60f7313a7def0dcb290ff0c2a4c1dea4f981f
2019-12-16 14:08:11 -07:00
Christian Biesinger
c0c3707ff4 Update Gnulib to the latest git version
This patch allows us to remove a workaround in common-defs.h due to
the gnulib fix in:
https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00024.html

All of GDB's local Gnulib patches were already fixed upstream per their
descriptions, so this patch removes them all.

The problem listed here:
https://sourceware.org/ml/gdb-patches/2019-08/msg00553.html
was probably partially fixed by moving gnulib to the toplevel;
for the remainder, I am setting MAKEOVERRIDES to empty in
gnulib/Makefile.am.  See also the comment there (it fixes an issue
with compilers that don't use C99/C11 by default such as GCC 4.8.5,
the default on Centos 7).

gdb/ChangeLog:

2019-12-16  Christian Biesinger  <cbiesinger@google.com>

	* gdbsupport/common-defs.h: Remove workaround for a gnulib bug
	(we no longer need to include time.h before pathmax.h)

gnulib/ChangeLog:

2019-12-16  Christian Biesinger  <cbiesinger@google.com>

	* Makefile.am: Set MAKEOVERRIDES.
	* Makefile.in: Regenerate.
	* aclocal.m4: Regenerate.
	* config.in: Regenerate.
	* configure: Regenerate.
	* import/Makefile.am: Update.
	* import/Makefile.in: Regenerate.
	* import/_Noreturn.h: New file.
	* import/alloca.c (i00afunc): Update.
	* import/alloca.in.h (if): Update.
	* import/arg-nonnull.h: Rename from import/extra/snippet/arg-nonnull.h.
	* import/arpa_inet.in.h (if): Update.
	* import/assure.h: Update.
	* import/at-func.c: Update.
	* import/basename-lgpl.c: Update.
	* import/canonicalize-lgpl.c (if): Update.
	* import/c++defs.h: Rename from import/extra/snippet/c++defs.h.
	* import/cdefs.h: New file.
	* import/chdir-long.c: Update.
	* import/chdir-long.h: Update.
	* import/cloexec.c: Update.
	* import/cloexec.h: Update.
	* import/close.c: Update.
	* import/closedir.c: Update.
	* import/config.charset: Remove.
	* import/dirent-private.h: Update.
	* import/dirent.in.h: Update.
	* import/dirfd.c: Update.
	* import/dirname-lgpl.c: Update.
	* import/dirname.h (base_name): Update.
	* import/dosname.h (if): Update.
	* import/dup-safer-flag.c: New file.
	* import/dup-safer.c: Update.
	* import/dup.c: Update.
	* import/dup2.c (if): Update.
	(dup2_nothrow): Update.
	(ms_windows_dup2): Update.
	* import/errno.in.h (if): Update.
	(elif): Update.
	* import/error.c (if): Update.
	(strerror_r): Update.
	(program_name): Update.
	(error): Update.
	(error_at_line): Update.
	* import/error.h: Update.
	* import/exitfail.c: Update.
	* import/exitfail.h: Update.
	* import/extra/config.rpath: Update.
	* import/extra/snippet/_Noreturn.h: Remove.
	* import/extra/update-copyright: Update.
	* import/fchdir.c: Update.
	* import/fcntl.c (rpl_fcntl): Update.
	(INCL_DOS): Update.
	(if): Update.
	(rpl_fcntl_DUPFD): Update.
	(rpl_fcntl_DUPFD_CLOEXEC): Update.
	(klibc_fcntl): Update.
	(fcntl): Update.
	(have_dupfd_cloexec): Update.
	* import/fcntl.in.h (if): Update.
	(creat): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	(O_CLOEXEC): Update.
	(GNULIB_defined_O_CLOEXEC): Update.
	* import/fd-hook.c: Update.
	* import/fd-hook.h: Update.
	* import/fd-safer-flag.c: New file.
	* import/fd-safer.c: Update.
	* import/fdopendir.c: Update.
	* import/filename.h: Update.
	* import/filenamecat-lgpl.c (longest_relative_suffix): Update.
	(mfile_name_concat): Update.
	* import/filenamecat.h: Update.
	* import/flexmember.h: Update.
	* import/float+.h: Update.
	* import/float.c: Update.
	* import/float.in.h (LDBL_MIN): Update.
	* import/fnmatch.c (__builtin_expect): Update.
	(FALLTHROUGH): Update.
	* import/fnmatch.in.h (_FNMATCH_H): Update.
	(_): Update.
	(fnmatch): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/fnmatch_loop.c (FCT): Update.
	(EXT): Update.
	* import/fpucw.h (GET_FPUCW): Update.
	(SET_FPUCW): Update.
	* import/frexp.c: Update.
	* import/frexpl.c: Update.
	* import/fstat.c (stat): Update.
	(fstat): Update.
	(WINDOWS_NATIVE): Update.
	(fstat_nothrow): Update.
	(WIN32_LEAN_AND_MEAN): Update.
	* import/fstatat.c (normal_fstatat): Update.
	(rpl_fstatat): Update.
	* import/getcwd-lgpl.c (rpl_getcwd): Update.
	* import/getcwd.c (getcwd_nothrow): Update.
	(getcwd_system): Update.
	(__getcwd): Update.
	* import/getdtablesize.c (if): Update.
	(_setmaxstdio): Update.
	(_setmaxstdio_nothrow): Update.
	(getdtablesize): Update.
	* import/getlogin_r.c (if): Update.
	(getlogin_r): Update.
	* import/getprogname.c (getprogname): Update.
	* import/getprogname.h: Update.
	* import/gettext.h (if): Update.
	* import/gettimeofday.c (WINDOWS_NATIVE): Update.
	(localtime): Update.
	(GetProcAddress): Update.
	(gmtime): Update.
	(void): Update.
	(struct tm): Update.
	(rpl_localtime): Update.
	(initialize): Update.
	(rpl_gmtime): Update.
	(tzset): Update.
	(rpl_tzset): Update.
	* import/glob-libc.h (_Restrict_): Update.
	(__size_t): Update.
	(__need_size_t): Update.
	(glob): Update.
	(globfree): Update.
	(__REDIRECT_NTH): Update.
	(glob64): Update.
	(globfree64): Update.
	(glob_pattern_p): Update.
	* import/glob.c (POSIX): Update.
	(if): Update.
	(__set_errno): Update.
	(getpwnam_r): Update.
	(__lstat64): Update.
	(FLEXIBLE_ARRAY_MEMBER): Update.
	(__glob_pattern_p): Update.
	(GETPW_R_SIZE_MAX): Update.
	(GET_LOGIN_NAME_MAX): Update.
	(DT_UNKNOWN): Update.
	(DT_DIR): Update.
	(DT_LNK): Update.
	(D_TYPE_TO_RESULT): Update.
	(readdir_result_might_be_symlink): Update.
	(readdir_result_might_be_dir): Update.
	(readdir_result_type): Update.
	(D_INO_TO_RESULT): Update.
	(READDIR_RESULT_INITIALIZER): Update.
	(attribute_hidden): Update.
	(__attribute_noinline__): Update.
	(__builtin_expect): Update.
	(__glibc_unlikely): Update.
	(__has_builtin): Update.
	(__glob_pattern_type): Update.
	(is_dir): Update.
	(glob): Update.
	(globfree): Update.
	(libc_hidden_def): Update.
	(DIRSEP_CHAR): Update.
	(prefix_array): Update.
	(weak_alias): Update.
	(link_exists2_p): Update.
	(link_exists_p): Update.
	(glob_in_dir): Update.
	(GLOBNAMES_MEMBERS): Update.
	* import/glob.in.h (_GL_GLOB_H): Update.
	(_): Update.
	(__BEGIN_DECLS): Update.
	(__END_DECLS): Update.
	(_Restrict_): Update.
	(__THROW): Update.
	(__THROWNL): Update.
	(__size_t): Update.
	(__USE_GNU): Update.
	(glob): Update.
	(globfree): Update.
	(glob_pattern_p): Update.
	(__glob_pattern_p): Update.
	(__GLOB_GNULIB): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_WARN_ON_USE): Update.
	* import/glob_internal.h: New file.
	* import/glob_pattern_p.c: New file.
	* import/globfree.c: New file.
	* import/glthread/lock.c (glthread_rwlock_init_for_glibc): Update.
	(glthread_rwlock_rdlock_multithreaded): Update.
	(glthread_once_call): Update.
	(glthread_once_multithreaded): Update.
	(glthread_once_singlethreaded): Update.
	(glthread_recursive_lock_init_multithreaded): Update.
	(glthread_recursive_lock_lock_multithreaded): Update.
	(glthread_recursive_lock_unlock_multithreaded): Update.
	(glthread_recursive_lock_destroy_multithreaded): Update.
	(glthread_lock_init_func): Update.
	(glthread_lock_lock_func): Update.
	(glthread_lock_unlock_func): Update.
	(glthread_lock_destroy_func): Update.
	(gl_waitqueue_t): Update.
	(gl_waitqueue_init): Update.
	(gl_waitqueue_add): Update.
	(gl_waitqueue_notify_first): Update.
	(gl_waitqueue_notify_all): Update.
	(glthread_rwlock_init_func): Update.
	(glthread_rwlock_rdlock_func): Update.
	(glthread_rwlock_wrlock_func): Update.
	(glthread_rwlock_unlock_func): Update.
	(glthread_rwlock_destroy_func): Update.
	(glthread_recursive_lock_init_func): Update.
	(glthread_recursive_lock_lock_func): Update.
	(glthread_recursive_lock_unlock_func): Update.
	(glthread_recursive_lock_destroy_func): Update.
	(glthread_once_func): Update.
	* import/glthread/lock.h (c11_threads_in_use): Update.
	(pthread_in_use): Update.
	(gl_rwlock_initializer): Update.
	(glthread_rwlock_init): Update.
	(glthread_rwlock_init_for_glibc): Update.
	(pth_in_use): Update.
	(gl_lock_define): Update.
	(gl_lock_define_initialized): Update.
	(gl_lock_initializer): Update.
	(glthread_lock_init): Update.
	(glthread_lock_lock): Update.
	(glthread_lock_unlock): Update.
	(glthread_lock_destroy): Update.
	(gl_rwlock_define): Update.
	(gl_rwlock_define_initialized): Update.
	(glthread_rwlock_rdlock): Update.
	(glthread_rwlock_wrlock): Update.
	(glthread_rwlock_unlock): Update.
	(glthread_rwlock_destroy): Update.
	(gl_recursive_lock_define): Update.
	(gl_recursive_lock_define_initialized): Update.
	(gl_recursive_lock_initializer): Update.
	(glthread_recursive_lock_init): Update.
	(glthread_recursive_lock_lock): Update.
	(glthread_recursive_lock_unlock): Update.
	(glthread_recursive_lock_destroy): Update.
	(gl_once_define): Update.
	(glthread_once): Update.
	(glthread_once_multithreaded): Update.
	(glthread_once_singlethreaded): Update.
	(thread_in_use): Update.
	(glthread_recursive_lock_init_multithreaded): Update.
	(glthread_recursive_lock_lock_multithreaded): Update.
	(glthread_recursive_lock_unlock_multithreaded): Update.
	(glthread_recursive_lock_destroy_multithreaded): Update.
	(glthread_lock_init_func): Update.
	(glthread_lock_lock_func): Update.
	(glthread_lock_unlock_func): Update.
	(glthread_lock_destroy_func): Update.
	(glthread_rwlock_init_func): Update.
	(glthread_rwlock_rdlock_func): Update.
	(glthread_rwlock_wrlock_func): Update.
	(glthread_rwlock_unlock_func): Update.
	(glthread_rwlock_destroy_func): Update.
	(glthread_recursive_lock_init_func): Update.
	(glthread_recursive_lock_lock_func): Update.
	(glthread_recursive_lock_unlock_func): Update.
	(glthread_recursive_lock_destroy_func): Update.
	(glthread_once_func): Update.
	* import/glthread/threadlib.c: Update.
	* import/hard-locale.c: Update.
	* import/hard-locale.h: Update.
	* import/inet_ntop.c: Update.
	* import/intprops.h (__has_builtin): Update.
	(_GL_INT_CONVERT): Update.
	(_GL_INT_NEGATE_CONVERT): Update.
	(verify): Update.
	(_GL_HAS_BUILTIN_OVERFLOW): Update.
	(_GL_HAS_BUILTIN_ADD_OVERFLOW): Update.
	(_GL_HAS_BUILTIN_OVERFLOW_P): Update.
	(_GL_HAS_BUILTIN_MUL_OVERFLOW): Update.
	(_GL_BINARY_OP_OVERFLOW): Update.
	(INT_ADD_WRAPV): Update.
	(INT_SUBTRACT_WRAPV): Update.
	(INT_MULTIPLY_WRAPV): Update.
	(_GL_INT_OP_WRAPV): Update.
	(_GL_INT_OP_WRAPV_SMALLISH): Update.
	(_GL_INT_OP_WRAPV_LONGISH): Update.
	(_GL_INT_OP_CALC): Update.
	(_GL_INT_OP_CALC1): Update.
	(_GL_INT_OP_WRAPV_VIA_UNSIGNED): Update.
	(_GL_INT_ADD_RANGE_OVERFLOW): Update.
	(_GL_INT_SUBTRACT_RANGE_OVERFLOW): Update.
	(_GL_INT_MULTIPLY_RANGE_OVERFLOW): Update.
	* import/inttypes.in.h (if): Update.
	* import/isnan.c: Update.
	* import/isnand-nolibm.h: Update.
	* import/isnand.c: Update.
	* import/isnanl-nolibm.h: Update.
	* import/isnanl.c: Update.
	* import/itold.c: Update.
	* import/libc-config.h: New file.
	* import/limits.in.h (LLONG_MIN): Update.
	(LLONG_MAX): Update.
	(ULLONG_MAX): Update.
	(WORD_BIT): Update.
	(LONG_BIT): Update.
	* import/localcharset.c (setlocale): Update.
	(relocate): Update.
	(O_NOFOLLOW): Update.
	(ISSLASH): Update.
	(DIRECTORY_SEPARATOR): Update.
	(getc): Update.
	(volatile): Update.
	(get_charset_aliases): Update.
	(struct table_entry): Update.
	(alias_table_defined): Update.
	(locale_table_defined): Update.
	(locale_charset): Update.
	(if): Update.
	* import/localcharset.h: Update.
	* import/localtime-buffer.c: New file.
	* import/localtime-buffer.h: New file.
	* import/lstat.c (rpl_lstat): Update.
	* import/m4/00gnulib.m4: Update.
	* import/m4/__inline.m4: New file.
	* import/m4/absolute-header.m4: Update.
	* import/m4/alloca.m4: Update.
	* import/m4/arpa_inet_h.m4: Update.
	* import/m4/builtin-expect.m4: New file.
	* import/m4/canonicalize.m4: Update.
	* import/m4/chdir-long.m4: Update.
	* import/m4/close.m4: Update.
	* import/m4/closedir.m4: Update.
	* import/m4/codeset.m4: Update.
	* import/m4/configmake.m4: Remove.
	* import/m4/d-ino.m4: Update.
	* import/m4/d-type.m4: Update.
	* import/m4/dirent_h.m4: Update.
	* import/m4/dirfd.m4: Update.
	* import/m4/dirname.m4: Update.
	* import/m4/double-slash-root.m4: Update.
	* import/m4/dup.m4: Update.
	* import/m4/dup2.m4: Update.
	* import/m4/eealloc.m4: Update.
	* import/m4/environ.m4: Update.
	* import/m4/errno_h.m4: Update.
	* import/m4/error.m4: Update.
	* import/m4/exponentd.m4: Update.
	* import/m4/exponentl.m4: Update.
	* import/m4/extensions.m4: Update.
	* import/m4/extern-inline.m4: Update.
	* import/m4/fchdir.m4: Update.
	* import/m4/fcntl-o.m4: Update.
	* import/m4/fcntl.m4: Update.
	* import/m4/fcntl_h.m4: Update.
	* import/m4/fdopendir.m4: Update.
	* import/m4/filenamecat.m4: Update.
	* import/m4/flexmember.m4: Update.
	* import/m4/float_h.m4: Update.
	* import/m4/fnmatch.m4: Update.
	* import/m4/fnmatch_h.m4: New file.
	* import/m4/fpieee.m4: Update.
	* import/m4/frexp.m4: Update.
	* import/m4/frexpl.m4: Update.
	* import/m4/fstat.m4: Update.
	* import/m4/fstatat.m4: Update.
	* import/m4/getcwd-abort-bug.m4: Update.
	* import/m4/getcwd-path-max.m4: Update.
	* import/m4/getcwd.m4: Update.
	* import/m4/getdtablesize.m4: Update.
	* import/m4/getlogin.m4: New file.
	* import/m4/getlogin_r.m4: Update.
	* import/m4/getpagesize.m4: New file.
	* import/m4/getprogname.m4: Update.
	* import/m4/gettimeofday.m4: Update.
	* import/m4/glibc21.m4: Remove.
	* import/m4/glob.m4: Update.
	* import/m4/glob_h.m4: New file.
	* import/m4/gnulib-cache.m4: Update.
	* import/m4/gnulib-common.m4: Update.
	* import/m4/gnulib-comp.m4: Update.
	* import/m4/gnulib-tool.m4: Update.
	* import/m4/hard-locale.m4: Remove.
	* import/m4/host-cpu-c-abi.m4: New file.
	* import/m4/include_next.m4: Update.
	* import/m4/inet_ntop.m4: Update.
	* import/m4/inttypes-pri.m4: Update.
	* import/m4/inttypes.m4: Update.
	* import/m4/isnand.m4: Update.
	* import/m4/isnanl.m4: Update.
	* import/m4/largefile.m4: Update.
	* import/m4/lib-ld.m4: Update.
	* import/m4/lib-link.m4: Update.
	* import/m4/lib-prefix.m4: Update.
	* import/m4/limits-h.m4: Update.
	* import/m4/localcharset.m4: Update.
	* import/m4/locale-fr.m4: Update.
	* import/m4/locale-ja.m4: Update.
	* import/m4/locale-zh.m4: Update.
	* import/m4/localtime-buffer.m4: New file.
	* import/m4/lock.m4: Update.
	* import/m4/longlong.m4: Update.
	* import/m4/lstat.m4: Update.
	* import/m4/malloc.m4: Update.
	* import/m4/malloca.m4: Update.
	* import/m4/math_h.m4: Update.
	* import/m4/mbrtowc.m4: Update.
	* import/m4/mbsinit.m4: Update.
	* import/m4/mbsrtowcs.m4: Update.
	* import/m4/mbstate_t.m4: Update.
	* import/m4/memchr.m4: Update.
	* import/m4/memmem.m4: Update.
	* import/m4/mempcpy.m4: Update.
	* import/m4/memrchr.m4: Update.
	* import/m4/mkdir.m4: Update.
	* import/m4/mkdtemp.m4: Update.
	* import/m4/mkostemp.m4: Update.
	* import/m4/mmap-anon.m4: Update.
	* import/m4/mode_t.m4: Update.
	* import/m4/msvc-inval.m4: Update.
	* import/m4/msvc-nothrow.m4: Update.
	* import/m4/multiarch.m4: Update.
	* import/m4/netinet_in_h.m4: Update.
	* import/m4/nocrash.m4: Update.
	* import/m4/off_t.m4: Update.
	* import/m4/onceonly.m4: Remove.
	* import/m4/open-cloexec.m4: New file.
	* import/m4/open-slash.m4: New file.
	* import/m4/open.m4: Update.
	* import/m4/openat.m4: Update.
	* import/m4/opendir.m4: Update.
	* import/m4/pathmax.m4: Update.
	* import/m4/pthread_rwlock_rdlock.m4: New file.
	* import/m4/rawmemchr.m4: Update.
	* import/m4/readdir.m4: Update.
	* import/m4/readlink.m4: Update.
	* import/m4/realloc.m4: Update.
	* import/m4/rename.m4: Update.
	* import/m4/rewinddir.m4: Update.
	* import/m4/rmdir.m4: Update.
	* import/m4/save-cwd.m4: Update.
	* import/m4/secure_getenv.m4: Remove.
	* import/m4/setenv.m4: Update.
	* import/m4/signal_h.m4: Update.
	* import/m4/socklen.m4: Update.
	* import/m4/sockpfaf.m4: Update.
	* import/m4/ssize_t.m4: Update.
	* import/m4/stat-time.m4: New file.
	* import/m4/stat.m4: Update.
	* import/m4/std-gnu11.m4: New file.
	* import/m4/stdalign.m4: Update.
	* import/m4/stdbool.m4: Update.
	* import/m4/stddef_h.m4: Update.
	* import/m4/stdint.m4: Update.
	* import/m4/stdio_h.m4: Update.
	* import/m4/stdlib_h.m4: Update.
	* import/m4/strchrnul.m4: Update.
	* import/m4/strdup.m4: Update.
	* import/m4/strerror.m4: Update.
	* import/m4/strerror_r.m4: Update.
	* import/m4/string_h.m4: Update.
	* import/m4/strstr.m4: Update.
	* import/m4/strtok_r.m4: Update.
	* import/m4/sys_socket_h.m4: Update.
	* import/m4/sys_stat_h.m4: Update.
	* import/m4/sys_time_h.m4: Update.
	* import/m4/sys_types_h.m4: Update.
	* import/m4/sys_uio_h.m4: Update.
	* import/m4/tempname.m4: Update.
	* import/m4/threadlib.m4: Update.
	* import/m4/time_h.m4: Update.
	* import/m4/time_r.m4: Update.
	* import/m4/unistd-safer.m4: Update.
	* import/m4/unistd_h.m4: Update.
	* import/m4/warn-on-use.m4: Update.
	* import/m4/wchar_h.m4: Update.
	* import/m4/wchar_t.m4: Update.
	* import/m4/wctype_h.m4: Update.
	* import/m4/wint_t.m4: Update.
	* import/malloc.c: Update.
	* import/malloc/scratch_buffer.h: New file.
	* import/malloc/scratch_buffer_grow.c: New file.
	* import/malloc/scratch_buffer_grow_preserve.c: New file.
	* import/malloc/scratch_buffer_set_array_size.c: New file.
	* import/malloca.c (MAGIC_NUMBER): Update.
	(MAGIC_SIZE): Update.
	(struct preliminary_header): Update.
	(HEADER_SIZE): Update.
	(union header): Update.
	(verify): Update.
	(HASH_TABLE_SIZE): Update.
	(freea): Update.
	* import/malloca.h (malloca): Update.
	(nmalloca): Update.
	* import/malloca.valgrind: Remove.
	* import/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Update.
	(func): Update.
	(rpl_func): Update.
	(f): Update.
	(d): Update.
	(l): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_WARN_ON_USE_ATTRIBUTE): Update.
	(FP_ILOGB0): Update.
	(FP_ILOGBNAN): Update.
	(acosf): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(asinf): Update.
	(atanf): Update.
	(atan2f): Update.
	(cosf): Update.
	(coshf): Update.
	(expf): Update.
	(expl): Update.
	(expm1l): Update.
	(ilogbl): Update.
	(rintl): Update.
	(sinf): Update.
	(sinhf): Update.
	(sqrtf): Update.
	(tanf): Update.
	(tanhf): Update.
	(isfinite): Update.
	(isinf): Update.
	(isnan): Update.
	(GNULIB_defined_signbit): Update.
	(signbit): Update.
	* import/mbrtowc.c (FALLTHROUGH): Update.
	(locale_enc): Update.
	(locale_enc_cached): Update.
	(gl_lock_define_initialized): Update.
	(mbrtowc): Update.
	* import/mbsinit.c (if): Update.
	(mbsinit): Update.
	* import/mbsrtowcs-impl.h: Update.
	* import/mbsrtowcs-state.c: Update.
	* import/mbsrtowcs.c: Update.
	* import/memchr.c: Update.
	* import/memchr.valgrind: Update.
	* import/memmem.c (__builtin_expect): Update.
	* import/mempcpy.c: Update.
	* import/memrchr.c (__memrchr): Update.
	* import/mkdir.c (if): Update.
	* import/mkdtemp.c: Update.
	* import/mkostemp.c: Update.
	* import/msvc-inval.c: Update.
	* import/msvc-inval.h: Update.
	* import/msvc-nothrow.c: Update.
	* import/msvc-nothrow.h (if): Update.
	* import/netinet_in.in.h: Update.
	* import/open.c (open): Update.
	(if): Update.
	* import/openat-die.c: Update.
	* import/openat-priv.h: Update.
	* import/openat-proc.c: Update.
	* import/openat.c (rpl_openat): Update.
	* import/openat.h: Update.
	* import/opendir.c: Update.
	* import/pathmax.h (if): Update.
	* import/pipe-safer.c: Update.
	* import/rawmemchr.c: Update.
	* import/rawmemchr.valgrind: Update.
	* import/readdir.c (readdir): Update.
	* import/readlink.c: Update.
	* import/realloc.c: Update.
	* import/ref-add.sin: Remove.
	* import/ref-del.sin: Remove.
	* import/rename.c (if): Update.
	* import/rewinddir.c: Update.
	* import/rmdir.c: Update.
	* import/same-inode.h (SAME_INODE): Update.
	* import/save-cwd.c (save_cwd): Update.
	* import/save-cwd.h: Update.
	* import/scratch_buffer.h: New file.
	* import/secure_getenv.c: Remove.
	* import/setenv.c: Update.
	* import/signal.in.h: Update.
	* import/stat-time.c: New file.
	* import/stat-time.h: New file.
	* import/stat-w32.c: New file.
	* import/stat-w32.h: New file.
	* import/stat.c (if): Update.
	(stat): Update.
	(REPLACE_FUNC_STAT_DIR): Update.
	(WINDOWS_NATIVE): Update.
	(WIN32_LEAN_AND_MEAN): Update.
	(is_unc_root): Update.
	(rpl_stat): Update.
	* import/stdalign.in.h (elif): Update.
	* import/stdbool.in.h: Update.
	* import/stddef.in.h (_GL_STDDEF_ALIGNAS): Update.
	(max_align_t): Update.
	(GNULIB_defined_max_align_t): Update.
	* import/stdint.in.h (WINT_MIN): Update.
	(WINT_MAX): Update.
	(_STDINT_MIN): Update.
	(_STDINT_UNSIGNED_MIN): Update.
	(_STDINT_SIGNED_MIN): Update.
	(PTRDIFF_MIN): Update.
	(SIG_ATOMIC_MIN): Update.
	(WCHAR_MIN): Update.
	* import/stdio.in.h (if): Update.
	* import/stdlib.in.h (if): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_FUNCDECL_SYS): Update.
	(random): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(srandom): Update.
	(initstate): Update.
	(setstate): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(GNULIB_defined_strtod_function): Update.
	(strtold): Update.
	(GNULIB_defined_strtold_function): Update.
	* import/str-two-way.h: Update.
	* import/strchrnul.c: Update.
	* import/strchrnul.valgrind: Update.
	* import/strdup.c: Update.
	* import/streq.h: Update.
	* import/strerror-override.c: Update.
	* import/strerror-override.h: Update.
	* import/strerror.c (strerror): Update.
	* import/strerror_r.c (safe_copy): Update.
	* import/string.in.h (_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/stripslash.c: Update.
	* import/strnlen1.c: Update.
	* import/strnlen1.h: Update.
	* import/strstr.c (__builtin_expect): Update.
	* import/strtok_r.c: Update.
	* import/sys_socket.in.h (CMSG_SPACE): Update.
	(CMSG_LEN): Update.
	(struct sockaddr_storage): Update.
	(SO_REUSEPORT): Update.
	(_GL_WARN_ON_USE): Update.
	* import/sys_stat.in.h (if): Update.
	(stat): Update.
	(struct stat): Update.
	(st_atime): Update.
	(st_mtime): Update.
	(st_ctime): Update.
	(_GL_WINDOWS_STAT_TIMESPEC): Update.
	(GNULIB_defined_struct_stat): Update.
	(_S_IFBLK): Update.
	(_S_IFLNK): Update.
	(_S_IFSOCK): Update.
	(fstat): Update.
	(fstatat): Update.
	(lstat): Update.
	(stat64): Update.
	(_stat64): Update.
	(_stat32i64): Update.
	(_stati64): Update.
	(_stat32): Update.
	(_stat64i32): Update.
	* import/sys_time.in.h: Update.
	* import/sys_types.in.h (dev_t): Update.
	(GNULIB_defined_dev_t): Update.
	(ino_t): Update.
	(GNULIB_defined_ino_t): Update.
	(_GL_WINDOWS_STAT_INODES): Update.
	(if): Update.
	* import/sys_uio.in.h: Update.
	* import/tempname.c (__secure_getenv): Update.
	(try_nocreate): Update.
	* import/tempname.h: Update.
	* import/time.in.h (tzset): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(ctime): Update.
	(strftime): Update.
	* import/time_r.c: Update.
	* import/unistd--.h: Update.
	* import/unistd-safer.h: Update.
	* import/unistd.in.h (if): Update.
	(elif): Update.
	(__need_getopt): Update.
	(access): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_FUNCDECL_SYS): Update.
	(__declspec): Update.
	(_GL_WARN_ON_USE_ATTRIBUTE): Update.
	(faccessat): Update.
	(getpass): Update.
	(truncate): Update.
	* import/unsetenv.c: Update.
	* import/verify.h (if): Update.
	(_GL_HAVE__STATIC_ASSERT): Update.
	(_GL_HAVE_STATIC_ASSERT): Update.
	(_GL_HAVE__STATIC_ASSERT1): Update.
	(_GL_HAVE_STATIC_ASSERT1): Update.
	(_GL_VERIFY): Update.
	(_Static_assert): Update.
	(_GL_HAS_BUILTIN_TRAP): Update.
	(_GL_HAS_BUILTIN_UNREACHABLE): Update.
	(verify_true): Update.
	(verify): Update.
	(__has_builtin): Update.
	(elif): Update.
	(assume): Update.
	* import/warn-on-use.h: Rename from import/extra/snippet/warn-on-use.h.
	* import/wchar.in.h (if): Update.
	(wcsftime): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/wctype.in.h (rpl_iswalnum): Update.
	(rpl_iswalpha): Update.
	(rpl_iswblank): Update.
	(rpl_iswcntrl): Update.
	(rpl_iswdigit): Update.
	(rpl_iswgraph): Update.
	(rpl_iswlower): Update.
	(rpl_iswprint): Update.
	(rpl_iswpunct): Update.
	(rpl_iswspace): Update.
	(rpl_iswupper): Update.
	(rpl_iswxdigit): Update.
	(rpl_towlower): Update.
	(rpl_towupper): Update.
	(iswalnum): Update.
	(iswalpha): Update.
	(iswblank): Update.
	(iswcntrl): Update.
	(iswdigit): Update.
	(iswgraph): Update.
	(iswlower): Update.
	(iswprint): Update.
	(iswpunct): Update.
	(iswspace): Update.
	(iswupper): Update.
	(iswxdigit): Update.
	(towlower): Update.
	(towupper): Update.
	* import/windows-initguard.h: New file.
	* import/windows-mutex.c: New file.
	* import/windows-mutex.h: New file.
	* import/windows-once.c: New file.
	* import/windows-once.h: New file.
	* import/windows-recmutex.c: New file.
	* import/windows-recmutex.h: New file.
	* import/windows-rwlock.c: New file.
	* import/windows-rwlock.h: New file.
	* import/xalloc-oversized.h: New file.
	* patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch: Remove.
	* patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch: Remove.
	* patches/0003-Fix-glob-c-Coverity-issues.patch: Remove.
	* update-gnulib.sh: Update to latest gnulib and don't apply patches
	anymore.  Also updates the patch -p flag to the current directory structure in
	case patches are needed again in the future.

Change-Id: I9c2b07a3046baecfb664e21b2644353ea888dbfa
2019-12-16 12:20:50 -06:00
Alan Modra
f81e7e2db6 ubsan: aarch64: left shift of negative value
* aarch64-dis.c (sign_extend): Return uint64_t.  Rewrite without
	conditional.
	(aarch64_ext_imm): Avoid signed overflow.
2019-12-16 17:35:13 +10:30
Alan Modra
488d02fe77 ubsan: microblaze: left shift cannot be represented in type 'int'
* microblaze-dis.c (read_insn_microblaze): Avoid signed overflow.
2019-12-16 17:35:13 +10:30
Alan Modra
8a92faab92 ubsan: nios2: left shift cannot be represented in type 'int'
* nios2-dis.c (nios2_print_insn_arg): Avoid signed overflow
2019-12-16 17:35:13 +10:30
Alan Modra
e6ced26afd ubsan: xstormy16: left shift of negative value
cpu/
	* xstormy16.cpu (f-rel12a): Avoid signed overflow.
opcodes/
	* xstormy16-ibld.c: Regenerate.
2019-12-16 17:35:13 +10:30
Alan Modra
84e098cdea asan: score: global-buffer-overflow
I'm flying blind here, not having an s+core s3 insn set reference,
but this seems reasonably obvious from what is done by the assembler.
s3_do16_rpop does some mixing of imm and reg values to place in the
rpop reg field, but I'm not going to try to fix the disassembly
there.

	* score-dis.c (print_insn_score16): Move rpush/rpop imm field
	value adjustment so that it doesn't affect reg field too.
2019-12-16 17:34:29 +10:30
Alan Modra
36bd8ea7f0 ubsan: crx: left shift cannot be represented in type 'int'
The ubsan complaint is fixed by the SBM change, with similar possible
complaints fixed by the EXTRACT change.  The rest is just cleanup.

include/
	* opcode/crx.h (inst <match>): Make unsigned int.
opcodes/
	* crx-dis.c (EXTRACT, SBM): Avoid signed overflow.
	(get_number_of_operands, getargtype, getbits, getregname),
	(getcopregname, getprocregname, gettrapstring, getcinvstring),
	(getregliststring, get_word_at_PC, get_words_at_PC, build_mask),
	(powerof2, match_opcode, make_instruction, print_arguments),
	(print_arg): Delete forward declarations, moving static to..
	(getregname, getcopregname, getregliststring): ..these definitions.
	(build_mask): Return unsigned int mask.
	(match_opcode): Use unsigned int vars.
2019-12-16 17:33:53 +10:30
Alan Modra
cedfc77485 ubsan: bfin: left shift of negative value
* bfin-dis.c (fmtconst, fmtconst_val): Avoid signed overflow.
2019-12-16 17:33:53 +10:30
Alan Modra
4bdb25fe69 ubsan: nds32: left shift cannot be represented in type 'int'
Note that using 1u in N32_BIT makes all of N32_BIT, __MASK, __MF, __GF
and __SEXT evaluate as unsigned int (the latter three when when their
v arg is int or smaller).  This would be a problem if assigning the
result to a bfd_vma, long, or other type wider than an int since the
__SEXT result would be zero extended to the wider type.  Fortunately
nds32 target code doesn't use wider types unnecessarily.

include/
	* opcode/nds32.h (N32_BIT): Define using 1u.
	(__SEXT): Use __MASK and N32_BIT.
	(N32_IMMS): Remove duplicate mask.
opcodes/
	* nds32-dis.c (print_insn16, print_insn32): Remove forward decls.
	(struct objdump_disasm_info): Delete.
	(nds32_parse_audio_ext, nds32_parse_opcode): Cast result of
	N32_IMMS to unsigned before shifting left.
2019-12-16 17:33:53 +10:30
Alan Modra
cf950fd4dd ubsan: moxie: left shift of negative value
Commit 8c9b417187 didn't remove a glaring left shift of a number
that had just been sign extended.

	* moxie-dis.c (INST2OFFSET): Don't left shift a signed value.
	(print_insn_moxie): Remove unnecessary cast.
2019-12-16 17:28:52 +10:30
Christian Biesinger
d3ecddab5f Use a member function to set a symbol's language
This removes symbol_set_language and SYMBOL_SET_LANGUAGE in favor of
a new function general_symbol_info::set_language. symbol and minimal_symbol
already inherit from that struct so this works naturally.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-exp.y (write_ambiguous_var): Update.
	* coffread.c (process_coff_symbol): Update.
	* ctfread.c (ctf_add_enum_member_cb): Update.
	(new_symbol): Update.
	* dwarf2read.c (fixup_go_packaging): Update.
	(new_symbol): Update.
	* language.c (language_alloc_type_symbol): Update.
	* mdebugread.c (new_symbol): Update.
	* minsyms.c (minimal_symbol_reader::record_full): Update.
	* psymtab.c (add_psymbol_to_bcache): Update.
	* stabsread.c (define_symbol): Update.
	(read_enum_type): Update.
	* symtab.c (symbol_set_language): Make this a member function...
	(general_symbol_info::set_language): ... here.
	* symtab.h (struct general_symbol_info) <set_language>: New function.
	(SYMBOL_SET_LANGUAGE): Remove.
	(symbol_set_language): Remove.

Change-Id: Ideafb6c384004b9adef793a1192735c501da41d5
2019-12-16 00:44:58 -06:00
Christian Biesinger
c1b5c1ebc9 Use an accessor function for general_symbol_info::language
Also renames the member variable to m_language to make code easier to read
when more functions become member functions.

I was originally hoping to eventually make m_language private (after a few
more patches), but unfortunately then it no longer counts as a POD type,
which means gdbsupport/poison.h won't let us use memset to initialize
this type, which psymtabs rely on to clear padding bytes so that bcache
can work properly.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-lang.c (ada_add_block_symbols): Update.
	(ada_collect_symbol_completion_matches): Update.
	* ax-gdb.c (gen_expr): Update.
	* block.c (block_lookup_symbol): Update.
	(block_lookup_symbol_primary): Update.
	(block_find_symbol): Update.
	* cp-namespace.c (cp_lookup_symbol_imports_or_template): Update.
	* dbxread.c (process_one_symbol): Update.
	* dictionary.c (insert_symbol_hashed): Update.
	(collate_pending_symbols_by_language): Update.
	(mdict_add_symbol): Update.
	* dwarf-index-write.c (write_psymbols): Update.
	* dwarf2read.c (fixup_go_packaging): Update.
	* findvar.c (read_var_value): Update.
	* ft32-tdep.c (ft32_skip_prologue): Update.
	* go-lang.c (go_symbol_package_name): Update.
	* language.h (scoped_switch_to_sym_language_if_auto::
	scoped_switch_to_sym_language_if_auto): Update.
	* linespec.c (find_method): Update.
	(find_label_symbols_in_block): Update.
	* mdebugread.c (parse_symbol): Update.
	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
	* minsyms.c (add_minsym_to_demangled_hash_table): Update.
	(minimal_symbol_reader::install): Update.
	* moxie-tdep.c (moxie_skip_prologue): Update.
	* parse.c (parse_exp_in_context): Update.
	* psymtab.c (psymbol_name_matches): Update.
	(match_partial_symbol): Update.
	(lookup_partial_symbol): Update.
	(psymbol_hash): Update.
	(psymbol_compare): Update.
	* python/py-framefilter.c (extract_sym): Update.
	(py_print_single_arg): Update.
	* stabsread.c (define_symbol): Update.
	* stack.c (print_frame_arg): Update.
	(find_frame_funname): Update.
	(info_frame_command_core): Update.
	* symfile.c (set_initial_language): Update.
	* symtab.c (symbol_set_demangled_name): Update.
	(symbol_get_demangled_name): Update.
	(symbol_set_language): Update.
	(symbol_find_demangled_name): Update.
	(symbol_set_names): Update.
	(general_symbol_info::natural_name): Update.
	(general_symbol_info::demangled_name): Update.
	(general_symbol_info::search_name): Update.
	(symbol_matches_search_name): Update.
	(eq_symbol_entry): Update.
	(iterate_over_symbols): Update.
	(completion_list_add_symbol): Update.
	(completion_list_add_msymbol): Update.
	(completion_list_add_fields): Update.
	* symtab.h (struct general_symbol_info) <language>: New function.
	<language>: Rename to...
	<m_language>: ...this.
	(SYMBOL_LANGUAGE): Remove.
	(MSYMBOL_LANGUAGE): Remove.
	(struct symbol) <ctor>: Update.
	* xstormy16-tdep.c (xstormy16_skip_prologue): Update.

Change-Id: I6464d477457e61639c63ddf8b145e407a35c235a
2019-12-16 00:44:36 -06:00
Christian Biesinger
747cfc8c6b Use symbol_set_language to set a symbol's language
Instead of using SYMBOL_LANGUAGE (sym) = foo.

Having only a single way to set a symbol's language is clearer and this
is also a requirement for making set_language a member function.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-exp.y (write_ambiguous_var): Call symbol_set_language to
	set the language of sym.
	* language.c (language_alloc_type_symbol): Likewise.

Change-Id: I85338ea2e4121155f2da222fe0aa6b7d3ffe26f7
2019-12-16 00:39:50 -06:00
GDB Administrator
0d037fafed Automatic date update in version.in 2019-12-16 00:00:23 +00:00
GDB Administrator
37e61c4631 Automatic date update in version.in 2019-12-15 00:00:52 +00:00
Andrew Burgess
db178f47dd gdb/doc: Remove duplicate description of lookup_global_symbol
In this commit:

  commit 086baaf134
  Date:   Tue Oct 15 16:18:26 2019 +0100

      gdb/python: Introduce gdb.lookup_static_symbols

A duplicate description of gdb.lookup_global_symbol was accidentally
added.  This commit corrects this mistake and removes the duplicate.

gdb/doc/ChangeLog:

	* python.texi (Symbols In Python): Remove duplicate description of
	gdb.lookup_global_symbol.

Change-Id: I4457b42cf05bde39e5c0ff39f168af919cad1255
2019-12-14 23:11:58 +00:00
Anthony Green
fb46334198 Add unlink support to moxie simulator
This change adds support for the unlink system call, which is
required by the GCC testsuite.  It also switches read/write/open
system calls to use the sim_io_* functions.

2019-12-14  Anthony Green  <green@moxielogic.com>

	* interp.c (sim_engine_run): Make use of sim_io_* functions for
	read/write/open system calls.  Implement the unlink system call.
2019-12-14 05:33:39 -05:00
Sergio Durigan Junior
ff8577f649 Guard against 'current_directory == NULL' on gdb_abspath (PR gdb/23613)
Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1728147
Ref.: https://sourceware.org/bugzilla/show_bug.cgi?id=23613

Hi,

This bug has been reported against Fedora GDB, but there's also an
upstream bug.  The problem reported is that GDB segfaults when the
working directory is deleted.  It's pretty use to reproduce it:

  mkdir bla
  cd bla
  rmdir ../bla
  gdb echo

Debugging the problem is a bit tricky, because, since the current
directory doesn't exist anymore, a corefile cannot be saved there.
After a few attempts, I came up with the following:

  gdb -ex 'shell mkdir bla' -ex 'cd bla' -ex 'shell rmdir ../bla' -ex 'r echo' ./gdb/gdb

This assumes that you're inside a build directory which contains
./gdb/gdb, of course.

After investigating it, I found that the problem happens at
gdb_abspath, where we're dereferencing 'current_directory' without
checking if it's NULL:

    ...
    (concat (current_directory,
	     IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
	     ? "" : SLASH_STRING,
    ...

So I fixed the problem with the patch below.  The idea is that, if
'current_directory' is NULL, then the final string returned should be
just the "path".

After fixing the bug, I found a similar one reported against our
bugzilla: PR gdb/23613.  The problem is the same, but the reproducer
is a bit different.

I really tried writing a testcase for this, but unfortunately it's
apparently not possible to start GDB inside a non-existent directory
with DejaGNU.

I regression tested this patch on the BuildBot, and no regressions
were found.

gdb/ChangeLog:
2019-12-14  Sergio Durigan Junior  <sergiodj@redhat.com>

	https://bugzilla.redhat.com/show_bug.cgi?id=1728147
	PR gdb/23613
	* bsd-kvm.c (bsd_kvm_target_open): Use 'gdb_abspath'.
	* corelow.c: Include 'gdbsupport/pathstuff.h'.
	(core_target_open): Use 'gdb_abspath'.
	* gdbsupport/pathstuff.c (gdb_abspath): Guard against
	'current_directory == NULL' case.
	* gdbsupport/pathstuff.h (gdb_abspath): Expand comment and
	explain what happens when 'current_directory' is NULL.
	* go32-nat.c (go32_nat_target::wait): Check if
	'current_directory' is NULL before call to 'chdir'.
	* source.c (add_path): Use 'gdb_abspath'.
	* top.c: Include 'gdbsupport/pathstuff.h'.
	(init_history): Use 'gdb_abspath'.
	(set_history_filename): Likewise.
	* tracefile-tfile.c: Include 'gdbsupport/pathstuff.h'.
	(tfile_target_open): Use 'gdb_abspath'.

Change-Id: Ibb0932fa25bc5c2d3ae4a7f64bd7f32885ca403b
2019-12-13 23:49:29 -05:00
GDB Administrator
e97e2dcd46 Automatic date update in version.in 2019-12-14 00:00:16 +00:00
Christian Biesinger
f1d293cc58 Revert "Turn off threaded minsym demangling by default"
This reverts commit 62e77f56f0.
(except for ChangeLog and a bugfix in minimal_symbol_reader::install)

As agreed on the mailing list, now that GDB 9 has branched, this patch
reverts the change to set worker-threads to zero. After this patch,
multithreaded minsym demangling will be enabled again by default.

gdb/ChangeLog:

2019-12-13  Christian Biesinger  <cbiesinger@google.com>

	* maint.c (n_worker_threads): Default to -1.
	(worker_threads_disabled): Remove function.
	* maint.h (worker_threads_disabled): Remove function.
	* minsyms.c (minimal_symbol_reader::record_full): Don't call
	symbol_set_names here if worker_threads_disabled () is true.

Change-Id: I5ff3e318d96f60968c8b8bedb84546ad2314d94b
2019-12-13 17:44:52 -05:00
Tom Tromey
234c306803 Remove ARI check for multiple calls to warning or error
ARI has a check for multiple calls to warning or error, suggesting
that they be combined into a single call.  This triggers at three
places in gdb -- throw_bad_regnum_error, guile_repl_command, and the
end of value_cast -- and after examining these, I think they all make
sense as-is.  Instead, it makes sense to remove this check from ARI.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove check for multiple calls to
	warning or error.

Change-Id: I0618683623a3c7324460c7b9e5d7f252d88c2e8d
2019-12-13 15:15:32 -07:00
Tom Tromey
93537683e7 Remove "fix" call for "long long" from ARI
ARI has a "fix" call for "long long", but this call is incorrect.
This patch removes it.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove call to "fix" for "long long".

Change-Id: I97bca2dc04b579fcf7c9dba7fe7fd939451bcefa
2019-12-13 15:15:32 -07:00
Tom Tromey
634561834e Accept -Wno- prefix in ARI
This adds -Wno- support to ARI, so that warnings can be disabled
selectively.  I use this to ignore "deprecated" warnings.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Handle -Wno- prefix.

Change-Id: I6919faedf920e857df4f597df66f0ba3943e0eac
2019-12-13 15:15:32 -07:00
Tom Tromey
98f9338a58 Change ARI usage to GNU style
This changes the ARI usage text to use the GNU style for
"metasyntactic variables".

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh (usage): Use GNU style.

Change-Id: Ibe5a867571382d2985d1b8b78dfef3ddd02291ff
2019-12-13 15:15:32 -07:00
Tom Tromey
3cb5a3a16a Suppress ARI warnings for vsprintf
A few spots can validly call vsprintf; this adds ARI markers to
suppress warnings at these places.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* gdbsupport/common-utils.c (string_printf, string_vprintf)
	(string_vappendf): Add ARI comment.

Change-Id: Ia8665aa5d7b7331a3985b18626b19764a264447b
2019-12-13 15:15:31 -07:00
Tom Tromey
c6cbf900d4 Silence ARI warning about floatformat_to_double
This silences ARI at the one spot that is permitted to call
floatformat_to_double, and also removes the corresponding "fix" call
from gdb_ari.sh -- it was incorrect, and now is not needed.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "fix" call for
	floatformat_to_double.
	* target-float.c (host_float_ops<T>::from_target): Add ARI
	comment.

Change-Id: I778a17a04da417c113194004dd7de3b1df381266
2019-12-13 15:15:31 -07:00
Tom Tromey
036003a671 Silence ARI for valid calls to abort
There are a handful of spots in gdb that validly call abort.  This
patch adds the appropriate ARI marker to these lines, to silence the
ARI report.  This also removes the "fix" call for "abort" from
gdb_ari.sh; it was incorrect and now is not needed.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "fix" call for abort.
	* utils.c (abort_with_message, dump_core, internal_vproblem): Add
	ARI marker to abort.
	* event-top.c (handle_sigsegv): Add ARI marker to abort.

Change-Id: I09ce6aa5010bbe4e5bb73ffdb727481be39d34d6
2019-12-13 15:15:31 -07:00
Tom Tromey
8aaaf7577f Fix ARI text for floatformat_from_double
ARI reports the wrong substitution for floatformat_from_double.
"floatformat_from_doublest" was renamed in 2017.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Fix floatformat_from_double text.

Change-Id: Ibf1b194ea509b12ae8bc30ce285c809c96218557
2019-12-13 15:15:31 -07:00
Tom Tromey
fe56157f92 Remove ATTRIBUTE_UNUSED check from ARI
The text for the ATTRIBUTE_UNUSED check in ARI is plainly incorrect
now -- gdb does in fact use ATTRIBUTE_UNUSED, and there's no issue in
doing so, when done properly.

This patch removes this check.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove ATTRIBUTE_UNUSED check.

Change-Id: I13fd8e9b40dbaab3978dbf9b6c4228b62299d944
2019-12-13 15:15:31 -07:00
Tom Tromey
a15a95ed26 Remove "boolean" and "var_boolean" checks from ARI
The "boolean" and "var_boolean" checks from ARI seem only to generate
false reports.

Now that gdb is in C++, at least the "boolean" check seems unlikely to
ever generate a true report.

The "var_boolean" check likewise doesn't seem valuable any more --
presumably this refers to some ancient way of doing things in gdb, and
isn't likely to find a bug in the future.

Therefore, this patch removes these two checks.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "boolean" and "var_boolean"
	checks.

Change-Id: Iaf449b51e8182ffa0b9ed25fe688e0ff64a07a67
2019-12-13 15:15:30 -07:00
Tom Tromey
a5513db2f5 Fix the gdb build with GCC 7
The Solaris buildbot builder complained about some recent patches of
mine.  Building with GCC 7 failed.

This patch fixes the bug.  I'm checking it in.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* gdbsupport/safe-iterator.h (class basic_safe_range) <begin,
	end>: No longer "const".

Change-Id: I5f428fab61087f467ac3b6475f4ef4dbd314fcb0
2019-12-13 11:29:02 -07:00
Simon Marchi
3a90f26667 Fix indentation in jit.c
Many places in this file use spaces only for indentation.  Fix them to
conform to GNU style.

gdb/ChangeLog:

	* jit.c: Fix indentation, replace spaces with tabs where
	applicable.
2019-12-13 10:12:30 -05:00
Jozef Lawrynowicz
b3f4b80fba MSP430: Relax target glob for configuring GDB
This enables support for the msp430-elfbare target being added to GCC.

gdb/ChangeLog:

2019-12-13  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* configure.tgt: Match msp430-*-elf* targets when configuring GDB.
2019-12-13 13:46:32 +00:00
Alan Modra
0bc3450e22 Set no file contents PT_LOAD p_offset to first page
PR 25237
	* elf.c (assign_file_positions_for_load_sections): Attempt to
	keep meaningless p_offset for PT_LOAD segments without file
	contents within file size.
2019-12-13 21:23:15 +10:30
GDB Administrator
c7ff3609c1 Automatic date update in version.in 2019-12-13 00:00:24 +00:00
Tom Tromey
e671856cb8 Change objfile::partial_symtabs to be a unique_ptr
A plan I had a while ago was to write the DWARF index in a worker
thread.  This is why objfile::partial_symtabs is a shared_ptr.

However, it turned out that doing this required keeping the objfile
alive as well.  Now that objfiles are managed using shared_ptr,
there's no need for partial_symtabs to be one as well, so this patch
reverts that change.

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

	* objfiles.h (struct objfile) <partial_symtabs>: Now a
	unique_ptr.

Change-Id: I3d7831006c40d4c8f3173ba51c0c1b0a32021ae5
2019-12-12 15:50:57 -07:00
Tom Tromey
7d7167ce1b Manage objfiles with shared_ptr
This changes objfiles to be managed using a shared_ptr.  shared_ptr is
chosen because it enables the use of objfiles in background threads.

The simplest way to do this was to introduce a new iterator that will
return the underlying objfile, rather than a shared_ptr.  (I also
tried changing the rest of gdb to use shared_ptr, but this was quite
large; and to using intrusive reference counting, but this also was
tricky.)

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

	* progspace.h (objfile_list): New typedef.
	(class unwrapping_objfile_iterator)
	(struct unwrapping_objfile_range): Newl
	(struct program_space) <objfiles_range>: Change type.
	<objfiles>: Change return type.
	<add_objfile>: Change type of "objfile" parameter.
	<objfiles_list>: Now a list of shared_ptr.
	* progspace.c (program_space::add_objfile): Change type of
	"objfile".  Update.
	(program_space::remove_objfile): Update.
	* objfiles.h (struct objfile) <~objfile>: Make public.
	* objfiles.c (objfile::make): Update.
	(objfile::unlink): Don't call delete.

Change-Id: I6fb7fbf06efb7cb7474c525908365863eae27eb3
2019-12-12 15:50:56 -07:00
Tom Tromey
343cc95202 Move free_all_objfiles to program_space
This changes free_all_objfiles to be a method on program_space, in
line with the other changes to treat program_space as a container for
objfiles.

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

	* symfile.c (symbol_file_clear): Update.
	* progspace.h (struct program_space) <free_all_objfiles>: Declare
	method.
	* progspace.c (program_space::free_all_objfiles): New method.
	* objfiles.h (free_all_objfiles): Don't declare.
	* objfiles.c (free_all_objfiles): Move to program_space.

Change-Id: I908b549d2981b6005f7ca181fc0e6d24fc8b7b6f
2019-12-12 15:50:56 -07:00
Tom Tromey
d0801dd8f2 Store objfiles on a std::list
This removes objfile::next and changes objfiles to be stored in a
std::list.

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

	* progspace.c (program_space::add_objfile)
	(program_space::remove_objfile): Update.
	(program_space::multi_objfile_p): Remove.
	* objfiles.h (struct objfile) <next>: Remove.
	* objfiles.c (objfile::objfile): Update.
	(put_objfile_before): Update.
	(unlink_objfile): Update.
	* progspace.h (object_files): Remove.
	(struct program_space) <objfiles_head>: Remove.
	<objfiles_list>: New member.
	<objfiles_range, objfiles_safe_range>: Change type.
	(objfiles): Change return type.
	(objfiles_safe): Update.
	(multi_objfile_p): Rewrite and inline.
	(object_files): Remove macro.

Change-Id: Ib4430e3db6f9a390399924379a5c10426c514853
2019-12-12 15:50:55 -07:00
Tom Tromey
13bff72615 Introduce basic_safe_range
This introduces the basic_safe_range class, which can be used to
create a basic_safe_iterator.  This also changes basic_safe_iterator
in two ways.

First, it simplifies the constructor.  This seemed unnecessarily
complicated to me, and keeping it this way would prevent the second
change...

... which is to add a second constructor for initializing the
one-past-the-end iterator that is stored in basic_safe_iterator.

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

	* gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify.  Add
	second constructor.
	(basic_safe_range): New class.

Change-Id: Ib351ef6fd435129a5053c64e5561877e1459ab37
2019-12-12 15:50:54 -07:00
Tom Tromey
deeafabb67 Remove MULTI_OBJFILE_P
This removes the MULTI_OBJFILE_P macro in favor of a method on the
program space.

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

	* progspace.c (program_space::multi_objfile_p): New method.
	* printcmd.c (info_symbol_command): Update.
	* maint.c (maintenance_translate_address): Update.
	* objfiles.h (MULTI_OBJFILE_P): Remove.
	* progspace.h (struct program_space) <multi_objfile_p>: New
	method.

Change-Id: I2779e26ea8909078d63fea8f13bce94cab73948c
2019-12-12 15:50:53 -07:00
Tom Tromey
234529260a Introduce program_space::remove_objfile
This introduces a new method, program_space::remove_objfile, and
changes the objfile destructor not to unlink an objfile from the
program space's list.

This is cleaner because, like the previous patch, it treats the
program space more like a container for objfiles.  Also, this makes it
possible to keep an objfile alive even though it has been unlinked
from the program space's list, which is important for processing in a
worker thread.

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

	* progspace.h (struct program_space) <remove_objfile>: Declare.
	* progspace.c (program_space::remove_objfile): New method.
	* objfiles.c (unlink_objfile): Remove.
	(objfile::unlink): Call remove_objfile.
	(objfile): Don't call unlink_objfile.

Change-Id: I22f768827723dce21886fae9b3664532c8349e68
2019-12-12 15:50:53 -07:00
Tom Tromey
7cac64af7b Introduce program_space::add_objfile
This introduces a new method, program_space::add_objfile, that adds an
objfile to the program space's list of objfiles.  It also changes the
obfile's constructor so that linking an objfile into this list is not
done here.

The former is an improvement because it makes more sense to treat the
program space as a container holding objfiles -- so manipulation of
the list belongs there.

The latter is not strictly needed, but seemed better both because it
is removing a global side effect from a constructor, and for symmetry
reasons, as a subsequent patch will remove unlinking from the
destructor.

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

	* progspace.h (struct program_space) <add_objfile>: Declare
	method.
	* progspace.c (program_space::add_objfile): New method.
	* objfiles.c (~objfile): Don't unlink objfile.
	(put_objfile_before): Remove.
	(add_separate_debug_objfile): Don't call put_objfile_before.
	(objfile::make): Call add_objfile.  Set new_objfiles_available on
	the per-program-space data.

Change-Id: I93e8525dda631cb89dcc2046a5c51c7c9f34ccfd
2019-12-12 15:50:52 -07:00
Tom Tromey
268e4f0914 Make the objfile destructor private
The idea behind this is that, in the long run, some code will need to
be able to hold onto an objfile after it is unlinked from the program
space.  In particular, this is needed for some functionality to be
moved to worker threads -- otherwise the objfile can be deleted while
still in use.

So, this makes ~objfile private, replacing it with an "unlink" method,
making it more obvious which operation is intended at the calling
points.

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

	* symfile.c (syms_from_objfile_1): Use objfile_up.
	(syms_from_objfile_1, remove_symbol_file_command): Call unlink
	method.
	(reread_symbols): Use objfile_up.
	* solib.c (update_solib_list, reload_shared_libraries_1): Call
	unlink method.
	* objfiles.h (struct objfile) <~objfile>: Now private.
	<unlink>: New method.
	(struct objfile_deleter): New.
	(objfile_up): New typedef.
	* objfiles.c (objfile::unlink): New method.
	(free_objfile_separate_debug, free_all_objfiles)
	(objfile_purge_solibs): Use it.
	* jit.c (jit_unregister_code): Remove.
	(jit_inferior_exit_hook, jit_event_handler): Call unlink on
	objfile.
	* compile/compile-object-run.c (do_module_cleanup): Call unlink on
	objfile.
	* compile/compile-object-load.c (compile_object_load): Use
	objfile_up.

Change-Id: I934bee70b26b8b24e1735828fb1e60fe8a05714f
2019-12-12 15:50:52 -07:00
Tom Tromey
f65fe5704a Make add_separate_debug_objfile static
This changes objfile::make to take a "parent" parameter, and makes
add_separate_debug_objfile static.

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

	* symfile.c (symbol_file_add_with_addrs): Pass "parent" to
	objfile::make.
	* objfiles.h (struct objjfile) <make>: No longer inline.
	(add_separate_debug_objfile): Don't declare.
	* objfiles.c (add_separate_debug_objfile): Now static.
	(objfile::make): Move from objfiles.h.  Call
	add_separate_debug_objfile.  Add "parent" parameter.

Change-Id: I631f43bb71738dea6ae0697317bf8ef4a0db4617
2019-12-12 15:50:51 -07:00
Tom Tromey
bda13cdcf0 Make the objfile constructor private
This changes the objfile constructor to be private, changing the
callers to use a factory method.  This isn't perhaps strictly needed
for the goal of this series -- changing the container model of
objfiles -- but is a nice symmetry.

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

	* symfile.c (symbol_file_add_with_addrs): Use objfile::make.
	* objfiles.h (struct objfile): Make constructor private.
	<make>: New static method.
	* jit.c (jit_object_close_impl): Update.

Change-Id: I42e07bc80a88cf3322ace94ffe869ae5788bcb29
2019-12-12 15:50:50 -07:00
H.J. Lu
ac0ab1842d i386: Also check R12-R15 registers when optimizing testq to testb
Similar to SP, BP, SI and DI registers, R12-R15 registers must use REX
prefix for the low byte register when optimizing

test $imm7, %r64/%r32/%r16 -> test $imm7, %r8

	PR gas/25274
	* config/tc-i386.c (optimize_encoding): Also check R12-R15
	registers for "test $imm7, %r64/%r32/%r16 -> test $imm7, %r8"
	optimization.
	* testsuite/gas/i386/x86-64-optimize-3.s: Add tests for test
	with r12.
	* testsuite/gas/i386/x86-64-optimize-3.d: Updated.
	* testsuite/gas/i386/x86-64-optimize-3b.d: Likewise.
2019-12-12 12:31:26 -08:00
H.J. Lu
8493b6651a i386: Add tests for -malign-branch-boundary and -malign-branch
Add tests for -malign-branch-boundary, -malign-branch and
-mbranches-within-32B-boundaries.

gas/

	* testsuite/gas/i386/align-branch-1.s: New file.
	* testsuite/gas/i386/align-branch-1a.d: Likewise.
	* testsuite/gas/i386/align-branch-1b.d: Likewise.
	* testsuite/gas/i386/align-branch-1c.d: Likewise.
	* testsuite/gas/i386/align-branch-1d.d: Likewise.
	* testsuite/gas/i386/align-branch-1e.d: Likewise.
	* testsuite/gas/i386/align-branch-1f.d: Likewise.
	* testsuite/gas/i386/align-branch-1g.d: Likewise.
	* testsuite/gas/i386/align-branch-1h.d: Likewise.
	* testsuite/gas/i386/align-branch-2.s: Likewise.
	* testsuite/gas/i386/align-branch-2a.d: Likewise.
	* testsuite/gas/i386/align-branch-2b.d: Likewise.
	* testsuite/gas/i386/align-branch-2c.d: Likewise.
	* testsuite/gas/i386/align-branch-3.d: Likewise.
	* testsuite/gas/i386/align-branch-3.s: Likewise.
	* testsuite/gas/i386/align-branch-4.s: Likewise.
	* testsuite/gas/i386/align-branch-4a.d: Likewise.
	* testsuite/gas/i386/align-branch-4b.d: Likewise.
	* testsuite/gas/i386/align-branch-5.d: Likewise.
	* testsuite/gas/i386/align-branch-5.s: Likewise.
	* testsuite/gas/i386/align-branch-6.d: Likewise.
	* testsuite/gas/i386/align-branch-6.s: Likewise.
	* testsuite/gas/i386/align-branch-7.d: Likewise.
	* testsuite/gas/i386/align-branch-7.s: Likewise.
	* testsuite/gas/i386/align-branch-8.d: Likewise.
	* testsuite/gas/i386/align-branch-8.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1a.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1b.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1c.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1d.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1e.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1f.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1g.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-1h.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-2.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-2a.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-2b.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-2c.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-3.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-3.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-4.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-4a.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-4b.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-5.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-6.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-7.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-7.s: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-8.d: Likewise.
	* testsuite/gas/i386/x86-64-align-branch-8.s: Likewise.
	* testsuite/gas/i386/i386.exp: Run new tests.

ld/

	* testsuite/ld-i386/align-branch-1.d: New file.
	* testsuite/ld-i386/align-branch-1.s: Likewise.
	* testsuite/ld-x86-64/align-branch-1.d: Likewise.
	* testsuite/ld-x86-64/align-branch-1.3: Likewise.
	* testsuite/ld-i386/i386.exp: Run the new test.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
2019-12-12 12:03:45 -08:00