Commit Graph

103108 Commits

Author SHA1 Message Date
Alan Modra
602e9f0ae7 ubsan: tc-d30v.c left shift cannot be represented
* config/tc-d30v.c (parallel_ok): Use 1UL for left shift expression.
2020-09-02 16:30:43 +09:30
Alan Modra
17e782e94f ubsan: rx-parse.y:1743 shift exponent 32 is too large
* config/rx-parse.y (rx_intop): Avoid too large shifts.
	(rx_intop, rx_uintop, rx_disp3op, rx_disp5op, displacement),
	(rtsd_immediate): Use correctly typed unsigned variables.
2020-09-02 16:30:43 +09:30
Alan Modra
4dda287bf6 ubsan: obj-macho.c:503 left shift cannot be represented
* config/obj-macho.c (obj_mach_o_zerofill): Correct type of
	constant shifted left.
2020-09-02 16:30:43 +09:30
Alan Modra
251150adb1 ubsan: bfin-lex.l:503 left shift cannot be represented
* config/bfin-lex.l: Use an unsigned type for "value".
2020-09-02 16:30:42 +09:30
Alan Modra
839f41a323 ubsan: objdump.c:3009 negation of -2147483648
* objdump.c (disassemble_bytes): Use an unsigned type for "addend".
2020-09-02 16:30:42 +09:30
Alan Modra
26009aa763 ubsan elfnn-aarch64.c:7142 shift exponent 32 is too large
* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Correct type
	of constant shifted left.
2020-09-02 16:30:42 +09:30
Alan Modra
2f26cc79cc ubasn: elf32-pru.c:570 left shift of negative value
* elf32-pru.c (pru_elf32_do_ldi32_relocate): Use an unsigned
	type for "relocation".
2020-09-02 16:30:42 +09:30
Alan Modra
f6e6b05211 32-bit host pdp11 breakage
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-02 16:30:42 +09:30
Cooper Qu
4211a34001 CSKY: Add CPU CK803r3.
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-02 14:21:31 +08:00
Cooper Qu
8119cc3837 CSKY: Fix Encode of mulsws.
gas/
	* testsuite/gas/csky/cskyv2_dsp.d : Fix Encode of mulsws.

opcodes/
	* csky-opc.h (csky_v2_opcodes): Fix Encode of mulsws.
2020-09-02 14:21:21 +08:00
Cooper Qu
e61ef79e3a CSKY: Refine literals pool dump process and float register parser.
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-02 14:21:02 +08:00
GDB Administrator
7d0a7dce39 Automatic date update in version.in 2020-09-02 00:00:09 +00:00
Simon Marchi
ef5e5b0b65 gdb: change bcache::insert added parameter to bool
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-01 12:55:57 -04:00
H.J. Lu
4c8584be76 ELF: Document the .tls_common directive
Document the .tls_common directive added by

commit b8871f357f
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-01 07:47:00 -07:00
Alan Modra
8dbe96f070 mep: ubsan: mep-ibld.c:1635,1645,1652 left shift of negative value
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-01 16:03:08 +09:30
Alan Modra
821e059c26 arm: ubsan: shift exponent 4G
* 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-01 16:02:48 +09:30
Alan Modra
7af677524e PR26420, PR26421, PR26425, PR26427 UBSAN: tc-arm.c left shifts
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-01 16:02:48 +09:30
Alan Modra
f911bb2201 PR26429 UBSAN: elf32-arm.c load /store misaligned address
PR 26429
	* elf32-arm.c (elf32_arm_allocate_local_sym_info): Allocate arrays
	in descending order of alignment.
2020-09-01 16:02:48 +09:30
Alan Modra
00c91124d4 PR26423 UBSAN: elf32-arm.c:10237 left shift cannot be represented
PR 26423
	* elf32-arm.c (calculate_group_reloc_mask): Use 3u in shift.
2020-09-01 16:02:48 +09:30
Kevin Buettner
efe24f056f corefile.exp: XFAIL warning-free test when testing on docker
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-31 18:57:35 -07:00
Kevin Buettner
973695d6bb Work around incorrect/broken pathnames in NT_FILE note
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-31 18:53:17 -07:00
Simon Marchi
264fc0e27b gdb: change type of field_info::non_public_fields to bool
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-31 21:06:20 -04:00
Simon Marchi
2de01bdb2e gdb: fix indentation of struct field_info
The indentation is off, fix it before doing other changes.

gdb/ChangeLog:

	* dwarf2/read.c (struct field_info): Fix indentation.

