aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-09-02ubsan: objdump.c:3009 negation of -2147483648Alan Modra2-2/+6
* objdump.c (disassemble_bytes): Use an unsigned type for "addend".
2020-09-02ubsan elfnn-aarch64.c:7142 shift exponent 32 is too largeAlan Modra2-1/+6
* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Correct type of constant shifted left.
2020-09-02ubasn: elf32-pru.c:570 left shift of negative valueAlan Modra2-1/+6
* elf32-pru.c (pru_elf32_do_ldi32_relocate): Use an unsigned type for "relocation".
2020-09-0232-bit host pdp11 breakageAlan Modra2-0/+7
If bfd_vma is 32 bits, gcc complains about shift counts exceeding width of the type. * config/tc-pdp11.c (md_number_to_chars): Condition nbytes=8 code on BFD64.
2020-09-02CSKY: Add CPU CK803r3.Cooper Qu6-19/+39
Move divul and divsl to CSKYV2_ISA_3E3R3 instruction set, which is enabled by ck803r3, and it's still a part of enhance DSP instruction set. gas/ * config/tc-csky.c (csky_cpus): Add ck803r3. (CSKY_ISA_803R3): Define. (CSKY_ISA_803R2): Refine, use CSKY_ISA_803R1. include/ * opcode/csky.h (CSKYV2_ISA_3E3R3): Define. opcodes/ * csky-opc.h (csky_v2_opcodes): Move divul and divsl to CSKYV2_ISA_3E3R3 instruction set.
2020-09-02CSKY: Fix Encode of mulsws.Cooper Qu4-2/+10
gas/ * testsuite/gas/csky/cskyv2_dsp.d : Fix Encode of mulsws. opcodes/ * csky-opc.h (csky_v2_opcodes): Fix Encode of mulsws.
2020-09-02CSKY: Refine literals pool dump process and float register parser.Cooper Qu2-3/+58
gas/ * config/tc-csky.c (struct literal): New member bignum. (dump_literals): Handle big constant. (enter_literal): Likewise. (parse_type_freg): Handle vector register.
2020-09-02Automatic date update in version.inGDB Administrator1-1/+1
2020-09-01gdb: change bcache::insert `added` parameter to boolSimon Marchi5-15/+20
It is currently an int, but it is used as a bool. gdb/ChangeLog: * bcache.h (struct bcache) <insert>: Change type of `added` to pointer to bool. * bcache.c (bcache::insert): Likewise. * gdbtypes.c (check_types_worklist): Adjust. * psymtab.c (add_psymbol_to_bcache): Adjust. Change-Id: I06b1041636c656782a89cb6106c9ae2593f61616
2020-09-01ELF: Document the .tls_common directiveH.J. Lu2-0/+17
Document the .tls_common directive added by commit b8871f357fdfa9c0c06d2d3e5600391d8c994f37 Author: H.J. Lu <hjl.tools@gmail.com> Date: Mon Feb 22 09:18:52 2016 -0800 Properly implement STT_COMMON * doc/as.texi: Document the .tls_common directive.
2020-09-01mep: ubsan: mep-ibld.c:1635,1645,1652 left shift of negative valueAlan Modra4-10/+20
cpu/ * mep-core.cpu (f-8s8a2, f-12s4a2, f-17s16a2): Multiply signed value by two rather than shifting left. (f-24s5a2n): Similarly multiply signed f-24s5a2n-hi to extract. opcodes/ * mep-ibld.c: Regenerate.
2020-09-01arm: ubsan: shift exponent 4GAlan Modra3-4/+11
* reloc.c (N_ONES): Handle N=0. * elf32-arm.c (elf32_arm_howto_table_1): Set complain_overflow_dont for R_ARM_TLS_DESCSEQ and R_ARM_THM_TLS_DESCSEQ.
2020-09-01PR26420, PR26421, PR26425, PR26427 UBSAN: tc-arm.c left shiftsAlan Modra2-78/+98
PR 26420 PR 26421 PR 26425 PR 26427 * config/tc-arm.c (struct arm_it): Make size, size_req, cond and uncond_value unsigned. (parse_vfp_reg_list): Make setmask unsigned, vpr_str_len size_t. (parse_big_immediate): Cast generic_bignum elements to unsigned. (encode_thumb32_immediate): Shift left 0xffU. (double_to_single): Make sign unsigned. Tidy. (move_or_literal_pool): Cast LITTLE_NUM elements to uint64_t or valueT. (vfp_or_neon_is_neon): Adjust inst.uncond_value expression. (md_assemble): Likewise. (handle_pred_state): Make cond unsigned. (thumb32_negate_data_op): Make variables unsigned. (md_apply_fix): Make value and newval unsigned, adjust uses.
2020-09-01PR26429 UBSAN: elf32-arm.c load /store misaligned addressAlan Modra2-8/+27
PR 26429 * elf32-arm.c (elf32_arm_allocate_local_sym_info): Allocate arrays in descending order of alignment.
2020-09-01PR26423 UBSAN: elf32-arm.c:10237 left shift cannot be representedAlan Modra2-1/+6
PR 26423 * elf32-arm.c (calculate_group_reloc_mask): Use 3u in shift.
2020-08-31corefile.exp: XFAIL warning-free test when testing on dockerKevin Buettner2-0/+12
When testing on docker using the AUFS storage driver, loading a core file will often print a number of warnings. Here's an example (with the pathname shortened somewhat): warning: Can't open file /var/lib/docker/aufs/diff/d07..e21/lib/x86_64-linux-gnu/libc-2.27.so during file-backed mapping note processing The "warning-free" test in gdb.base/corefile.exp will fail if any warnings are printed, but this particular warning is unavoidable when running in the docker environment. Fortunately, the path mentions both "docker" and "aufs", making it easy to XFAIL this case. gdb/testsuite/ChangeLog: * gdb.base/corefile.exp (warning-free): XFAIL test when running on docker w/ AUFS storage driver.
2020-08-31Work around incorrect/broken pathnames in NT_FILE noteKevin Buettner4-8/+117
Luis Machado reported some regressions after I pushed recent core file related patches fixing BZ 25631: FAIL: gdb.base/corefile.exp: backtrace in corefile.exp FAIL: gdb.base/corefile.exp: core-file warning-free FAIL: gdb.base/corefile.exp: print func2::coremaker_local FAIL: gdb.base/corefile.exp: up in corefile.exp FAIL: gdb.base/corefile.exp: up in corefile.exp (reinit) This commit fixes these regressions. Thanks to Luis for testing an earlier version of the patch. (I was unable to reproduce these regressions in various test environments that I created.) Luis is testing in a docker container which is using the AUFS storage driver. It turns out that the kernel is placing docker host paths in the NT_FILE note instead of paths within the container. I've made a similar docker environment (though apparently not similar enough to reproduce the regressions). This is one of the paths that I see mentioned in the warning messages printed while loading the core file during NT_FILE note processing - note that I've shortened the path component starting with "d07c4": /var/lib/docker/aufs/diff/d07c4...21/lib/x86_64-linux-gnu/ld-2.27.so This is a path on the docker host; it does not exist in the container. In the docker container, this is the path: /lib/x86_64-linux-gnu/ld-2.27.so My first thought was to disable all NT_FILE mappings when any path was found to be bad. This would have caused GDB to fall back to accessing memory using the file stratum as it did before I added the NT_FILE note loading code. After further consideration, I realized that we could do better than this. For file-backed memory access, we can still use the NT_FILE mappings when available, and then attempt to access memory using the file stratum constrained to those address ranges corresponding to the "broken" mappings. In order to test it, I made some additions to corefile2.exp in which the test case's executable is renamed. The core file is then loaded; due to the fact that the executable has been renamed, those mappings will be unavailable. After loading the core file, the executable is renamed back to its original name at which point it is loaded using GDB's "file" command. The "interesting" tests are then run. These tests will print out values in file-backed memory regions along with mmap'd regions placed within/over the file-backed regions. Despite the fact that the executable could not be found during the NT_FILE note processing, these tests still work correctly due to the fact that memory is available from the file stratum combined with the fact that the broken NT_FILE mappings are used to prevent file-backed access outside of the "broken" mappings. gdb/ChangeLog: * corelow.c (unordered_set): Include. (class core_target): Add field 'm_core_unavailable_mappings'. (core_target::build_file_mappings): Print only one warning per inaccessible file. Add unavailable/broken mappings to m_core_unavailable_mappings. (core_target::xfer_partial): Call... (core_target::xfer_memory_via_mappings): New method. gdb/testsuite/ChangeLog: * gdb.base/corefile2.exp (renamed binfile): New tests.
2020-08-31gdb: change type of field_info::non_public_fields to boolSimon Marchi2-3/+8
gdb/ChangeLog: * dwarf2/read.c (struct field_info) <non_public_fields>: Change type to bool. (dwarf2_add_field): Use true instead of 1. Change-Id: I7e9c86429402c28d4f15861d17976b9c50049f94
2020-08-31gdb: fix indentation of struct field_infoSimon Marchi2-28/+32
The indentation is off, fix it before doing other changes. gdb/ChangeLog: * dwarf2/read.c (struct field_info): Fix indentation. Change-Id: Ife6a3d017abcf0a33e49e47e51429e95d504343c
2020-09-01Automatic date update in version.inGDB Administrator1-1/+1
2020-08-31gdb: fix nits in previous patchesSimon Marchi5-3/+13
I forgot to fix some nits pointed out in review before merging the "frame inlined in outer frame series", this patch fixes them. gdb/ChangeLog: * frame-unwind.h (frame_prev_register_ftype): Fix adjective ordering in comment. * frame.c (frame_id_eq): Fix indentation. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-reg-undefined.exp: Remove spurious #. Change-Id: Iaddde9677fc3f68382558d1a16f5a0b4beb78bac
2020-08-31gdb: support frames inlined into the outer frameScott Linder5-4/+262
Remove the restriction (gdb_assert) that prevents creating frames inlined in the outer frame. Like for frames inlined in a standard frame (FID_STACK_VALID), a frame inlined into the outer frame will have: - artificial_depth greater than 0 - code_addr equal to the first executed instruction in the block corresponding to the inlined function It will however have its stack_status set to FID_STACK_OUTER, like the outer frame. This is not typically seen on your everyday system (e.g. a Linux / x86-64 process), because the outer frame would be for instance the _start function, probably written in assembly and very unlikely to have anything inlined in it. However this could happen in more "bare-metal" scenarios. In particular, this was seen in ROCm GDB [1], where the compiler does inline functions in the top-level kernel functions (kernel in the sense of compute kernel, not userspace vs kernel). I however wrote a test that replicates the issue on x86-64 and a few other arches I had access to. Since we need to control precisely the emitted DWARF CFI, I didn't find another way than to write it in assembly. The DWARF is generated using the testsuite's DWARF assembler, except the unwind information, which is written using CFI directives (and therefore generated by the actual assembler). I think the test is adequately commented, but if anything is unclear, just ask and I'll add more info. [1] https://github.com/ROCm-Developer-Tools/ROCgdb/ gdb/ChangeLog: YYYY-MM-DD Scott Linder <scott@scottlinder.com> YYYY-MM-DD Simon Marchi <simon.marchi@efficios.com> * inline-frame.c (inline_frame_this_id): Remove assert that prevents inline frame ids in outer frame. gdb/testsuite/ChangeLog: * gdb.dwarf2/frame-inlined-in-outer-frame.exp: New file. * gdb.dwarf2/frame-inlined-in-outer-frame.S: New file. Change-Id: I8aa129c667dccc31590ffdf426586418493a6ebe
2020-08-31gdb: introduce explicit outer frame id kindSimon Marchi3-16/+20
In the following patch, we'll need to easily differentiate the frame_id of the outer frame (or the frame id of a frame inlined into the outer frame) from a simply invalid frame id. Currently, the frame id of the outer frame has `stack_status` set to FID_STACK_INVALID plus special_addr_p set. A frame inlined into the outer frame would also have `artificial_depth` set to greater than one. That makes the job of differntiating the frame id of the outer frame (or a frame inlined into the outer frame) cumbersome. To make it easier, give the outer frame id its own frame_id_stack_status enum value. outer_frame_id then becomes very similar to sentinel_frame_id, another "special" frame id value. In frame_id_p, we don't need a special case for the outer frame id, as it's no long a special case of FID_STACK_INVALID. Same goes for frame_id_eq. So in the end, FID_STACK_OUTER isn't even used (except in fprint_frame_id). But that's expected: all the times we wanted to identify an outer frame was to differentiate it from an otherwise invalid frame. Since their frame_id_stack_status value is different now, that is done naturally. gdb/ChangeLog: * frame.h (enum frame_id_stack_status) <FID_STACK_OUTER>: New. * frame.c (fprint_frame_id): Handle FID_STACK_OUTER. (outer_frame_id): Use FID_STACK_OUTER instead of FID_STACK_INVALID. (frame_id_p): Don't check for outer_frame_id. Change-Id: I654e7f936349debc4f04f7f684b15e71a0c37619
2020-08-31gdb: make frame_unwind_got_optimized return a not_lval valueSimon Marchi6-13/+31
TLDR: frame_unwind_got_optimized uses wrong frame id value, trying to fix it makes GDB sad, return not_lval value and don't use frame id value instead. Longer version: The `prev_register` method of the `frame_unwind` interface corresponds to asking the question: "where did this frame - passed as a parameter - save the value this register had in its caller frame?". When "this frame" did not save that register value (DW_CFA_undefined in DWARF), the implementation can use the `frame_unwind_got_optimized` function to create a struct value that represents the optimized out / not saved register. `frame_unwind_got_optimized` marks the value as fully optimized out, sets the lval field to lval_register and assigns the required data for lval_register: the next frame id and the register number. The problem is that it uses the frame id from the wrong frame (see below for in depth explanation). In practice, this is not problematic because the frame id is never used: the value is already not lazy (and is marked as optimized out), so the value is never fetched from the target. When trying to change it to put the right next frame id in the value, we bump into problems: computing the frame id for some frame requires unwinding some register, if that register is not saved / optimized out, we try to get the frame id that we are currently computing. This patch addresses the problem by changing `frame_unwind_got_optimized` to return a not_lval value instead. Doing so, we don't need to put a frame id, so we don't hit that problem. It may seem like an unnecessary change today, because it looks like we're fixing something that is not broken (from the user point of view). However, the bug becomes user visible with the following patches, where inline frames are involved. I put this change in its own patch to keep it logically separate. Let's now illustrate how we are putting the wrong frame id in the value returned by `frame_unwind_got_optimized`. Let's assume this stack: frame #0 frame #1 frame #2 frame #3 Let's suppose that we are calling `frame_unwind_register_value` with frame #2 as the "next_frame" parameter and some register number X as the regnum parameter. That is like asking the question "where did frame #2 save frame #3's value for register X". `frame_unwind_register_value` calls the frame unwinder's `prev_register` method, which in our case is `dwarf2_frame_prev_register`. Note that in `dwarf2_frame_prev_register`, the parameter is now called `this_frame`, but its value is still frame #2, and we are still looking for where frame #2 saved frame #3's value of register X. Let's now suppose that frame #2's CFI explicitly indicates that the register X is was not saved (DW_CFA_undefined). We go into `frame_unwind_got_optimized`. In `frame_unwind_got_optimized`, the intent is to create a value that represents register X in frame #3. An lval_register value requires that we specify the id of the _next_ frame, that is the frame from which we would need to unwind in order to get the value. Therefore, we would want to put the id of frame #2 in there. However, `frame_unwind_got_optimized` does: VALUE_NEXT_FRAME_ID (val) = get_frame_id (get_next_frame_sentinel_okay (frame)); where `frame` is frame #2. The get_next_frame_sentinel_okay call returns frame #1, so we end up putting frame #1's id in the value. Let's now pretend that we try to "fix" it by placing the right frame id, in other words doing this change: --- a/gdb/frame-unwind.c +++ b/gdb/frame-unwind.c @@ -260,8 +260,7 @@ frame_unwind_got_optimized (struct frame_info *frame, int regnum) mark_value_bytes_optimized_out (val, 0, TYPE_LENGTH (type)); VALUE_LVAL (val) = lval_register; VALUE_REGNUM (val) = regnum; - VALUE_NEXT_FRAME_ID (val) - = get_frame_id (get_next_frame_sentinel_okay (frame)); + VALUE_NEXT_FRAME_ID (val) = get_frame_id (frame); return val; } This makes some tests fails, such as gdb.dwarf2/dw2-undefined-ret-addr.exp, like so: ... #9 0x0000557a8ab15a5d in internal_error (file=0x557a8b31ef80 "/home/simark/src/binutils-gdb/gdb/frame.c", line=623, fmt=0x557a8b31efe0 "%s: Assertion `%s' failed.") at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:55 #10 0x0000557a87f816d6 in get_frame_id (fi=0x62100034bde0) at /home/simark/src/binutils-gdb/gdb/frame.c:623 #11 0x0000557a87f7cac7 in frame_unwind_got_optimized (frame=0x62100034bde0, regnum=16) at /home/simark/src/binutils-gdb/gdb/frame-unwind.c:264 #12 0x0000557a87a71a76 in dwarf2_frame_prev_register (this_frame=0x62100034bde0, this_cache=0x62100034bdf8, regnum=16) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1267 #13 0x0000557a87f86621 in frame_unwind_register_value (next_frame=0x62100034bde0, regnum=16) at /home/simark/src/binutils-gdb/gdb/frame.c:1288 #14 0x0000557a87f855d5 in frame_register_unwind (next_frame=0x62100034bde0, regnum=16, optimizedp=0x7fff5f459070, unavailablep=0x7fff5f459080, lvalp=0x7fff5f4590a0, addrp=0x7fff5f4590b0, realnump=0x7fff5f459090, bufferp=0x7fff5f459150 "") at /home/simark/src/binutils-gdb/gdb/frame.c:1191 #15 0x0000557a87f860ef in frame_unwind_register (next_frame=0x62100034bde0, regnum=16, buf=0x7fff5f459150 "") at /home/simark/src/binutils-gdb/gdb/frame.c:1247 #16 0x0000557a881875f9 in i386_unwind_pc (gdbarch=0x621000190110, next_frame=0x62100034bde0) at /home/simark/src/binutils-gdb/gdb/i386-tdep.c:1971 #17 0x0000557a87fe58a5 in gdbarch_unwind_pc (gdbarch=0x621000190110, next_frame=0x62100034bde0) at /home/simark/src/binutils-gdb/gdb/gdbarch.c:3062 #18 0x0000557a87a6267b in dwarf2_tailcall_sniffer_first (this_frame=0x62100034bde0, tailcall_cachep=0x62100034bee0, entry_cfa_sp_offsetp=0x7fff5f4593f0) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame-tailcall.c:387 #19 0x0000557a87a70cdf in dwarf2_frame_cache (this_frame=0x62100034bde0, this_cache=0x62100034bdf8) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1198 #20 0x0000557a87a711c2 in dwarf2_frame_this_id (this_frame=0x62100034bde0, this_cache=0x62100034bdf8, this_id=0x62100034be40) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1226 #21 0x0000557a87f81167 in compute_frame_id (fi=0x62100034bde0) at /home/simark/src/binutils-gdb/gdb/frame.c:587 #22 0x0000557a87f81803 in get_frame_id (fi=0x62100034bde0) at /home/simark/src/binutils-gdb/gdb/frame.c:635 #23 0x0000557a87f7efef in scoped_restore_selected_frame::scoped_restore_selected_frame (this=0x7fff5f459920) at /home/simark/src/binutils-gdb/gdb/frame.c:320 #24 0x0000557a891488ae in print_frame_args (fp_opts=..., func=0x621000183b90, frame=0x62100034bde0, num=-1, stream=0x6030000caa20) at /home/simark/src/binutils-gdb/gdb/stack.c:750 #25 0x0000557a8914e87a in print_frame (fp_opts=..., frame=0x62100034bde0, print_level=0, print_what=SRC_AND_LOC, print_args=1, sal=...) at /home/simark/src/binutils-gdb/gdb/stack.c:1394 #26 0x0000557a8914c2ae in print_frame_info (fp_opts=..., frame=0x62100034bde0, print_level=0, print_what=SRC_AND_LOC, print_args=1, set_current_sal=1) at /home/simark/src/binutils-gdb/gdb/stack.c:1119 ... We end up calling get_frame_id (in the hunk above, frame #10) while we are computing it (frame #21), and that's not good. Now, the question is how do we fix this. I suggest making the unwinder return a not_lval value in this case. The reason why we return an lval_register here is to make sure that this is printed as "not saved" and not "optimized out" down the line. See these two commits: 1. 901461f8eb40 ("Print registers not saved in the frame as "<not saved>" instead of "<optimized out>"."). 2. 6bd273ae450b ("Make "set debug frame 1" output print <not saved> instead of <optimized out>.") The current design (introduced by the first commit) is to check the value's lval to choose which one to print (see val_print_optimized_out). Making the unwinder return not_lval instead of lval_register doesn't break "not saved" when doing "print $rax" or "info registers", because value_fetch_lazy_register only consumes the contents and optimized-out property from the value the unwinder returned. The value being un-lazified stays an lval_register. I believe that this is a correct technical solution (and not just papering over the problem), because what we expect of unwinders is to tell us where a given register's value is saved. If the value is saved in memory, -> lval_memory. If the value is saved in some other register of the next frame, -> lval_register. If the value is not saved, it doesn't really make sense to return an lval_register value. not_lval would be more appropriate. If the code then wants to represent an optimized out register value (like value_fetch_lazy_register does), then it's a separate concern which shouldn't involve the unwinder. This change breaks the output of "set debug frame 1" though (introduced by the second commit), since that logging statement consumes the return value of the unwinder directly. To keep the correct behavior, just make `frame_unwind_register_value` call `val_print_not_saved` directly, instead of `val_print_optimized_out`. This is fine because we know in this context that we are always talking about a register value, and that we want to show "not saved" for those. I augmented the gdb.dwarf2/dw2-reg-undefined.exp test case to test some cases I stumbled on while working on this, which I think are not tested anywhere: - the "set debug frame 1" debug output mentioned above. It's just debug output, but if we want to make sure it doesn't change, it should be tested - printing not-saved register values from the history (should print not saved) - copying a not-saved register value in a convenience variable. In this case, we expect that printing the convenience variable shows "optimized out", because we copied the value, not the property of where the value came from. gdb/ChangeLog: * frame-unwind.c (frame_unwind_got_optimized): Don't set regnum/frame in value. Call allocate_value_lazy. * frame.c (frame_unwind_register_value): Use val_print_not_saved. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-reg-undefined.exp: Test "set debug frame 1" output, printing a "not saved" value from history and printing a convenience variable created from a "not saved" value. Change-Id: If451739a3ef7a5b453b1f50707e21ce16d74807e
2020-08-31gdb: remove NULL_TYPESimon Marchi7-170/+169
The NULL_TYPE macro is not very useful... remove it and just use nullptr. gdb/ChangeLog: * gdbtypes.h (NULL_TYPE): Remove, change all uses to nullptr. Change-Id: Ic6215921413dad5649192b012f1a41d0a650a644
2020-08-31PR26510 UBSAN: tc-z8k.c left shift of negative valueAlan Modra2-8/+15
This also fixes the packing of the nibble buffer, which contains rubbish in the top 4 bits of each element. PR 26510 * config/tc-z8k.c (buffer): Use unsigned char. (apply_fix): Use unsigned char* pointers. (build_bytes): Likewise and mask nibbles when packing.
2020-08-31PR26503 UBSAN: tc-v850.c:1447 left shift cannot be representedAlan Modra2-1/+6
PR 26503 * config/tc-v850.c (parse_register_list): Shift 1u left.
2020-08-31PR26502 UBSAN: tc-tic6x.c left shift of negative valueAlan Modra2-21/+26
PR 26502 * config/tc-tic6x.c (md_apply_fix): Use unsigned variables.
2020-08-31PR26497 UBSAN: tc-sh.c:2467 left shift cannot be representedAlan Modra2-6/+11
PR 26497 * config/tc-sh.c (assemble_ppi): Use unsigned variables.
2020-08-31PR26495 UBSAN: tc-score.c, tc-score7.c left shift of negative valueAlan Modra3-15/+21
PR 26495 * config/tc-score.c (s3_apply_fix): Use unsigned variables. * config/tc-score7.c (s7_apply_fix): Likewise.
2020-08-31PR26480 UBSAN: tc-nios2.c:1634 left shift cannot be representedAlan Modra2-1/+6
PR 26480 * config/tc-nios2.c (nios2_parse_reglist): Shift 1UL left.
2020-08-31PR26479 UBSAN: tc-nios2.c:244 left shift cannot be representedAlan Modra2-2/+7
PR 26479 * config/tc-nios2.c (md_chars_to_number): Cast buf[i] before shifting.
2020-08-31PR26472, PR26473, PR26474 UBSAN: tc-mips.c shift left UBAlan Modra2-9/+17
PR 26472 PR 26473 PR 26474 * config/tc-mips.c (operand_reg_mask): Shift 1u left. (load_register): Shift 0xffffU left.
2020-08-31PR26471 UBSAN: tc-metag.c:7038 left shift cannot be representedAlan Modra2-1/+6
PR 26471 * config/tc-metag.c (md_chars_to_number): Make retval unsigned.
2020-08-31PR26468 UBSAN: tc-mep.c:1684 left shift of negative valueAlan Modra2-2/+8
PR 26468 * config/tc-mep.c (md_convert_frag): Use uint32_t for addend and other variables.
2020-08-31PR26493 UBSAN: tc-riscv.c left shift negative and not representableAlan Modra2-17/+23
PR 26493 * config/tc-riscv.c (riscv_ip): Cast X_add_number passed to VALID_* macros to unsigned.
2020-08-31PR26493 UBSAN: elfnn-riscv.c left shift of negative valueAlan Modra4-7/+20
include/ PR 26493 * opcode/riscv.h (OP_MASK_CSR, OP_MASK_CUSTOM_IMM) (OP_MASK_FUNCT7, OP_MASK_RS3): Make unsigned. bfd/ PR 26493 * elfnn-riscv.c (riscv_make_plt_header): Cast PLT_HEADER_SIZE to unsigned when using with RISCV_ITYPE. (_bfd_riscv_relax_call): Use an unsigned foff.
2020-08-31PR26476, PR26477 UBSAN: elfxx-mips.c:2695,5370 cannot be representedAlan Modra2-5/+14
PR 26476 PR 26477 * elfxx-mips.c (CRINFO_CTYPE, CRINFO_RTYPE, CRINFO_DIST2TO), (CRINFO_RELVADDR): Make unsigned. (mips_elf_nullify_got_load): Use unsigned constant when shifting into sign bit.
2020-08-31PR26466 UBSAN: elf32-mep.c:300 left shift of negative valueAlan Modra3-50/+57
PR 26466 * mep-relocs.pl (emit_apply): Handle HI16S adjustment. Use "u" variable and rewrite signed overflow check. * elf32-mep.c: Regenerate. (mep_final_link_relocate): Delete "s".
2020-08-31PR26461 UBSAN: elfxx-ia64.c:747 cannot be representedAlan Modra2-3/+9
PR 26461 * elfxx-ia64.c (ia64_elf_install_value): Make expressions unsigned that might shift values into sign bit.
2020-08-31PR26457 UBSAN: som.c:1794 left shift cannot be representedAlan Modra2-14/+26
PR 26457 * som/aout.h (SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK): Make unsigned. (SOM_SUBSPACE_MEMORY_RESIDENT, SOM_SUBSPACE_DUP_COMMON) (SOM_SUBSPACE_IS_COMMON, SOM_SUBSPACE_IS_LOADABLE) (SOM_SUBSPACE_QUADRANT_MASK, SOM_SUBSPACE_INITIALLY_FROZEN) (SOM_SUBSPACE_IS_FIRST, SOM_SUBSPACE_CODE_ONLY) (SOM_SUBSPACE_SORT_KEY_MASK, SOM_SUBSPACE_REPLICATE_INIT) (SOM_SUBSPACE_CONTINUATION, SOM_SUBSPACE_IS_TSPECIFIC) (SOM_SUBSPACE_IS_COMDAT): Likewise.
2020-08-31PR26445 UBSAN: elf32-csky.c:4115 left shift of negative valueAlan Modra2-12/+18
PR 26445 * elf32-csky.c (csky_relocate_contents): Make relocation a bfd_vma, and similarly for variables dealing with overflow.
2020-08-31crx: ubsan: cannot be representedAlan Modra3-128/+116
* config/tc-crx.c: Formatting. (CRX_PRINT): Wrap params in parentheses. Remove parens from uses throughout file. (reset_vars, get_register, get_copregister, get_optype, get_opbits), (get_opflags, get_number_of_operands, parse_operand, gettrap), (handle_LoadStor, getconstant, check_range, getreg_image), (parse_operands, parse_insn, print_operand, print_constant), (exponent2scale, mask_reg, process_label_constant, set_operand), (assemble_insn, print_insn): Delete unnecessary forward declaration. (print_insn): Make static. (print_constant): Make "constant" unsigned. (assemble_insn): Tidy REVERSE_MATCH index calc. * expr.c (generic_bignum_to_int32): Cast elements to valueT.
2020-08-31PR26442 UBSAN: elf32-crx.c:512 cannot be represented in intAlan Modra2-14/+13
PR 26442 * elf32-crx.c (crx_elf_final_link_relocate): Calculate reloc_bits without undefined behaviour. Tidy excess casts.
2020-08-31PR26509 UBSAN: tc-z80.c:3656 shift exponent is too largeAlan Modra2-1/+6
PR 26509 * config/tc-z80.c (is_overflow): Use 1UL in mask shift expression.
2020-08-31mn10300: ubsan: shift exponent too largeAlan Modra2-8/+16
* elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate alignment from reloc addend after reloc type R_MN10300_ALIGN is found.
2020-08-31tic4x-coff: ubsan: various shift UBAlan Modra2-10/+12
* config/tc-tic4x.c (tic4x_gen_to_words): Rewrite mantissa overflow test without UB. Avoid other UB shifts by making them unsigned.
2020-08-31[gdb/testsuite] Add nopie to gdb.base/eh_return.expTom de Vries2-1/+6
When running test-case gdb.base/eh_return.exp with target board unix/-fPIE/-pie, we run into: ... (gdb) break *0x88e^M Breakpoint 1 at 0x88e: file eh_return.c, line 54.^M (gdb) PASS: gdb.base/eh_return.exp: setting breakpoint at *0x88e run ^M Starting program: eh_return ^M Warning:^M Cannot insert breakpoint 1.^M Cannot access memory at address 0x88e^M ^M (gdb) FAIL: gdb.base/eh_return.exp: hit breakpoint ... The problem is that gdb does not support setting breakpoints on unrelocated addresses. Fix this by using nopie for the test-case. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-08-31 Tom de Vries <tdevries@suse.de> * gdb.base/eh_return.exp: Use nopie.
2020-08-31CSKY: Refine operand format error reporting.Cooper Qu4-109/+214
Rename SET_ERROR_NUMBER to SET_ERROR_STRING, and add SET_ERROR_INTEGER to report error message which pass an integer argument. gas/ * config/tc-csky.c (csky_error_state): New member 'arg_int'. (SET_ERROR_NUMBER): Rename to SET_ERROR_STRING. (SET_ERROR_INTEGER): New. (err_formats): Add error format for ERROR_FREG_OVER_RANGE and ERROR_VREG_OVER_RANGE. (csky_show_error): Pass an integer argument for some error numbers. (parse_exp): Call SET_ERROR_STRING instead of SET_ERROR_NUMBER. (parse_rt): Likewise. (parse_type_ctrlreg): Likewise. (csky_get_reg_val): Likewise. (is_reglist_legal): Likewise. (is_freglist_legal): Likewise. (is_reglist_dash_comma_legal): Likewise. (is_reg_lshift_illegal): Likewise. (is_psr_bit): Likewise. (parse_type_cpreg): Likewise. (parse_type_cpcreg): Likewise. (parse_type_areg): Likewise. (parse_type_freg): Likewise. (parse_ldst_imm): Likewise and call SET_ERROR_INTEGER. (get_operand_value): Likewise. (parse_operands_op): Likewise and call is_imm_within_range, is_imm_within_range_ext and is_oimm_within_range. (md_assemble): Likewise. (is_imm_within_range): New. (is_imm_within_range_ext): Rename from is_imm_over_range. (is_oimm_within_range): Rename from is_oimm_over_range. (v2_work_add_sub): Call SET_ERROR_INTEGER. (csky_rolc): call is_imm_within_range instead of is_imm_over_range. opcodes/ * csky-dis.c (csky_output_operand): Assign dis_info.value for OPRND_TYPE_VREG.
2020-08-31CSKY: Add warning when -mdsp and -mcpu=ck803ern are both added.Cooper Qu2-3/+22
gas/ * config/tc-csky.c (md_begin): Add warning when -mdsp and -mcpu=ck803ern are both added. (parse_ldst_imm): Fix error message.