aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-11-18mach-o cleanup: remove useless calls to bfd_seek.Tristan Gingold6-96/+127
Also support new commands. bfd/ * mach-o.h (struct mach_o_data_struct): Add hdr_offset field. (bfd_mach_o_fat_archive_p): Renames prototype. (bfd_mach_o_fat_openr_next_archived_file): Renames. (bfd_mach_o_header_p): Add argument. * mach-o.c (bfd_mach_o_read_header): Add hdr_off argument and use it. (bfd_mach_o_read_section_32, bfd_mach_o_read_section_64) (bfd_mach_o_read_section): Remove offset argument. (bfd_mach_o_read_dylinker): Remove bfd_seek call. (bfd_mach_o_read_dylib, bfd_mach_o_read_prebound_dylib) (bfd_mach_o_read_prebind_cksum, bfd_mach_o_read_twolevel_hints) (bfd_mach_o_read_fvmlib, bfd_mach_o_read_dysymtab) (bfd_mach_o_read_symtab, bfd_mach_o_read_uuid) (bfd_mach_o_read_linkedit, bfd_mach_o_read_str) (bfd_mach_o_read_dyld_info, bfd_mach_o_read_version_min) (bfd_mach_o_read_encryption_info): Likewise. (bfd_mach_o_read_encryption_info_64): New function. (bfd_mach_o_read_main, bfd_mach_o_read_source_version) (bfd_mach_o_read_segment): Remove call to bfd_seek. (bfd_mach_o_read_command): Use hdr_offset in bfd_seek. Handle BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT, BFD_MACH_O_LC_ENCRYPTION_INFO_64, BFD_MACH_O_LC_VERSION_MIN_WATCHOS. (bfd_mach_o_header_p): Add hdr_off argument. (bfd_mach_o_gen_object_p, bfd_mach_o_gen_core_p): Adjust calls. (bfd_mach_o_fat_archive_p): Renames. (bfd_mach_o_fat_openr_next_archived_file): Renames. (bfd_mach_o_close_and_cleanup): Remove useless code. (bfd_mach_o_close_and_cleanup): Define. * mach-o-x86-64.c (bfd_mach_o_x86_64_object_p) (bfd_mach_o_x86_64_core_p): Adjust calls. * mach-o-target.c: Move defines for archive from mach-o.c. Remove check on TARGET_ARCHIVE. * mach-o-i386.c (bfd_mach_o_i386_object_p) (bfd_mach_o_i386_core_p): Adjust calls.
2015-11-17sim: mn10300/v850: drop unused WITH_CORE defineMike Frysinger4-2/+8
This was dropped from the sim core in 1997, so no point in having these sim ports continue to define it.
2015-11-17sim: always enable modulo memoryMike Frysinger12-36/+30
Having this be a config option doesn't make sense: the code size is pretty much the same (as all the logic is still active), and if it's disabled, the sim throws an error if you try to use it. That means we can't break sims that weren't using it before by enabling it all the time.
2015-11-18Automatic date update in version.inGDB Administrator1-1/+1
2015-11-17[sim/ppc] Fix printf_filtered referencePedro Alves2-16/+21
Building a gdb that includes the PPC sim in C++ mode fails to link with: (...)s.o compile-object-load.o compile-object-run.o compile-loc2c.o compile-c-support.o inflow.o init.o \ ../sim/ppc/libsim.a ../readline/libreadline.a ../opcodes/libopcodes.a ../bfd/libbfd.a -lz ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a -ldl -ldl -lncurses -lm -ldl -lguile-2.0 -lgc -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -lexpat -llzma -lbabeltrace -lbabeltrace-ctf ../libiberty/libiberty.a build-gnulib/import/libgnu.a ../sim/ppc/libsim.a(sim_calls.o): In function `sim_open': /home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:73: undefined reference to `printf_filtered' /home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:73: undefined reference to `printf_filtered' ../sim/ppc/libsim.a(sim_calls.o): In function `sim_close': /home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:93: undefined reference to `printf_filtered' /home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:93: undefined reference to `printf_filtered' ../sim/ppc/libsim.a(sim_calls.o): In function `sim_load': /home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:102: undefined reference to `printf_filtered' ../sim/ppc/libsim.a(sim_calls.o):/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:102: more undefined references to `printf_filtered' follow collect2: error: ld returned 1 exit status The undefined references come from TRACE macro calls, which expand to calls to printf_filtered. But note that the sim's 'printf_filtered' is actually a #define to 'sim_io_printf_filtered', in sim_callbacks.h : #define printf_filtered sim_io_printf_filtered AFAICS, this is not meant to call gdb's printf_filtered function. The ChangeLog entry that added the printf_filtered macro reads: Tue Jul 30 21:12:24 1996 Andrew Cagney <cagney@kremvax.highland.com.au> * sim_callbacks.h (sim_io_printf_filtered): Replace printf_filtered with a local simulator specific version. Add #define printf_filtered to simplify updating of existing code. That is, just another incomplete/partial transition. Maybe prior to 1996 this was really meant to call gdb's printf_filtered version. The reference to printf_filtered appears because sim_calls.c, the compilation unit that fails to link, has this at the top: #undef printf_filtered /* blow away the mapping */ presumably so that this further below: void sim_io_printf_filtered(const char *fmt, ...) { (...) callbacks->printf_filtered(callbacks, "%s", message); } works. So those TRACE macros instances in sim_calls.c just happen to work because gdb is linked in, which satisfies the 'printf_filtered' reference, when GDB is built in C mode. When built in C++ mode, the problem is exposed, as GDB's printf_filtered is mangled. The fix here is to make the TRACE macro call sim_io_printf_filtered directly. (Standalone "run" doesn't fail to link simply because the offending routines are not part of its link.) sim/ppc/ChangeLog 2015-11-17 Pedro Alves <palves@redhat.com> * debug.h (TRACE, ITRACE, DTRACE, DITRACE, PTRACE): Call sim_io_printf_filtered instead of printf_filtered.
2015-11-17Fix gdb.threads/multiple-step-overs.exp fails on armYao Qi2-6/+14
Hi, Some tests in gdb.threads/multiple-step-overs.exp fail on arm target when the displaced stepping on, but they pass when displaced stepping is off. FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: step: step FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: next: next FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: continue: continue FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: signal thr1: continue to sigusr1_handler when displaced stepping is on, Sending packet: $vCont;c#a8...infrun: infrun_async(1)^M <--- [1] infrun: prepare_to_wait^M infrun: target_wait (-1.0.0, status) =^M infrun: -1.0.0 [Thread 0],^M infrun: status->kind = ignore^M infrun: TARGET_WAITKIND_IGNORE^M infrun: prepare_to_wait^M Packet received: T05swbreak:;0b:f8faffbe;0d:409ee7b6;0f:d0880000;thread:p635.636;core:0;^M infrun: target_wait (-1.0.0, status) =^M infrun: 1589.1590.0 [Thread 1590],^M infrun: status->kind = stopped, signal = GDB_SIGNAL_TRAP^M infrun: TARGET_WAITKIND_STOPPED^M infrun: stop_pc = 0x88d0^M infrun: context switch^M infrun: Switching context from Thread 1591 to Thread 1590^ GDB resumes the whole process (all threads) rather than the specific thread for which GDB wants to step over the breakpoint (as shown in [1]). That is wrong because we resume a single thread and leave others stopped when doing a normal step over where we temporarily remove the breakpoint, single-step, reinsert the breakpoint, is that if we let other threads run in the period while the breakpoint is removed, then these other threads could miss the breakpoint. Since with displaced stepping, we don't ever remove the breakpoint, it should be fine to let other threads run. However, there's another reason that we should not let other threads run: that is the case where some of those threads are also stopped for a breakpoint that itself needs to be stepped over. If we just let those threads run, then they immediately re-trap their breakpoint again. when displaced stepping is off, GDB behaves correctly, only resumes the specific thread (as shown in [2]). Sending packet: $vCont;c:p611.613#b2...infrun: infrun_async(1)^M <-- [2] infrun: prepare_to_wait^M infrun: target_wait (-1.0.0, status) =^M infrun: -1.0.0 [Thread 0],^M infrun: status->kind = ignore^M infrun: TARGET_WAITKIND_IGNORE^M infrun: prepare_to_wait^M Packet received: T05swbreak:;0b:f8faffbe;0d:409e67b6;0f:48880000;thread:p611.613;core:1;^M infrun: target_wait (-1.0.0, status) =^M infrun: 1553.1555.0 [Thread 1555],^M infrun: status->kind = stopped, signal = GDB_SIGNAL_TRAP^M infrun: TARGET_WAITKIND_STOPPED^M infrun: clear_step_over_info^M infrun: stop_pc = 0x8848 The current logic in GDB on deciding the set of threads to resume is: /* Decide the set of threads to ask the target to resume. */ if ((step || thread_has_single_step_breakpoints_set (tp)) && tp->control.trap_expected) { /* We're allowing a thread to run past a breakpoint it has hit, by single-stepping the thread with the breakpoint removed. In which case, we need to single-step only this thread, and keep others stopped, as they can miss this breakpoint if allowed to run. */ resume_ptid = inferior_ptid; } else resume_ptid = internal_resume_ptid (user_step); it doesn't handle the case correctly that GDB continue (instead of single step) the thread for displaced stepping. I also update the comment below to reflect the code. I remove the "with the breakpoint removed" comment, because GDB doesn't remove breakpoints in displaced stepping, so we don't have to worry that other threads may miss the breakpoint. Patch is regression tested on both x86_64-linux and arm-linux. gdb: 2015-11-17 Yao Qi <yao.qi@linaro.org> * infrun.c (resume): Check control.trap_expected only when deciding the set of threads to resume.
2015-11-17Introduce null_block_symbolPedro Alves5-12/+31
... in the spirit of null_ptid, null_frame_id, etc. Fixes two instances of: /root/binutils-gdb/gdb/cp-namespace.c: In function 'block_symbol cp_lookup_nested_symbol(type*, const char*, const block*, domain_enum)': /root/binutils-gdb/gdb/cp-namespace.c:1010: warning: jump to case label /root/binutils-gdb/gdb/cp-namespace.c:1008: error: crosses initialization of 'block_symbol <anonymous>' Compiler info: Reading specs from /usr/lib/gcc-lib/amd64-unknown-openbsd5.8/4.2.1/specs Target: amd64-unknown-openbsd5.8 Configured with: OpenBSD/amd64 system compiler Thread model: posix gcc version 4.2.1 20070719 gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * cp-namespace.c (cp_lookup_bare_symbol) (cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports) (cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1) (cp_lookup_nested_symbol): Use null_block_symbol. * d-namespace.c (d_lookup_symbol, d_lookup_nested_symbol) (d_lookup_symbol_imports, d_lookup_symbol_module): Use null_block_symbol. * symtab.c (null_block_symbol): New global. * symtab.h (null_block_symbol): Declare.
2015-11-17[C++] Always use setjmp/longjmp for exceptionsPedro Alves3-16/+41
We currently throw exceptions from signal handlers (e.g., for Quit/ctrl-c). But throwing C++ exceptions from signal handlers is undefined. (That doesn't restore signal masks, like siglongjmp does, and, because asynchronous signals can arrive at any instruction, we'd have to build _everything_ with -fasync-unwind-tables to make it reliable.) It happens to work on x86_64 GNU/Linux at least, but it's likely broken on other ports. Until we stop throwing from signal handlers, use setjmp/longjmp based exceptions in C++ mode as well. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY) (GDB_XCPT_RAW_TRY, GDB_XCPT): Define. Replace __cplusplus checks with GDB_XCPT checks throughout. * common/common-exceptions.c: Replace __cplusplus checks with GDB_XCPT checks throughout.
2015-11-17MinGW and attribute format(printf/gnu_printf)Pedro Alves2-0/+14
Cross building gdbserver for --host=x86_64-w64-mingw32 with gcc 4.8.4 20141219 (Fedora MinGW 4.8.4-1.fc20), I get: src/gdb/gdbserver/tracepoint.c: In function 'cmd_qtdp': src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=] trace_debug ("Defined %stracepoint %d at 0x%s, " ^ src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=] src/gdb/gdbserver/tracepoint.c:2577:7: error: too many arguments for format [-Werror=format-extra-args] src/gdb/gdbserver/tracepoint.c: In function 'stop_tracing': src/gdb/gdbserver/tracepoint.c:3447:7: error: unknown conversion type character 'l' in format [-Werror=format=] trace_debug ("Stopping the trace because " ^ src/gdb/gdbserver/tracepoint.c:3447:7: error: too many arguments for format [-Werror=format-extra-args] src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_tracepoint': src/gdb/gdbserver/tracepoint.c:4651:3: error: unknown conversion type character 'l' in format [-Werror=format=] trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64, ^ src/gdb/gdbserver/tracepoint.c:4651:3: error: too many arguments for format [-Werror=format-extra-args] src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_step': src/gdb/gdbserver/tracepoint.c:4687:3: error: unknown conversion type character 'l' in format [-Werror=format=] trace_debug ("Making new step traceframe for " ^ trace_debug is a macro that calls: static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); The calls that fail checking use PRIu64, etc., like: trace_debug ("Defined %stracepoint %d at 0x%s, " "enabled %d step %" PRIu64 " pass %" PRIu64, tpoint->type == fast_tracepoint ? "fast " : tpoint->type == static_tracepoint ? "static " : "", tpoint->number, paddress (tpoint->address), tpoint->enabled, tpoint->step_count, tpoint->pass_count); gnulib's stdio/printf module replacements may make %llu, etc. work on mingw, instead of the MS-specific %I64u, and thus may make PRIu64 expand to %llu. However, gcc isn't aware of that, because libiberty's ansidecl.h defines ATTRIBUTE_PRINTF as using attribute format(printf). But, with that format, gcc checks for MS-style format strings (%I64u). In order to have gcc expect gnu/standard formats, we need to use gnu_printf format instead. Which version to use (printf/gnu_printf) depends on msvcrt and mingw version, and so gnulib has a configure-time check, and defines _GL_ATTRIBUTE_FORMAT_PRINTF accordingly. Since _GL_ATTRIBUTE_FORMAT_PRINTF is compatible with ATTRIBUTE_PRINTF, the fix is simply to make use of the former. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * common/common-defs.h (ATTRIBUTE_PRINTF): Redefine in terms of _GL_ATTRIBUTE_FORMAT_PRINTF after including ansidecl.h.
2015-11-17[C++] Define __STDC_CONSTANT_MACROS / __STDC_LIMIT_MACROS for stdint.hPedro Alves2-0/+21
With some toolchains, building in C++ mode stumbles on many instances of: In file included from ../../src/gdb/../include/splay-tree.h:43:0, from ../../src/gdb/dcache.c:26: build-gnulib/import/inttypes.h:61:3: error: #error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." ^ make: *** [dcache.o] Error 1 That's: #if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif I see it when cross building for --host=x86_64-w64-mingw32 using Fedora 20's g++ (gcc version 4.8.4 20141219 (Fedora MinGW 4.8.4-1.fc20)), Simon reports seeing this on several cross compilers too. The issue is that on some hosts that predate C++11, when using C++ one must define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS to make visible the definitions of INTMAX_C / INTMAX_MAX etc. This was a C99 requirement that later C++11 -- the first to define stdint.h -- removed, and then C11 removed it as well. https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html says that gnulib's stdint.h fixes this, but because we run gnulib's configure tests with a C compiler, gnulib determines that mingw's stdint.h is C99-compliant, and doesn't actually replace it. Actually, even though configuring gnulib with a C++ compiler does result in gnulib replacing stdint.h, the resulting replacement is broken for mingw, because it defines uintptr_t incorrectly. I sent a gnulib patch upstream to fix that, here: https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00004.html but then even with that, gnulib still stumbles on other configured-with-C++-compiler problems. So for now, until gnulib + C++ is fixed upstream and then gdb's copy is updated, which may take a while, I think it's best to keep configuring gnulib in C, and define __STDC_LIMIT_MACROS/__STDC_CONSTANT_MACROS ourselves, just like C99 intended. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * common/common-defs.h (__STDC_CONSTANT_MACROS) (__STDC_LIMIT_MACROS): Define before including stdint.h.
2015-11-17[C++/mingw] Simplify first chance exception handlingPedro Alves2-18/+12
Building in C++ errors out with: ../../src/gdb/windows-nat.c: In function 'int get_windows_debug_event(target_ops*, int, target_waitstatus*)': ../../src/gdb/windows-nat.c:1503:13: warning: invalid conversion from 'int' to 'gdb_signal' [-fpermissive] last_sig = 1; ^ ../../src/gdb/windows-nat.c:1533:43: warning: invalid conversion from 'int' to 'gdb_signal' [-fpermissive] windows_resume (ops, minus_one_ptid, 0, 1); ^ ../../src/gdb/windows-nat.c:1228:1: warning: initializing argument 4 of 'void windows_resume(target_ops*, ptid_t, int, gdb_signal)' [-fpermissive] windows_resume (struct target_ops *ops, ^ Looking at the code, I can't figure out why we treat first chance exceptions any different here. AFAICS, we set last_sig to 1, and then call windows_resume passing signal==1, so the DBG_EXCEPTION_NOT_HANDLED code path in win32_resume is taken: ~~~ if (sig != GDB_SIGNAL_0) { if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) { OUTMSG (("Cannot continue with signal %d here.\n", sig)); } else if (sig == last_sig) continue_status = DBG_EXCEPTION_NOT_HANDLED; else OUTMSG (("Can only continue with recieved signal %d.\n", last_sig)); } ~~~ Fix this by removing this special casing. gdbserver also goes straight to continuing with DBG_EXCEPTION_NOT_HANDLED, AFAICS. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * windows-nat.c (handle_exception): Return 0 for first chance exceptions. (get_windows_debug_event): Adjust.
2015-11-17[C++/mingw] gdbserver: gdb/host signal mixupPedro Alves2-4/+11
Building in C++ caught a buglet here: ../../../src/gdb/gdbserver/win32-low.c: In function 'void win32_resume(thread_resume*, size_t)': ../../../src/gdb/gdbserver/win32-low.c:929:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive] sig = resume_info[0].sig; ^ ../../../src/gdb/gdbserver/win32-low.c:934:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive] sig = 0; ^ Signals in the "struct thread_resume" structure are host signals, not gdb signals. The current code happens to work because the only signals that the Windows port supports have the same number as the gdb equivalent (see handle_exception for the win32 exception -> gdb signal mapping). gdb/gdbserver/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * win32-low.c (win32_resume): Use gdb_signal_from_host, GDB_SIGNAL_0 and gdb_signal_to_string.
2015-11-17[C++/mingw] Fix windows-nat.c::xlatePedro Alves2-1/+6
Fixes: ../../src/gdb/windows-nat.c:287:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive] {-1, -1}}; ^ The signal number here doesn't really matter. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * windows-nat.c (xslate): Use GDB_SIGNAL_UNKNOWN instead of -1 as signal number for terminator.
2015-11-17[C++/mingw] handle_output_debug_stringPedro Alves2-6/+11
Fixes: ../../../src/gdb/gdbserver/win32-low.c: In function 'int win32_kill(int)': ../../../src/gdb/gdbserver/win32-low.c:823:46: error: invalid conversion from 'int' to 'target_waitkind' [-fpermissive] struct target_waitstatus our_status = { 0 }; ^ handle_output_debug_string doesn't use the parameter for anything (it's an output parameter in the gdb version), so just remove it. gdb/gdbserver/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * win32-low.c (handle_output_debug_string): Remove parameter. (win32_kill): Remove our_status local and adjust call to handle_output_debug_string. (get_child_debug_event): Adjust call to handle_output_debug_string.
2015-11-17[C++/mingw] ser-tcp.c castsPedro Alves2-6/+17
Fixes a few errors like these: ../../src/gdb/ser-tcp.c: In function 'int net_open(serial*, const char*)': ../../src/gdb/ser-tcp.c:286:73: error: invalid conversion from 'void*' to 'char*' [-fpermissive] res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len); ^ gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * ser-tcp.c (net_open) : Cast getsockopt argument to char * instead of void *. Update comment. (net_read_prim): Cast recv argument to char * instead of void *. (net_write_prim): Cast send argument to char *. Add comment.
2015-11-17[C++/mingw] gdbserver castsPedro Alves3-11/+23
A set of obviously-needed C++ casts. gdb/gdbserver/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * win32-i386-low.c (update_debug_registers_callback) (win32_get_current_dr): Add cast. * win32-low.c (thread_rec, delete_thread_info) (continue_one_thread): Add casts. (strwinerror): Cast FormatMessage argument to LPTSTR instead of LPVOID. (win32_create_inferior, suspend_one_thread): Add casts.
2015-11-17[C++/mingw] windows-nat.c castsPedro Alves2-38/+74
Fixes a set of errors like: ../../src/gdb/windows-nat.c: In function 'void _initialize_loadable()': ../../src/gdb/windows-nat.c:2778:30: error: invalid conversion from 'void*' to 'BOOL (*)(DWORD) {aka int (*)(long unsigned int)}' [-fpermissive] DebugActiveProcessStop = (void *) ^ gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * windows-nat.c (AdjustTokenPrivileges_ftype) (DebugActiveProcessStop_ftype, DebugBreakProcess_ftype) (DebugSetProcessKillOnExit_ftype, EnumProcessModules_ftype) (GetCurrentConsoleFont_ftype, GetModuleInformation_ftype) (LookupPrivilegeValueA_ftype, OpenProcessToken_ftype) (GetConsoleFontSize_ftype): New typedefs. (AdjustTokenPrivileges, DebugActiveProcessStop) (DebugBreakProcess, DebugSetProcessKillOnExit, EnumProcessModules) (GetConsoleFontSize, GetCurrentConsoleFont, GetModuleInformation) (LookupPrivilegeValueA, OpenProcessToken, GetConsoleFontSize): Adjust. (GetModuleFileNameEx_ftype): New typedef. (GetModuleFileNameEx): Use it. (_initialize_loadable): Define GPA macro and use it.
2015-11-17[C++/mingw] gdb-dlfcn.c castsPedro Alves2-2/+7
Fixes: ../../src/gdb/gdb-dlfcn.c: In function 'void* gdb_dlsym(void*, const char*)': ../../src/gdb/gdb-dlfcn.c:105:49: error: invalid conversion from 'void*' to 'HMODULE {aka HINSTANCE__*}' [-fpermissive] return (void *) GetProcAddress (handle, symbol); ^ gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * gdb-dlfcn.c (gdb_dlsym, gdb_dlclose) [__MINGW32__]: Add casts to HMODULE.
2015-11-17[C++/mingw] Misc alloca castsPedro Alves5-8/+15
gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * exec.c (exec_file_attach, symfile_bfd_open) [__GO32__ || _WIN32 || __CYGWIN__]: Add casts. * utils.c (gdb_filename_fnmatch): Add cast. * windows-nat.c (windows_create_inferior): Add cast.
2015-11-17[C++/mingw] ser-mingw.c castsPedro Alves2-25/+42
2015-11-17 Pedro Alves <palves@redhat.com> * ser-mingw.c (CancelIo_ftype): New typedef. (CancelIo): Use CancelIo_ftype. (ser_windows_close, ser_windows_wait_handle) (ser_windows_read_prim, stop_select_thread) (console_select_thread, pipe_select_thread, file_select_thread) (ser_console_wait_handle, ser_console_done_wait_handle) (ser_console_close, cleanup_pipe_state, pipe_windows_close) (pipe_windows_write, pipe_wait_handle, pipe_done_wait_handle) (net_windows_socket_check_pending, net_windows_select_thread) (net_windows_wait_handle, net_windows_done_wait_handle) (net_windows_close): Add casts. (_initialize_ser_windows): Cast to CancelIo_ftype* instead of void*.
2015-11-17Mach-O: add new defines and struct for darwin 14.5Tristan Gingold5-2/+158
include/mach-o/ * arm64.h: New file. * unwind.h: Add arm64 encodings. * loader.h (bfd_mach_o_cpu_subtype): Add arm64 literals. (BFD_MACH_O_LC_ENCRYPTION_INFO_64, BFD_MACH_O_LC_LINKER_OPTIONS) (BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT) (BFD_MACH_O_LC_VERSION_MIN_WATCHOS): Define. * external.h (mach_o_encryption_info_64_command_external): (mach_o_linker_option_command_external) (mach_o_dyld_cache_header_external) (mach_o_dyld_cache_mapping_info_external) (mach_o_dyld_cache_image_info_external): New types.
2015-11-17Convert c_string_type to an enum flags typeSimon Marchi4-13/+31
c_string_type contains values meant to be OR'ed together (even though some bits are mutually exclusive), so it makes sense to make it an enum flags type. gdb/ChangeLog: 2015-11-17 Simon Marchi <simon.marchi@ericsson.com> * c-exp.y (exp): Adjust, change enum c_string_type to c_string_type. (parse_string_or_char): Likewise. * c-lang.c (charset_for_string_type): Likewise. (classify_type): Likewise. (c_printchar): Likewise. (c_printstr): Likewise. (evaluate_subexp_c): Likewise. And change cast to enum c_string_type_values. * c-lang.h: Include "common/enum_flags.h". (enum c_string_type): Rename to... (enum c_string_type_values): ...this. (c_string_type): Define new enum flags type.
2015-11-17Type-safe wrapper for enum flagsPedro Alves14-37/+349
This patch fixes C++ build errors like this: /home/pedro/gdb/mygit/cxx-convertion/src/gdb/linux-tdep.c:1126:35: error: invalid conversion from ‘int’ to ‘filterflags’ [-fpermissive] | COREFILTER_HUGETLB_PRIVATE); ^ This is a case of enums used as bit flags. Unlike "regular" enums, these values are supposed to be or'ed together. However, in C++, the type of "(ENUM1 | ENUM2)" is int, and you then can't assign an int to an enum variable without a cast. That means that this: enum foo_flags flags = 0; if (...) flags |= FOO_FLAG1; if (...) flags |= FOO_FLAG2; ... would have to be written as: enum foo_flags flags = (enum foo_flags) 0; if (...) flags = (enum foo_flags) (flags | FOO_FLAG1); if (...) flags = (enum foo_flags) (flags | FOO_FLAG2); which is ... ugly. Alternatively, we'd have to use an int for the variable's type, which isn't ideal either. This patch instead adds an "enum flags" class. "enum flags" are exactly the enums where the values are bits that are meant to be ORed together. This allows writing code like the below, while with raw enums this would fail to compile without casts to enum type at the assignments to 'f': enum some_flag { flag_val1 = 1 << 1, flag_val2 = 1 << 2, flag_val3 = 1 << 3, flag_val4 = 1 << 4, }; DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags) some_flags f = flag_val1 | flag_val2; f |= flag_val3; It's also possible to assign literal zero to an enum flags variable (meaning, no flags), dispensing either adding an awkward explicit "no value" value to the enumeration or the cast to assignments from 0. For example: some_flags f = 0; f |= flag_val3 | flag_val4; Note that literal integers other than zero do fail to compile: some_flags f = 1; // error C is still supported -- DEF_ENUM_FLAGS_TYPE is just a typedef in that case. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * btrace.h: Include common/enum-flags.h. (btrace_insn_flags): Define. (struct btrace_insn) <flags>: Change type. (btrace_function_flags): Define. (struct btrace_function) <flags>: Change type. (btrace_thread_flags): Define. (struct btrace_thread_info) <flags>: Change type. * c-exp.y (token_flags): Rename to ... (token_flag): ... this. (token_flags): Define. (struct token) <flags>: Change type. * common/enum-flags.h: New file. * compile/compile-c-types.c (convert_qualified): Change type of 'quals' local. * compile/compile-internal.h: Include "common/enum-flags.h". (gcc_qualifiers_flags): Define. * completer.c (enum reg_completer_targets): Rename to ... (enum reg_completer_target): ... this. (reg_completer_targets): Define. (reg_or_group_completer_1): Change type of 'targets' parameter. * disasm.c (do_mixed_source_and_assembly_deprecated): Change type of 'psl_flags' local. (do_mixed_source_and_assembly): Change type of 'psl_flags' local. * infrun.c: Include "common/enum-flags.h". (enum step_over_what): Rename to ... (enum step_over_what_flag): ... this. (step_over_what): Change type. (start_step_over): Change type of 'step_what' local. (thread_still_needs_step_over): Now returns a step_over_what. Adjust. (keep_going_pass_signal): Change type of 'step_what' local. * linux-tdep.c: Include "common/enum-flags.h". (enum filterflags): Rename to ... (enum filter_flag): ... this. (filter_flags): Define. (dump_mapping_p): Change type of 'filterflags' parameter. (linux_find_memory_regions_full): Change type of 'filterflags' local. (linux_find_memory_regions_full): Pass the address of an unsigned int to sscanf instead of the address of an enum. * record-btrace.c (btrace_print_lines): Change type of local 'psl_flags'. (btrace_call_history): Replace 'flags' parameter with 'int_flags' parameter. Adjust. (record_btrace_call_history, record_btrace_call_history_range) (record_btrace_call_history_from): Rename 'flags' parameter to 'int_flags'. Use record_print_flags. * record.h: Include "common/enum-flags.h". (record_print_flags): Define. * source.c: Include "common/enum-flags.h". (print_source_lines_base, print_source_lines): Change type of flags parameter. * symtab.h: Include "common/enum-flags.h". (enum print_source_lines_flags): Rename to ... (enum print_source_lines_flag): ... this. (print_source_lines_flags): Define. (print_source_lines): Change prototype.
2015-11-17guile disassembly hardcode TARGET_XFER_E_IOPedro Alves2-4/+10
Instead of adding a cast at the memory_error call, as needed for C++, and have the reader understand the indirection, make it simple and hardcode the generic memory error at the memory_error call site. gdb/ChangeLog: 2015-11-17 Pedro Alves <palves@redhat.com> * guile/scm-disasm.c (gdbscm_disasm_read_memory): Return -1 on error instead of TARGET_XFER_E_IO. (gdbscm_disasm_memory_error): Always pass TARGET_XFER_E_IO to memory_error.
2015-11-17Fix a problematic message with the STM32L4XX fixup on 32-bit hosts.Christophe Lyon2-2/+7
* elf32-arm.c (elf32_arm_write_section): Force offset output as long (%ld).
2015-11-17Fix the disassembly of conditional instructions will illegal condition ↵Nick Clifton2-1/+6
selections. * rx-dis.c (condition_names): Replace always and never with invalid, since the always/never conditions can never be legal.
2015-11-17gdb/testsuite: Fix left shift of negative value.Dominik Vogt3-2/+7
This patch fixes all occurences of left-shifting negative constants in C cod which is undefined by the C standard. gdb/testsuite/ChangeLog: * lib/dwarf.exp (_note): Fix left shift of negative value. * gdb.trace/trace-condition.exp: Likewise.
2015-11-17gdb: Fix left shift of negative value.Dominik Vogt3-5/+12
This patch fixes all occurences of left-shifting negative constants in C cod which is undefined by the C standard. gdb/ChangeLog: * hppa-tdep.c (hppa_sign_extend, hppa_low_hppa_sign_extend) (prologue_inst_adjust_sp, hppa_frame_cache): Fix left shift of negative value. * dwarf2read.c (read_subrange_type): Likewise.
2015-11-17sim: sim-close: use XCONCAT2 helperMike Frysinger2-3/+6
No point in open coding this logic when we've got nifty helpers to do it.
2015-11-16gas: microblaze: fix shift overflowMike Frysinger2-1/+5
This code tries to shift an integer 31 bits which triggers a werror: gas/config/tc-microblaze.c:742:21: error: integer overflow in expression [-Werror=overflow] e->X_add_number |= -(1 << 31); Cast the 1 to offsetT to match X_add_number to fix things.
2015-11-17Automatic date update in version.inGDB Administrator1-1/+1
2015-11-16Fix stack buffer overflow in aarch64_extract_return_valueYao Qi2-1/+6
Hi, I build GDB with -fsanitize=address, and run testsuite. In gdb.base/callfuncs.exp, I see the following error, p/c fun1() =================================================================^M ==9601==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fffee858530 at pc 0x6df079 bp 0x7fffee8583a0 sp 0x7fffee858398 WRITE of size 16 at 0x7fffee858530 thread T0 #0 0x6df078 in regcache_raw_read /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:673 #1 0x6dfe1e in regcache_cooked_read /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:751 #2 0x4696a3 in aarch64_extract_return_value /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1708 #3 0x46ae57 in aarch64_return_value /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1918 We are extracting return value from V registers (128 bit), but only allocate X_REGISTER_SIZE-byte array, which isn't sufficient. This patch changes the array to V_REGISTER_SIZE. gdb: 2015-11-16 Yao Qi <yao.qi@linaro.org> * aarch64-tdep.c (aarch64_extract_return_value): Change array buf's length to V_REGISTER_SIZE.
2015-11-16Pass value * instead of bfd_byte * to pass_* functions in aarch64-tdep.cYao Qi2-22/+27
This patch changes the last argument of functions pass_in_x_or_stack, pass_in_v_or_stack, pass_on_stack, and pass_in_x to type value *. gdb: 2015-11-16 Yao Qi <yao.qi@linaro.org> * aarch64-tdep.c (pass_in_x_or_stack): Change argument type from bfd_byte * to value *. Caller updated. (pass_in_x): Likewise. (pass_in_v_or_stack): Likewise. (pass_on_stack): Likewise.
2015-11-16Use value_contents instead of value_contents_writeableYao Qi3-2/+8
Both aarch64_push_dummy_call and bfin_push_dummy_call only use args[i] contents but then never write to them, so that we can use value_contents instead. gdb: 2015-11-16 Yao Qi <yao.qi@linaro.org> * aarch64-tdep.c (aarch64_push_dummy_call): Call value_contents instead of value_contents_writeable. * bfin-tdep.c (bfin_push_dummy_call): Likewise.
2015-11-16Fix bug in arm_push_dummy_call by -fsanitize=addressYao Qi2-3/+13
When I build GDB with -fsanitize=address, and run testsuite, some gdb.base/*.exp test triggers the ERROR below, ================================================================= ==7646==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000242810 at pc 0x487844 bp 0x7fffe32e84e0 sp 0x7fffe32e84d8 READ of size 4 at 0x603000242810 thread T0 #0 0x487843 in push_stack_item /home/yao/SourceCode/gnu/gdb/git/gdb/arm-tdep.c:3405 #1 0x48998a in arm_push_dummy_call /home/yao/SourceCode/gnu/gdb/git/gdb/arm-tdep.c:3960 In that path, GDB passes value on stack, in an INT_REGISTER_SIZE slot, but the value contents' length can be less than INT_REGISTER_SIZE, so the contents will be accessed out of the bound. This patch adds an array buf[INT_REGISTER_SIZE], and copy val to buf before writing them to stack. gdb: 2015-11-16 Yao Qi <yao.qi@linaro.org> * arm-tdep.c (arm_push_dummy_call): New array buf. Store regval to buf. Pass buf instead of val to push_stack_item.
2015-11-16Fixes an invalid warning about memory region overflow on the ARM.Nick Clifton2-0/+21
PR ld/19106 * emultempl/armelf.em (_set_symbols): New function. Enables relaxation for non-relocatable links. (LDEMUL_SET_SYMBOLS): Define.
2015-11-16sim: sim-stop/sim-reason/sim-reg: move to common obj listMike Frysinger44-56/+119
Now that all arches (for the most part) have moved over, move sim-stop.o, sim-reason.o, and sim-reg.o to the common object list and out of all the arch ports.
2015-11-15sim: cr16: drop global callback stateMike Frysinger4-62/+70
Now that we have access to the sim state in all the right places, use existing sim helpers in place of cr16_callback directly.
2015-11-15sim: cr16: convert to common sim engine logicMike Frysinger5-157/+96
Now that we have access to the sim state everywhere, we can convert to the common engine logic for overall processing. This frees us up from tracking exception state ourselves.
2015-11-15sim: cr16: convert to common sim memory modulesMike Frysinger10-598/+68
The cr16 port has a lot of translation/offset logic baked into it, but it all looks like copy & paste from the d10v port rather than something the cr16 port wants.
2015-11-15sim: cr16: push down sd/cpu varsMike Frysinger6-788/+833
By itself, this commit doesn't really change anything. It lays the groundwork for using the cpu state in follow up commits, both for engine state and for cpu state. Splitting things up this way so it is easier to see how things have changed.
2015-11-15sim: cr16: delete unused memory helpersMike Frysinger3-20/+6
These aren't used anywhere and are just leftover from the d10v port. Delete them so follow up commits are easier to follow.
2015-11-15sim: cr16: switch to common sim-regMike Frysinger3-13/+61
This is mostly to get us off the weird cr16 specific memory functions, but it's also a good clean up to move to the common core.
2015-11-15sim: cr16/d10v: drop redundant call to sim_create_inferiorMike Frysinger4-2/+8
With the conversion to the nrun frontend, this call should no longer be necessary. It also actively crashes when trying to use the sd state.
2015-11-15sim: d10v: drop global callback stateMike Frysinger4-137/+149
Now that we have access to the sim state in all the right places, use existing sim helpers in place of d10v_callback directly.
2015-11-15sim: d10v: convert to common sim engine logicMike Frysinger5-218/+137
Now that we have access to the sim state everywhere, we can convert to the common engine logic for overall processing. This frees us up from tracking exception state ourselves.
2015-11-15sim: d10v: push down sd/cpu varsMike Frysinger6-500/+543
By itself, this commit doesn't really change anything. It lays the groundwork for using the cpu state in follow up commits, both for engine state and for cpu state. Splitting things up this way so it is easier to see how things have changed.
2015-11-16Automatic date update in version.inGDB Administrator1-1/+1
2015-11-15sim: h8300: convert to common sim_{reason,stop}Mike Frysinger3-15/+8
This ends up being pretty easy as the h8300 port already supports much of the common engine core.
2015-11-15sim: mcore: pull cpu state out of global scopeMike Frysinger3-294/+309
This avoids using global variables to hold the cpu state so we can better integrate with the sim common code. There's also a minor fix here where we move the pc register back into the state that is accessible by the asints array. When it was pulled out previously, the reg store/fetch functions broke, but no one really noticed as the mcore gdb port was dropped a while back.