Change-Id: Ife6a3d017abcf0a33e49e47e51429e95d504343c
2020-08-31 21:05:37 -04:00
GDB Administrator
6a42ec96ca Automatic date update in version.in 2020-09-01 00:00:09 +00:00
Simon Marchi
f3bd50f198 gdb: fix nits in previous patches
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-31 13:31:01 -04:00
Scott Linder
22b9b4b05b gdb: support frames inlined into the outer frame
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-31 13:25:05 -04:00
Simon Marchi
84154d166a gdb: introduce explicit outer frame id kind
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-31 13:23:12 -04:00
Simon Marchi
8efaf6b352 gdb: make frame_unwind_got_optimized return a not_lval value
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. 901461f8eb ("Print registers not saved in the frame as "<not saved>"
   instead of "<optimized out>".").
2. 6bd273ae45 ("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-31 13:22:54 -04:00
Simon Marchi
fe1fe7eae9 gdb: remove NULL_TYPE
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-31 10:44:33 -04:00
Alan Modra
06de2e0da2 PR26510 UBSAN: tc-z8k.c left shift of negative value
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-31 20:28:13 +09:30
Alan Modra
8e82201777 PR26503 UBSAN: tc-v850.c:1447 left shift cannot be represented
PR 26503
	* config/tc-v850.c (parse_register_list): Shift 1u left.
2020-08-31 20:28:13 +09:30
Alan Modra
94f360ea2f PR26502 UBSAN: tc-tic6x.c left shift of negative value
PR 26502
	* config/tc-tic6x.c (md_apply_fix): Use unsigned variables.
2020-08-31 20:28:12 +09:30
Alan Modra
8659fff005 PR26497 UBSAN: tc-sh.c:2467 left shift cannot be represented
PR 26497
	* config/tc-sh.c (assemble_ppi): Use unsigned variables.
2020-08-31 20:28:12 +09:30
Alan Modra
548c8b2ba7 PR26495 UBSAN: tc-score.c, tc-score7.c left shift of negative value
PR 26495
	* config/tc-score.c (s3_apply_fix): Use unsigned variables.
	* config/tc-score7.c (s7_apply_fix): Likewise.
2020-08-31 20:28:12 +09:30
Alan Modra
51bf29b1f7 PR26480 UBSAN: tc-nios2.c:1634 left shift cannot be represented
PR 26480
	* config/tc-nios2.c (nios2_parse_reglist): Shift 1UL left.
2020-08-31 20:28:12 +09:30
Alan Modra
baeb994f3f PR26479 UBSAN: tc-nios2.c:244 left shift cannot be represented
PR 26479
	* config/tc-nios2.c (md_chars_to_number): Cast buf[i] before shifting.
2020-08-31 20:28:11 +09:30
Alan Modra
e0fd91ef81 PR26472, PR26473, PR26474 UBSAN: tc-mips.c shift left UB
PR 26472
	PR 26473
	PR 26474
	* config/tc-mips.c (operand_reg_mask): Shift 1u left.
	(load_register): Shift 0xffffU left.
2020-08-31 20:28:11 +09:30
Alan Modra
46021a61e4 PR26471 UBSAN: tc-metag.c:7038 left shift cannot be represented
PR 26471
	* config/tc-metag.c (md_chars_to_number): Make retval unsigned.
2020-08-31 20:28:11 +09:30
Alan Modra
7a5dd76f3c PR26468 UBSAN: tc-mep.c:1684 left shift of negative value
PR 26468
	* config/tc-mep.c (md_convert_frag): Use uint32_t for addend and
	other variables.
2020-08-31 20:28:11 +09:30
Alan Modra
169ec51259 PR26493 UBSAN: tc-riscv.c left shift negative and not representable
PR 26493
	* config/tc-riscv.c (riscv_ip): Cast X_add_number passed to
	VALID_* macros to unsigned.
2020-08-31 20:28:11 +09:30
Alan Modra
1174d92070 PR26493 UBSAN: elfnn-riscv.c left shift of negative value
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-31 20:28:10 +09:30
Alan Modra
227d539b17 PR26476, PR26477 UBSAN: elfxx-mips.c:2695,5370 cannot be represented
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-31 20:28:10 +09:30
Alan Modra
1a211fc7d8 PR26466 UBSAN: elf32-mep.c:300 left shift of negative value
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-31 20:28:10 +09:30
Alan Modra
108f6f97bd PR26461 UBSAN: elfxx-ia64.c:747 cannot be represented
PR 26461
	* elfxx-ia64.c (ia64_elf_install_value): Make expressions unsigned
	that might shift values into sign bit.
2020-08-31 20:28:10 +09:30
Alan Modra
a148a448ec PR26457 UBSAN: som.c:1794 left shift cannot be represented
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-31 20:28:09 +09:30
Alan Modra
f2173852cf PR26445 UBSAN: elf32-csky.c:4115 left shift of negative value
PR 26445
	* elf32-csky.c (csky_relocate_contents): Make relocation a bfd_vma,
	and similarly for variables dealing with overflow.
2020-08-31 20:28:09 +09:30
Alan Modra
880fc278ca crx: ubsan: cannot be represented
* 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-31 20:28:09 +09:30
Alan Modra
c1f138f955 PR26442 UBSAN: elf32-crx.c:512 cannot be represented in int
PR 26442
	* elf32-crx.c (crx_elf_final_link_relocate): Calculate reloc_bits
	without undefined behaviour.  Tidy excess casts.
2020-08-31 20:28:09 +09:30
Alan Modra
26e3de8e0a PR26509 UBSAN: tc-z80.c:3656 shift exponent is too large
PR 26509
	* config/tc-z80.c (is_overflow): Use 1UL in mask shift expression.
2020-08-31 20:28:09 +09:30
Alan Modra
8f383897b6 mn10300: ubsan: shift exponent too large
* elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate
	alignment from reloc addend after reloc type R_MN10300_ALIGN is
	found.
2020-08-31 20:28:08 +09:30