aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-08-27x86: Don't mask out the GNU_PROPERTY_X86_UINT32_VALID bitH.J. Lu19-14/+234
Since only the GNU_PROPERTY_X86_UINT32_VALID bit may be set in data-only relocatable objects which don't contain any instructions, linker shouldn't mask out the GNU_PROPERTY_X86_UINT32_VALID bit when merging GNU_PROPERTY_X86_XXX bits. Otherwise, linker output doesn't contain GNU_PROPERTY_X86_XXX property with any data-only relocatable inputs. This patch keeps the GNU_PROPERTY_X86_UINT32_VALID bit and updates readelf to print "<None>" if GNU_PROPERTY_X86_XXX property only has the GNU_PROPERTY_X86_UINT32_VALID bit. bfd/ * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Don't mask out the GNU_PROPERTY_X86_UINT32_VALID bit. binutils/ * readelf.c (decode_x86_isa): Print <None> if bitmask only contains the GNU_PROPERTY_X86_UINT32_VALID bit. (decode_x86_feature_1): Likewise. (decode_x86_feature_2): Likewise. (print_gnu_property_note): Don't mask out the GNU_PROPERTY_X86_UINT32_VALID bit. * testsuite/binutils-all/i386/pr21231b.d: Updated. * testsuite/binutils-all/x86-64/pr21231b.d: Likewise. gas/ * testsuite/gas/i386/i386.exp: Run property-1 and x86-64-property-1. * testsuite/gas/i386/property-1.d: New file. * testsuite/gas/i386/property-1.s: Likewise. * testsuite/gas/i386/x86-64-property-1.d: Likewise. ld/ * testsuite/ld-i386/i386.exp: Run property-x86-5. * testsuite/ld-i386/property-x86-5.d: New file. * testsuite/ld-x86-64/property-x86-5-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-5.d: Likewise. * testsuite/ld-x86-64/property-x86-5a.s: Likewise. * testsuite/ld-x86-64/property-x86-5b.s: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run property-x86-5 and property-x86-5-x32.
2018-08-27MI: Fix printing of frame architecture with Python frame filters enabledJan Vrany4-3/+18
Commit 6d52907e226a (MI: Print frame architecture when printing frames on an MI channel) added frame's architecture to MI frame output. However the frame architecture was not correctly printed in the output of "-stack-list-frames" with frame filters enabled (via "-enable-frame-filters"). This was because with frame filters enabled, the actual frame printing is done in "py_print_frame" rather than "print_frame". This issue is now fixed. gdb/Changelog: 2018-08-27 Jan Vrany <jan.vrany@fit.cvut.cz> * python/py-framefilter.c (py_print_frame): Print frame architecture when printing on an MI output. gdb/testsuite/Changelog: 2018-08-27 Jan Vrany <jan.vrany@fit.cvut.cz> * gdb.python/py-framefilter-mi.exp: Update regexp to check for "arch" field in frame output.
2018-08-27readelf.c: Break multi-statement lineH.J. Lu2-3/+15
* readelf.c (decode_x86_compat_isa): Break multi-statement line. (decode_x86_isa): Likewise. (decode_x86_feature_2): Likewise.
2018-08-27Remove -Wno-narrowing from warnings.m4Tom Tromey5-3/+14
This removes -Wno-narrowing from warnings.m4. This is PR build/23087. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> PR build/23087: * configure: Rebuild. * warning.m4 (AM_GDB_WARNINGS): Remove -Wno-narrowing. gdb/gdbserver/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> PR build/23087: * configure: Rebuild.
2018-08-27Avoid -Wnarrowing warnings in aarch64-linux-tdep.cTom Tromey2-2/+8
This avoids -Wnarrowing warnings in aarch64_linux_iterate_over_regset_sections, by adding some casts to int. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * aarch64-linux-tdep.c (aarch64_linux_iterate_over_regset_sections) <sve_regmap>: Add casts to int.
2018-08-27Avoid -Wnarrowing warnings in gdbserverTom Tromey2-19/+45
This avoids -Wnarrowing warnings in gdbserver, by introducing some casts to unsigned char. gdb/gdbserver/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * linux-s390-low.c (s390_emit_ext, s390_emit_litpool) (s390_emit_const, s390_emit_reg, s390_emit_zero_ext) (s390_emit_stack_adjust, s390_emit_set_r2, s390x_emit_ext) (s390x_emit_const, s390x_emit_reg, s390x_emit_zero_ext) (s390x_emit_stack_adjust): Add casts to unsigned char.
2018-08-27Avoid -Wnarrowing warnings in ppc64-tdep.cTom Tromey2-43/+53
This avoids -Wnarrowing warnings in ppc64-tdep.c, by adding a few casts to unsigned. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * ppc64-tdep.c (insn_d, insn_ds, insn_xfx): Add casts to unsigned. (ppc64_standard_linkage1, ppc64_standard_linkage2) (ppc64_standard_linkage3, ppc64_standard_linkage4) (ppc64_standard_linkage5, ppc64_standard_linkage6) (ppc64_standard_linkage7, ppc64_standard_linkage8): Add casts to unsigned.
2018-08-27Fix two -Wnarrowing warnings in xtensa-tdep.hTom Tromey2-2/+7
This fixes a couple of -Wnarrowing warnings in xtensa-tdep.h, by introducing some casts to unsigned. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * xtensa-tdep.h (XTREG_END): Add cast to unsigned. (XTENSA_GDBARCH_TDEP_INSTANTIATE): Likewise.
2018-08-27Avoid -Wnarrowing warnings in struct tramp_frame instancesTom Tromey23-240/+400
This avoids -Wnarrowing warnings in struct tramp_frame instances, replacing uses of -1 with a new ULONGEST_MAX. It also redefined TRAMP_SENTINEL_INSN to avoid the same warning. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * tramp-frame.h (TRAMP_SENTINEL_INSN): Redefine. * tilegx-linux-tdep.c (tilegx_linux_rt_sigframe): Use ULONGEST_MAX. * tic6x-linux-tdep.c (tic6x_linux_rt_sigreturn_tramp_frame): Use ULONGEST_MAX. * sparc64-linux-tdep.c (sparc64_linux_rt_sigframe): Use ULONGEST_MAX. * sparc-linux-tdep.c (sparc32_linux_sigframe) (sparc32_linux_rt_sigframe): Use ULONGEST_MAX. * ppc-nbsd-tdep.c (ppcnbsd_sigtramp, ppcnbsd2_sigtramp): Use ULONGEST_MAX. * ppc-linux-tdep.c (ppc32_linux_sigaction_tramp_frame) (ppc64_linux_sigaction_tramp_frame) (ppc32_linux_sighandler_tramp_frame) (ppc64_linux_sighandler_tramp_frame): Use ULONGEST_MAX. * nios2-linux-tdep.c (nios2_r1_linux_rt_sigreturn_tramp_frame) (nios2_r2_linux_rt_sigreturn_tramp_frame): Use ULONGEST_MAX. * mn10300-linux-tdep.c (am33_linux_sigframe) (am33_linux_rt_sigframe): Use ULONGEST_MAX. * mips64-obsd-tdep.c (mips64obsd_sigframe): Use ULONGEST_MAX. * mips-linux-tdep.c (mips_linux_o32_sigframe) (mips_linux_o32_rt_sigframe, mips_linux_n32_rt_sigframe) (mips_linux_n64_rt_sigframe, micromips_linux_o32_sigframe) (micromips_linux_o32_rt_sigframe, micromips_linux_n32_rt_sigframe) (micromips_linux_n64_rt_sigframe): Use ULONGEST_MAX. * mips-fbsd-tdep.c (mips_fbsd_sigframe, mipsn32_fbsd_sigframe) (mips64_fbsd_sigframe): Use ULONGEST_MAX. * microblaze-linux-tdep.c (microblaze_linux_sighandler_tramp_frame): Use ULONGEST_MAX. * i386-nbsd-tdep.c (i386nbsd_sigtramp_sc16, i386nbsd_sigtramp_sc2) (i386nbsd_sigtramp_si2, i386nbsd_sigtramp_si31) (i386nbsd_sigtramp_si4): Use ULONGEST_MAX. * hppa-nbsd-tdep.c (hppanbsd_sigtramp_si4): Use ULONGEST_MAX. * common/common-types.h (ULONGEST_MAX): New define. (CORE_ADDR_MAX): Fix formatting. * bfin-linux-tdep.c (bfin_linux_sigframe): Use ULONGEST_MAX. * arm-obsd-tdep.c (armobsd_sigframe): Use ULONGEST_MAX. * arm-linux-tdep.c (arm_linux_sigreturn_tramp_frame) (arm_linux_rt_sigreturn_tramp_frame) (arm_eabi_linux_sigreturn_tramp_frame) (arm_eabi_linux_rt_sigreturn_tramp_frame) (thumb2_eabi_linux_sigreturn_tramp_frame) (thumb2_eabi_linux_rt_sigreturn_tramp_frame) (arm_linux_restart_syscall_tramp_frame) (arm_kernel_linux_restart_syscall_tramp_frame): Use ULONGEST_MAX. * arm-fbsd-tdep.c (arm_fbsd_sigframe): Use ULONGEST_MAX. * aarch64-linux-tdep.c (aarch64_linux_rt_sigframe): Use ULONGEST_MAX. * aarch64-fbsd-tdep.c (aarch64_fbsd_sigframe): Use ULONGEST_MAX.
2018-08-27Use CORE_ADDR_MAX in various "breaks" arraysTom Tromey6-7/+20
Code like this: CORE_ADDR breaks[2] = {-1, -1}; ... gives a warning with -Wnarrowing. This patch changes all instances of this to use CORE_ADDR_MAX instead. gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * rs6000-tdep.c (ppc_deal_with_atomic_sequence): Use CORE_ADDR_MAX. * mips-tdep.c (mips_deal_with_atomic_sequence) (micromips_deal_with_atomic_sequence): Use CORE_ADDR_MAX. * arch/arm-get-next-pcs.c (thumb_deal_with_atomic_sequence_raw) (arm_deal_with_atomic_sequence_raw): Use CORE_ADDR_MAX. * alpha-tdep.c (alpha_deal_with_atomic_sequence): Use CORE_ADDR_MAX. * aarch64-tdep.c (aarch64_software_single_step): Use CORE_ADDR_MAX.
2018-08-27Avoid -Wnarrowing warnings from quote_char()Tom Tromey3-2/+8
This adds a couple of casts to avoid -Wnarrowing warnings coming from the use of quote_char(). gdb/ChangeLog 2018-08-27 Tom Tromey <tom@tromey.com> * linespec.c (complete_linespec_component): Add cast to "char". * completer.c (completion_tracker::build_completion_result): Add cast to "char".
2018-08-26Fix indentation in solist.hSimon Marchi2-135/+140
gdb/ChangeLog: * solist.h (struct solist, struct target_so_ops): Fix indentation.
2018-08-27Automatic date update in version.inGDB Administrator1-1/+1
2018-08-26Make ada_tasks_inferior_data::task_list an std::vectorSimon Marchi2-53/+50
This removes a VEC type. It requires converting ada_tasks_inferior_data to C++ (initializing fields, allocating with new). It seems, however, that the allocated ada_tasks_inferior_data structures are never freed (that should be fixed separately). gdb/ChangeLog: * ada-tasks.c (ada_task_info_s): Remove typedef. (DEF_VEC_O(ada_task_info_s)): Remove. (struct ada_tasks_inferior_data): Initialize fields. <task_list>: Make an std::vector. (get_ada_tasks_inferior_data): Allocate with new. (ada_get_task_number): Adjust. (get_task_number_from_id): Likewise. (valid_task_id): Likewise. (ada_get_task_info_from_ptid): Likewise. (iterate_over_live_ada_tasks): Likewise. (add_ada_task): Likewise. (read_known_tasks): Likewise. (ada_build_task_list): Likewise. (print_ada_task_info): Likewise. (info_task): Likewise. (task_command_1): Likewise.
2018-08-26Make ada-lang.c::add_angle_brackets return an std::stringSimon Marchi2-8/+7
This removes the need for manual memory management. It may also be a bit more efficient, since the returned string can be moved all the way into the destination, in ada_lookup_name_info::matches. gdb/ChangeLog: * ada-lang.c (add_angle_brackets): Return std::string.
2018-08-26Delay evaluation of alignment expressions in output sectionsAlan Modra10-40/+88
git commit 702d16713 broke expressions using CONSTANT(COMMONPAGESIZE) in ALIGN or SUBALIGN of output section statements, because these optional fields were evaluated at script parse time and the patch in question delayed setting of config.commonpagesize. The right thing to do is keep the tree representation of those fields for later evaluation. PR 23571 * ldlang.h (section_alignment): Make it an expression tree. (subsection_alignment): Likewise. * ldlang.c (topower): Delete. (output_section_statement_newfunc): Adjust initialization. (init_os): Evaluate section_alignment. (lang_size_sections_1): Likewise. (size_input_section): Evaluate subsection_alignment. (lang_enter_output_section_statement): Don't evaluate here. (lang_new_phdr): Use exp_get_vma rather than exp_get_value_int. * ldexp.h (exp_get_value_int): Delete. (exp_get_power): Declare. * ldexp.c (exp_get_value_int): Delete. (exp_get_power): New function. * emultempl/pe.em (place_orphan): Build expression for section alignment. * emultempl/pep.em (place_orphan): Likewise. * testsuite/ld-scripts/pr23571.d, * testsuite/ld-scripts/pr23571.t: New test. * testsuite/ld-scripts/align.exp: Run it.
2018-08-26Automatic date update in version.inGDB Administrator1-1/+1
2018-08-25Initialize variable in py_get_event_threadSimon Marchi2-2/+7
The pythread variable could be used without being initialized, fix it by initializing it to nullptr. gdb/ChangeLog: * python/py-threadevent.c (py_get_event_thread): Initialize pythread.
2018-08-25elf: Check for corrupt symbol version infoH.J. Lu4-1/+22
The BFD linker with PR ld/23499 may generate shared libraries with corrupt symbol version info which leads to linker error when the corrupt shared library is used: /usr/bin/ld: bin/libKF5Service.so.5.49.0: _edata: invalid version 21 (max 0) /usr/bin/ld: bin/libKF5Service.so.5.49.0: error adding symbols: bad value Add check for corrupt symbol version info to objdump: 00000000000af005 g D .data 0000000000000000 <corrupt> _edata and readelf: 728: 00000000000af005 0 NOTYPE GLOBAL DEFAULT 25 _edata@<corrupt> (5) bfd/ PR ld/23499 * elf.c (_bfd_elf_get_symbol_version_string): Return _("<corrupt>") for corrupt symbol version info. binutils/ PR ld/23499 * readelf.c (get_symbol_version_string): Return _("<corrupt>") for corrupt symbol version info.
2018-08-25Automatic date update in version.inGDB Administrator1-1/+1
2018-08-24gdb/python: Use copy-initialization more when possiblePedro Alves9-39/+61
gdb/ChangeLog: 2018-08-24 Pedro Alves <palves@redhat.com> * python/py-bpevent.c (create_breakpoint_event_object): Use copy-initialization. * python/py-continueevent.c (emit_continue_event): Use copy-initialization. * python/py-exitedevent.c (create_exited_event_object): Return a gdbpy_ref<>. (emit_exited_event): Use copy-initialization. * python/py-inferior.c (python_new_inferior) (python_inferior_deleted, add_thread_object): Use copy-initialization. * python/py-infevents.c (create_inferior_call_event_object) (create_register_changed_event_object) (create_memory_changed_event_object): Return a gdbpy_ref<>. (emit_inferior_call_event, emit_memory_changed_event) (emit_register_changed_event): Use copy-initialization. * python/py-newobjfileevent.c (create_new_objfile_event_object): Return a gdbpy_ref<>. (emit_new_objfile_event): Use copy-initialization. (create_clear_objfiles_event_object): Return a gdbpy_ref<>. (emit_clear_objfiles_event): Use copy-initialization. * python/py-signalevent.c (create_signal_event_object): Use copy-initialization. * python/py-threadevent.c (create_thread_event_object): Use copy-initialization.
2018-08-24Fix 8.2 regression in gdb.python/py-evthreads.exp w/ gdbserver (PR gdb/23379)Pedro Alves5-27/+64
This commit fixes a 8.1->8.2 regression exposed by gdb.python/py-evthreads.exp when testing with --target_board=native-gdbserver. gdb.log shows: src/gdb/thread.c:93: internal-error: thread_info* inferior_thread(): Assertion `tp' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.python/py-evthreads.exp: run to breakpoint 1 (GDB internal error) A backtrace shows (frames #2 and #10 highlighted) that the assertion fails when GDB is setting up the connection to the remote target, in non-stop mode: #0 0x0000000000622ff0 in internal_error(char const*, int, char const*, ...) (file=0xc1ad98 "src/gdb/thread.c", line=93, fmt=0xc1ad20 "%s: Assertion `%s' failed.") at src/gdb/common/errors.c:54 #1 0x000000000089567e in inferior_thread() () at src/gdb/thread.c:93 = #2 0x00000000004da91d in get_event_thread() () at src/gdb/python/py-threadevent.c:38 #3 0x00000000004da9b7 in create_thread_event_object(_typeobject*, _object*) (py_type=0x11574c0 <continue_event_object_type>, thread=0x0) at src/gdb/python/py-threadevent.c:60 #4 0x00000000004bf6fe in create_continue_event_object() () at src/gdb/python/py-continueevent.c:27 #5 0x00000000004bf738 in emit_continue_event(ptid_t) (ptid=...) at src/gdb/python/py-continueevent.c:40 #6 0x00000000004c7d47 in python_on_resume(ptid_t) (ptid=...) at src/gdb/python/py-inferior.c:108 #7 0x0000000000485bfb in std::_Function_handler<void (ptid_t), void (*)(ptid_t)>::_M_invoke(std::_Any_data const&, ptid_t&&) (__functor=..., __args#0=...) at /usr/include/c++/7/bits/std_function.h:316 #8 0x000000000089b416 in std::function<void (ptid_t)>::operator()(ptid_t) const (this=0x12aa600, __args#0=...) at /usr/include/c++/7/bits/std_function.h:706 #9 0x000000000089aa0e in gdb::observers::observable<ptid_t>::notify(ptid_t) const (this=0x118a7a0 <gdb::observers::target_resumed>, args#0=...) at src/gdb/common/observable.h:106 = #10 0x0000000000896fbe in set_running(ptid_t, int) (ptid=..., running=1) at src/gdb/thread.c:880 #11 0x00000000007f750f in remote_target::remote_add_thread(ptid_t, bool, bool) (this=0x12c5440, ptid=..., running=true, executing=true) at src/gdb/remote.c:2434 #12 0x00000000007f779d in remote_target::remote_notice_new_inferior(ptid_t, int) (this=0x12c5440, currthread=..., executing=1) at src/gdb/remote.c:2515 #13 0x00000000007f9c44 in remote_target::update_thread_list() (this=0x12c5440) at src/gdb/remote.c:3831 #14 0x00000000007fb922 in remote_target::start_remote(int, int) (this=0x12c5440, from_tty=0, extended_p=0) at src/gdb/remote.c:4655 #15 0x00000000007fd102 in remote_target::open_1(char const*, int, int) (name=0x1a4f45e "localhost:2346", from_tty=0, extended_p=0) at src/gdb/remote.c:5638 #16 0x00000000007fbec1 in remote_target::open(char const*, int) (name=0x1a4f45e "localhost:2346", from_tty=0) at src/gdb/remote.c:4862 So on frame #10, we're marking a newly-discovered thread as running, and that causes the Python API to emit a gdb.ContinueEvent. gdb.ContinueEvent is a gdb.ThreadEvent, and as such includes the event thread as the "inferior_thread" attribute. The problem is that when we get to frame #3/#4, we lost all references to the thread that is being marked as running. create_continue_event_object assumes that it is the current thread, which is not true in this case. Fix this by passing down the right thread in create_continue_event_object. Also remove create_thread_event_object's default argument and have the only other caller left pass down the right thread explicitly too. gdb/ChangeLog: 2018-08-24 Pedro Alves <palves@redhat.com> Simon Marchi <simon.marchi@ericsson.com> PR gdb/23379 * python/py-continueevent.c: Include "gdbthread.h". (create_continue_event_object): Add intro comment. Add 'ptid' parameter. Use it to find thread to pass to create_thread_event_object. (emit_continue_event): Pass PTID down to create_continue_event_object. * python/py-event.h (py_get_event_thread): Declare. (create_thread_event_object): Remove default from 'thread' parameter. * python/py-stopevent.c (create_stop_event_object): Use py_get_event_thread. * python/py-threadevent.c (get_event_thread): Rename to ... (py_get_event_thread): ... this, make extern, add 'ptid' parameter and use it to find the thread. (create_thread_event_object): Assert that THREAD isn't null. Don't find the event thread here.
2018-08-24[PATCH] [MIPS] LD/testsuite: Skip 32bit test if ld not support.Chenghua Xu2-0/+47
ld/ChangeLog: * testsuite/ld-mips-elf/mips-elf-flags.exp (check_ld_support_32bit, check_is_32bit_args): New procedures. (good_combination, bad_combination): Skip 32bit test if ld not support 32bit emulations.
2018-08-24x86: Update GNU_PROPERTY_X86_XXX macrosH.J. Lu76-199/+896
This patch updates GNU_PROPERTY_X86_XXX macros: 1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property. A bit is set if it is set in all relocatable inputs: #define GNU_PROPERTY_X86_UINT32_AND_LO 0xc0000002 #define GNU_PROPERTY_X86_UINT32_AND_HI 0xc0007fff 2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property. A bit is set if it is set in any relocatable inputs: #define GNU_PROPERTY_X86_UINT32_OR_LO 0xc0008000 #define GNU_PROPERTY_X86_UINT32_OR_HI 0xc000ffff 3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property. A bit is set if it is set in any relocatable inputs and the property is present in all relocatable inputs: #define GNU_PROPERTY_X86_UINT32_OR_AND_LO 0xc0010000 #define GNU_PROPERTY_X86_UINT32_OR_AND_HI 0xc0017fff 4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED and GNU_PROPERTY_X86_FEATURE_2_XXX bits. GNU_PROPERTY_X86_FEATURE_1_AND is unchanged. GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful. A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined. The previous GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to GNU_PROPERTY_X86_COMPAT_ISA_1_XXX. bfd/ * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. (_bfd_x86_elf_merge_gnu_properties): Likewise. (_bfd_x86_elf_link_setup_gnu_properties): Add X86_FEATURE_2_NEEDED instead of X86_ISA_1_NEEDED. (_bfd_x86_elf_link_fixup_gnu_properties): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. binutils/ * readelf.c (decode_x86_compat_isa): New function. (decode_x86_feature_2): Likewise. (decode_x86_isa): Updated for new X86_ISA_1_XXX bits. (decode_x86_feature): Renamed to ... (decode_x86_feature_1): This. Remove the type argument. (print_gnu_property_note): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. * testsuite/binutils-all/i386/pr21231b.s: Updated to the current GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED values. * testsuite/binutils-all/x86-64/pr21231b.s: Likewise. * testsuite/binutils-all/x86-64/pr23494a.s: Likewise. * testsuite/binutils-all/x86-64/pr23494b.s: Likewise. * testsuite/binutils-all/x86-64/pr23494c.s: Likewise. * testsuite/binutils-all/i386/pr21231b.d: Updated. * testsuite/binutils-all/x86-64/pr21231b.d: Likewise. * testsuite/binutils-all/x86-64/pr23494a-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494a.d: Likewise. * testsuite/binutils-all/x86-64/pr23494c-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494c.d: Likewise. * testsuite/binutils-all/x86-64/pr23494d-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494d.d: Likewise. * testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494e.d: Likewise. include/ * elf/common.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This. (GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This. (GNU_PROPERTY_X86_ISA_1_XXX): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_XXX): This. (GNU_PROPERTY_X86_UINT32_AND_LO): New. (GNU_PROPERTY_X86_UINT32_AND_HI): Likewise. (GNU_PROPERTY_X86_UINT32_OR_LO): Likewise. (GNU_PROPERTY_X86_UINT32_OR_HI): Likewise. (GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise. (GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise. (GNU_PROPERTY_X86_ISA_1_CMOV): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE2): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE3): Likewise. (GNU_PROPERTY_X86_ISA_1_SSSE3): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE4_1): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE4_2): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX2): Likewise. (GNU_PROPERTY_X86_ISA_1_FMA): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512F): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512CD): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512ER): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512PF): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512VL): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512DQ): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512BW): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_BITALG): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_IFMA): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VNNI): Likewise. (GNU_PROPERTY_X86_FEATURE_2_X86): Likewise. (GNU_PROPERTY_X86_FEATURE_2_X87): Likewise. (GNU_PROPERTY_X86_FEATURE_2_MMX): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_YMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_ZMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_FXSR): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVE): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVEC): Likewise. (GNU_PROPERTY_X86_FEATURE_1_AND): Updated to (GNU_PROPERTY_X86_UINT32_AND_LO + 0). (GNU_PROPERTY_X86_ISA_1_NEEDED): Defined to (GNU_PROPERTY_X86_UINT32_OR_LO + 0). (GNU_PROPERTY_X86_FEATURE_2_NEEDED): New. Defined to (GNU_PROPERTY_X86_UINT32_OR_LO + 1). (GNU_PROPERTY_X86_ISA_1_USED): Defined to (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0). (GNU_PROPERTY_X86_FEATURE_2_USED): New. Defined to (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1). ld/ * testsuite/ld-i386/i386.exp: Run pr23372c, pr23372d, pr23486c and pr23486d. * testsuite/ld-i386/pr23372a.s: Update comments. * testsuite/ld-i386/pr23372b.s: Likewise. * testsuite/ld-i386/pr23372c.s: Likewise. * testsuite/ld-x86-64/pr23372a.s: Likewise. * testsuite/ld-x86-64/pr23372b.s: Likewise. * testsuite/ld-x86-64/pr23372c.s: Likewise. * testsuite/ld-x86-64/pr23486a.s: Likewise. * testsuite/ld-x86-64/pr23486b.s: Likewise. * testsuite/ld-i386/pr23372c.d: New file. * testsuite/ld-i386/pr23372d.d: Likewise. * testsuite/ld-i386/pr23486c.d: Likewise. * testsuite/ld-i386/pr23486d.d: Likewise. * testsuite/ld-x86-64/pr23372c-x32.d: Likewise. * testsuite/ld-x86-64/pr23372c.d: Likewise. * testsuite/ld-x86-64/pr23372d-x32.d: Likewise. * testsuite/ld-x86-64/pr23372d.d: Likewise. * testsuite/ld-x86-64/pr23372d.s: Likewise. * testsuite/ld-x86-64/pr23372e.s: Likewise. * testsuite/ld-x86-64/pr23372f.s: Likewise. * testsuite/ld-x86-64/pr23486c-x32.d: Likewise. * testsuite/ld-x86-64/pr23486c.d: Likewise. * testsuite/ld-x86-64/pr23486c.s: Likewise. * testsuite/ld-x86-64/pr23486d-x32.d: Likewise. * testsuite/ld-x86-64/pr23486d.d: Likewise. * testsuite/ld-x86-64/pr23486d.s: Likewise. * testsuite/ld-i386/property-3.r: Updated. * testsuite/ld-i386/property-4.r: Likewise. * testsuite/ld-i386/property-5.r: Likewise. * testsuite/ld-i386/property-x86-3.d: Likewise. * testsuite/ld-i386/property-x86-ibt3a.d: Likewise. * testsuite/ld-i386/property-x86-shstk3a.d: Likewise. * testsuite/ld-i386/property-x86-shstk3b.d: Likewise. * testsuite/ld-x86-64/property-3.r: Likewise. * testsuite/ld-x86-64/property-4.r: Likewise. * testsuite/ld-x86-64/property-5.r: Likewise. * testsuite/ld-x86-64/property-x86-3-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-3.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise. * testsuite/ld-i386/property-x86-1.S: Updated to the current GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED values. * testsuite/ld-i386/property-x86-2.S: Likewise. * testsuite/ld-i386/property-x86-3.s: Likewise. * testsuite/ld-x86-64/property-x86-1.S: Likewise. * testsuite/ld-x86-64/property-x86-2.S: Likewise. * testsuite/ld-x86-64/property-x86-3.s: Likewise. * ld/testsuite/ld-x86-64/x86-64.exp: Run pr23372c, pr23372c-x32, pr23372d, pr23372d-x32, pr23486c, pr23486c-x32, pr23486d and pr23486d-x32.
2018-08-24x86: Add GNU_PROPERTY_X86_UINT32_VALIDH.J. Lu6-14/+66
The older linker treats .note.gnu.property section as a generic note and just concatenates all .note.gnu.property sections from the input to the output. On CET-enabled OS, the output of the older linker is marked as CET enabled, but in fact, it is not CET enabled and it crashes on CET-enabled machines. This patch defines GNU_PROPERTY_X86_UINT32_VALID. Linker is updated to set the GNU_PROPERTY_X86_UINT32_VALID bit in GNU property note for non-relocatable output to differentiate outputs from the older linker. bfd/ * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Mask out the GNU_PROPERTY_X86_UINT32_VALID bit. (_bfd_x86_elf_link_fixup_gnu_properties): Set the GNU_PROPERTY_X86_UINT32_VALID bit for non-relocatable output. binutils/ * readelf.c (print_gnu_property_note): Check the GNU_PROPERTY_X86_UINT32_VALID bit for invalid GNU property note. include/ * elf/common.h (GNU_PROPERTY_X86_UINT32_VALID): New.
2018-08-24ehdr_start twiddlesAlan Modra2-12/+21
We force __ehdr_start to defined in before_allocation, then restore the type and a union after dynamic symbols have been allocated. The union contains a number of structs, all starting with a "next" pointer, and various fields depending on the symbol type. The old code restored the entire union, but it isn't necessary to restore the "next" pointer, and in fact it could be wrong if __ehdr_start happened to be last on the list and some symbols were added before restoring. * emultempl/elf32.em (before_allocation): Don't restore __ehdr_start u.*.next pointer.
2018-08-24Automatic date update in version.inGDB Administrator1-1/+1
2018-08-23Test case for functions with non-contiguous rangesKevin Buettner3-0/+488
See comments in the new files for what this is about - I tried to explain it all there. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-ranges-func.c: New file. * gdb.dwarf2/dw2-ranges-func.exp: New file.
2018-08-23Relocate block range start and end addressesKevin Buettner2-0/+16
gdb/ChangeLog: * objfiles.c (objfile_relocate1): Relocate start and end addresses for each range in a block.
2018-08-23Introduce find_function_entry_range_from_pc and use it in infrun.cKevin Buettner3-4/+61
An earlier version of this patch used the returned block in conjunction with BLOCK_ENTRY_PC to set stop_func_start in fill_in_stop_func() in infrun.c. While I think this was the correct thing to do, changes to find_inferior_partial_function could potentially end up with stop_func_end < stop_func_start, which is definitely wrong. For this case, we want to set both stop_func_start and stop_func_end to the start and end of the range containing the function's entry pc. I think that this functionality will be useful in many other places too - it probably ought to be used in all of the various prologue analyzers in GDB. The change to infrun.c was simple: the call to find_pc_partial_function was replaced with a call to find_function_entry_range_from_pc. The difference between these two functions is that find_pc_partial_entry_function will (potentially) return the start and end address corresponding to the range in which PC is found, but find_function_entry_range_from_pc will (again, potentially) return the start and end address of the range containing the entry pc. find_pc_partial_function has the property that *ADDRESS <= PC < *ENDADDR. This condition does not necessarily hold for the outputs of find_function_entry_range_from_pc. It should be noted that for functions which contain only a single range, the outputs of find_pc_partial_function and find_function_entry_range_from_pc are identical. I think it might happen that find_function_entry_range_from_pc will come to be used in place of many of the calls to find_pc_partial_function within GDB. Care must be taken in making this change, however, since some of this code depends on the *ADDRESS <= PC < *ENDADDR property. Finally, a note regarding the name: I had initially chosen a different name with a find_pc_partial_ prefix, but Simon suggested the current name citing the goal of eventually making naming consistent using the form find_X_from_Y. In this case X is "function_entry_range" and Y is "pc". Both the name and rationale made sense to me, so that's how it came to be. gdb/ChangeLog: * infrun.c (fill_in_stop_func): Use find_function_entry_range_from_pc in place of find_pc_partial_function. * blockframe.c (find_function_entry_range_from_pc): New function. * symtab.h (find_function_entry_range_from_pc): Declare and document.
2018-08-23Use BLOCK_ENTRY_PC in place of most uses of BLOCK_STARTKevin Buettner17-31/+61
This change/patch substitues BLOCK_ENTRY_PC for BLOCK_START in places where BLOCK_START is used to obtain the address at which execution should enter the block. Since blocks can now contain non-contiguous ranges, the BLOCK_START - which is still be the very lowest address in the block - might not be the same as BLOCK_ENTRY_PC. There is a change to infrun.c which is less obvious and less mechanical. I'm posting it as a separate patch. gdb/ChangeLog: * ax-gdb.c (gen_var_ref): Use BLOCK_ENTRY_PC in place of BLOCK_START. * blockframe.c (get_pc_function_start): Likewise. * compile/compile-c-symbols.c (convert_one_symbol): Likewise. (gcc_symbol_address): Likewise. * compile/compile-object-run.c (compile_object_run): Likewise. * compile/compile.c (get_expr_block_and_pc): Likewise. * dwarf2loc.c (dwarf2_find_location_expression): Likewise. (func_addr_to_tail_call_list): Likewise. * findvar.c (default_read_var_value): Likewise. * inline-frame.c (inline_frame_this_id): Likewise. (skip-inline_frames): Likewise. * infcmd.c (until_next_command): Likewise. * linespec.c (convert_linespec_to_sals): Likewise. * parse.c (parse_exp_in_context_1): Likewise. * printcmd.c (build_address_symbolic): likewise. (info_address_command): Likewise. symtab.c (find_function_start_sal): Likewise. (skip_prologue_sal): Likewise. (find_function_alias_target): Likewise. (find_gnu_ifunc): Likewise. * stack.c (find_frame_funname): Likewise. * symtab.c (fixup_symbol_section): Likewise. (find_function_start_sal): Likewise. (skip_prologue_sal): Likewsie. (find_function_alias_target): Likewise. (find_gnu_ifunc): Likewise. * tracepoint.c (info_scope_command): Likewise. * value.c (value_fn_field): Likewise.
2018-08-23Disassemble blocks with non-contiguous rangesKevin Buettner2-11/+36
This patch adds support for disassembly of blocks with non-contiguous ranges. These blocks are printed as follows: (gdb) disassemble foo Dump of assembler code for function foo: Address range 0x401136 to 0x401151: 0x0000000000401136 <+0>: push %rbp 0x0000000000401137 <+1>: mov %rsp,%rbp 0x000000000040113a <+4>: callq 0x401134 <bar> 0x000000000040113f <+9>: mov 0x2eef(%rip),%eax # 0x404034 <e> 0x0000000000401145 <+15>: test %eax,%eax 0x0000000000401147 <+17>: je 0x40114e <foo+24> 0x0000000000401149 <+19>: callq 0x401128 <foo+4294967282> 0x000000000040114e <+24>: nop 0x000000000040114f <+25>: pop %rbp 0x0000000000401150 <+26>: retq Address range 0x401128 to 0x401134: 0x0000000000401128 <+-14>: push %rbp 0x0000000000401129 <+-13>: mov %rsp,%rbp 0x000000000040112c <+-10>: callq 0x401126 <baz> 0x0000000000401131 <+-5>: nop 0x0000000000401132 <+-4>: pop %rbp 0x0000000000401133 <+-3>: retq End of assembler dump. This is an actual dump from the test case that I constructed for this work. The ranges are printed in the order encountered in the debug info. For the above example, note that the second range occupies lower addresses than the first range. Functions with contiguous ranges are still printed as follows: (gdb) disassemble main Dump of assembler code for function main: 0x0000000000401151 <+0>: push %rbp 0x0000000000401152 <+1>: mov %rsp,%rbp 0x0000000000401155 <+4>: callq 0x401136 <foo> 0x000000000040115a <+9>: mov $0x0,%eax 0x000000000040115f <+14>: pop %rbp 0x0000000000401160 <+15>: retq End of assembler dump. gdb/ChangeLog: * cli/cli-cmds.c (block.h): Include. (print_disassembly): Handle printing of non-contiguous blocks. (disassemble_current_function): Likewise. (disassemble_command): Likewise.
2018-08-23Add support for non-contiguous blocks to find_pc_partial_functionKevin Buettner3-23/+121
This change adds an optional output parameter BLOCK to find_pc_partial_function. If BLOCK is non-null, then *BLOCK will be set to the address of the block corresponding to the function symbol if such a symbol was found during lookup. Otherwise it's set to the NULL value. Callers may wish to use the block information to determine whether the block contains any non-contiguous ranges. The caller may also iterate over or examine those ranges. When I first started looking at the broken stepping behavior associated with functions w/ non-contiguous ranges, I found that I could "fix" the problem by disabling the find_pc_partial_function cache. It would sometimes happen that the PC passed in would be between the low and high cache values, but would be in some other function that happens to be placed in between the ranges for the cached function. This caused incorrect values to be returned. So dealing with this cache turns out to be very important for fixing this problem. I explored three different ways of dealing with the cache. My first approach was to clear the cache when a block was encountered with more than one range. This would cause the non-cache pathway to be executed on the next call to find_pc_partial_function. Another approach, which I suspect is slightly faster, checks to see whether the PC is within one of the ranges associated with the cached block. If so, then the cached values can be used. It falls back to the original behavior if there is no cached block. The current approach, suggested by Simon Marchi, is to restrict the low/high pc values recorded for the cache to the beginning and end of the range containing the PC value under consideration. This allows us to retain the simple (and fast) test for determining whether the memoized (cached) values apply to the PC passed to find_pc_partial_function. Another choice that had to be made regards setting *ADDRESS and *ENDADDR. There are three possibilities which might make sense: 1) *ADDRESS and *ENDADDR represent the lowest and highest address of the function. 2) *ADDRESS and *ENDADDR are set to the start and end address of the range containing the entry pc. 3) *ADDRESS and *ENDADDR are set to the start and end address of the range in which PC is found. An earlier version of this patch implemented option #1. I found out that it's not very useful though and, in fact, returns results that are incorrect when used in the context of determining the start and end of the function for doing prologue analysis. While debugging a function in which the entry pc was in the second range (of a function containing two non-contiguous ranges), I noticed that amd64_skip_prologue called find_pc_partial_function - the returned start address was set to the beginning of the first range. This is incorrect for this function. What was also interesting was that this first invocation of find_pc_partial_function correctly set the cache for the PC on which it had been invoked, but a slightly later call from skip_prologue_using_sal could not use this cached value because it was now being used to lookup the very lowest address of the function - which is in a range not containing the entry pc. Option #2 is attractive as it would provide a desirable result when used in the context of prologue analysis. However, many callers, including some which do prologue analysis want the condition *ADDRESS <= PC < *ENDADDR to hold. This will not be the case when find_pc_partial_function is called on a PC that's in a non-entry-pc range. A later patch to this series adds find_function_entry_range_from_pc as a wrapper of find_pc_partial_function. Option #3 causes the *ADDRESS <= PC < *ENDADDR property to hold. If find_pc_partial_function is called with a PC that's within entry pc's range, then it will correctly return the limits of that range. So, if the result of a minsym search is passed to find_pc_partial_function to find the limits, then correct results will be achieved. Returned limits (for prologue analysis) won't be correct when PC is within some other (non-entry-pc) range. I don't yet know how big of a problem this might be; I'm guessing that it won't be a serious problem - if a compiler generates functions which have non-contiguous ranges, then it also probably generates DWARF2 CFI which makes a lot of the old prologue analysis moot. I've implemented option #3 for this version of the patch. I don't see any regressions for x86-64. Moreover, I don't expect to see regressions for other targets either simply because find_pc_partial_function behaves the same as it did before for the contiguous address range case. That said, there may be some adjustments needed if GDB encounters a function requiring prologue analysis which occupies non-contiguous ranges. gdb/ChangeLog: * symtab.h (find_pc_partial_function): Add new parameter `block'. * blockframe.c (cache_pc_function_block): New static global. (clear_pc_function_cache): Clear cache_pc_function_block. (find_pc_partial_function): Move comment to symtab.h. Add support for non-contiguous blocks.
2018-08-23Record explicit block ranges from dwarf2read.cKevin Buettner2-0/+6
This change sets BLOCK_RANGES for the block under consideration by calling make_blockranges(). This action is performed in dwarf2_record_block_ranges(). It should be noted that dwarf2_record_block_ranges() already does some recording of the range via a call to record_block_range(). The ranges recorded in that fashion end up in the address map associated with the blockvector for the compilation unit's symtab. Given an address, the addrmap provides a fast way of finding the block containing that address. The address map does not, however, provide a convenient way of determining which address ranges make up a particular block. While reading a set of ranges, a vector of pairs is used to collect the starting and ending addresses for each range in the block. Once all of the ranges for a block have been collected, make_blockranges() is called to fill in BLOCK_RANGES for the block. The ranges are stored for the block in the order that they're read from the debug info. For DWARF, the starting address of the first range of the block will be the entry pc in cases where DW_AT_entry_pc is not present. (Well, that would ideally be the case. At the moment DW_AT_entry_pc is not being handled.) gdb/ChangeLog: * dwarf2read.c (dwarf2_record_block_ranges): Fill in BLOCK_RANGES for block.
2018-08-23Add block range data structure for blocks with non-contiguous address rangesKevin Buettner3-0/+116
This patch does the following: - Introduces a block range data structure which is accessed via a new field in struct block. - Defines several macros for accessing block ranges. - Defines a new function, make_blockrange, which is responsible for creating the new data structure. It should be noted that some support for non-contiguous ranges already existed in GDB in the form of blockvector addrmaps. This support allowed GDB to quickly find a block containing a particular address even when the block consists of non-contiguous addresses. See find_block_in_blockvector() in block.c, dwarf2_record_block_ranges() in dwarf2read.c, and record_block_range() in buildsym.c. Addrmaps do not provide a convenient way to examine address ranges associated with a particular block. This data structure (and its interface) is set up for quickly finding the value (which in this case is a block) associated with a particular address. The interface does not include a method for doing a reverse mapping from blocks to addresses. A linear time mapping might be attempted via use of the addrmap's foreach method, but this is not as straightforward as it might first appear due to the fact that blocks corresponding to inline function instances and lexical blocks w/ variables end up getting interspersed in in the set of transitions. Note: If this approach is deemed to be too expensive in terms of space, an alternate approach might be to attempt the linear time mapping noted above. find_pc_partial_function() needs to be able to quickly know whether there are discontiguous ranges, so a flag for this property would have to be added to struct block. Also integral to this set of changes is the concept of an "entry pc" which might be different from the block's start address. An entry_pc field would also need to be added to struct block. This does not result in any space savings in struct block though since the space for the flag and entry_pc use more space than the blockranges struct pointer that I've added. There would, however, be some space savings due to the fact that the new data structures that I've added for this patch would not need to be allocated. (I happen to like the approach I've come up with, but I wanted to mention another possibility just in case someone does not.) gdb/ChangeLog: * block.h (blockrange, blockranges): New struct declarations. (struct block): Add new field named `ranges'. (BLOCK_RANGES, BLOCK_NRANGES, BLOCK_RANGE, BLOCK_CONTIGUOUS_P) (BLOCK_RANGE_START, BLOCK_RANGE_END, BLOCK_ENTRY_PC): New macros for accessing ranges in struct block. (make_blockranges): New declaration. block.c (make_blockranges): New function.
2018-08-23RISC-V: Reject empty rouding mode and fence operand.Jim Wilson8-0/+34
gas/ 2018-08-23 Kito Cheng <kito@andestech.com> * config/tc-riscv.c (arg_lookup): Checking length before look up. * testsuite/gas/riscv/fence-fail.d: New file. * testsuite/gas/riscv/fence-fail.l: Likewise. * testsuite/gas/riscv/fence-fail.s: Likewise. * testsuite/gas/riscv/rouding-fail.d: Likewise. * testsuite/gas/riscv/rouding-fail.l: Likewise. * testsuite/gas/riscv/rouding-fail.s: Likewise.
2018-08-23Avoid problems with plugins being loaded multiple times.Zenith4232-14/+45
PR 23460 * plugin.c (struct plugin_list_entry): New structure. (plugin_list): New variable. (try_load_plugin): Place opened plugins on a list. Ensure that the refcount in the dynamic loader is kept at 1.
2018-08-23Darwin: fix bad loop incrementationXavier Roirand2-1/+6
When reading symbols from the vector of oso files on Mac OS X Darwin, a previous commit introduce a change in the loop and add an increment at each loop iteration whereas this incrementation is not needed since the increment or set of the loop control variable is already done in the loop. gdb/ChangeLog: * machoread.c (macho_symfile_read_all_oso): Remove uneeded incrementation. Change-Id: I3a5a6deb4e9d834ee7d4217a62d90c2ffb7241bc
2018-08-24PR23566, false uninitialized warningAlan Modra2-10/+8
PR 23566 * emultempl/elf32.em (before_allocation): Warning fix.
2018-08-24PowerPC64 "call lacks nop"Alan Modra2-2/+7
The "-fPIC" and "-mcmodel=small" parts of these messages isn't always true, so lets dispense with that and just report the type of stub causing trouble. * elf64-ppc.c (ppc64_elf_relocate_section): Revise "call lacks nop" error message.
2018-08-24PowerPC64 st_other decoding in readelfAlan Modra2-3/+14
localentry:1 is a valid encoding, so display it. The patch also bails out of get_ppc64_symbol_other when st_other bits besides the three used for localentry offsets are set, to avoid hiding any such values. * readelf.c (get_ppc64_symbol_other): Return NULL if st_other field contains unrecognised or reserved values. Handle localentry:1 value.
2018-08-23Prune BFD warnings for unknown GNU propertiesH.J. Lu15-32/+139
When glibc is enabled with the new GNU_PROPERTY_X86_XXX bits: https://groups.google.com/forum/#!topic/x86-64-abi/-D05GQ3kWrA BFD will issue an unknown GNU property warning like warning: tmpdir/ld1: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010001 and ignore such GNU properties. This patch adds prune_warnings_extra to prune such warnings on release branches and updates prune_warnings to call prune_warnings_extra. binutils/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. * testsuite/binutils-all/objcopy.exp (strip_test): Call prune_warnings to prune BFD output. (strip_test_with_saving_a_symbol): Likewise. (objcopy_test_without_global_symbol): Likewise. * testsuite/lib/binutils-common.exp (prune_warnings_extra): New proc. (prune_warnings): Likewise. gas/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. ld/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. * testsuite/ld-bootstrap/bootstrap.exp: Call prune_warnings to prune BFD output. * testsuite/ld-plugin/lto.exp: Likewise. * testsuite/lib/ld-lib.exp (prune_warnings): Removed. * testsuite/ld-elf/shared.exp: Allow "\n" in linker warnings.
2018-08-23Document setting experimental on release branch.H.J. Lu2-2/+8
* README-how-to-make-a-release: Document setting "experimental" to false.
2018-08-23Replace unworkable code in HPPA relocs handelr with an assertion.Nick Clifton2-27/+11
* elf64-hppa.c (elf_hppa_final_link_relocate): Replace unworkable code with an assertion.
2018-08-23Prevent illegal memory access when processing COFF auxillary symbol information.Nick Clifton2-4/+17
PR 23061 * coffgen.c (coff_pointerize_aux): Add table_end parameter. Use it to prevent walking off the end of the table. (coff_get_normalized_symtab): Pass internal_end pointer to coff_pointerize_aux.
2018-08-23Fix "unresolved reloc" error for NOTOC relocsAlan Modra2-3/+7
* elf64-ppc.c (ppc64_elf_relocate_section): Don't miss clearing unresolved_reloc on ppc_stub_plt_call_notoc.
2018-08-23Automatic date update in version.inGDB Administrator1-1/+1
2018-08-22Make read_program_headers_from_bfd return a gdb::byte_vectorSimon Marchi2-37/+27
This patch makes read_program_headers_from_bfd return a gdb::byte_vector instead of a plain pointer. gdb/ChangeLog: * solib-svr4.c (read_program_headers_from_bfd): Return gdb::optional<gdb::byte_vector>. (svr4_exec_displacement): Adjust.
2018-08-22Make read_program_header return a gdb::byte_vectorSimon Marchi2-71/+70
While reading a recent patch, I found this spot where a gdb::byte_vector could be used instead of an allocated buffer returned as a plain pointer. gdb/ChangeLog: * solib-svr4.c (read_program_header): Return gdb::optional<gdb::byte_vector>, remove p_sect_size param. (find_program_interpreter): Return gdb::optional<gdb::byte_vector>. (scan_dyntag_auxv): Adjust. (enable_break): Adjust. (svr4_exec_displacement): Adjust.
2018-08-22Restore behavior of disabling address randomization by default on GDBserverSimon Marchi2-1/+8
Commit c12a508 ("Add client_state struct.") inadvertently changed the default behavior of GDBserver wrt address randomization. The old disable_randomization global variable was initialized to 1, whereas the corresponding field in the client_state structure is initialized to 0. This fixes make check TESTS="gdb.base/jit-simple.exp" RUNTESTFLAGS="--target_board=native-gdbserver" make check TESTS="gdb.base/execl-update-breakpoints.exp" RUNTESTFLAGS="--target_board=native-gdbserver" Note that the execl-update-breakpoints.exp would only fail on systems where the toolchain emits position-independent executables by default (otherwise the main executable position is never randomized, so the value of disable_randomization didn't matter). gdb/gdbserver/ChangeLog: PR gdb/23374 PR gdb/23375 * server.h (struct client_state) <disable_randomization>: Initialize to 1.