binutils-gdb/gdb/testsuite/gdb.dwarf2
Pedro Alves e5ca03b41d Fix PR gdb/20295: GDB segfaults printing bitfield member of optimized out value
With something like:

  struct A { int bitfield:4; } var;

If 'var' ends up wholly-optimized out, printing 'var.bitfield' crashes
gdb here:

 (top-gdb) bt
 #0  0x000000000058b89f in extract_unsigned_integer (addr=0x2 <error: Cannot access memory at address 0x2>, len=2, byte_order=BFD_ENDIAN_LITTLE)
     at /home/pedro/gdb/mygit/src/gdb/findvar.c:109
 #1  0x00000000005a187a in unpack_bits_as_long (field_type=0x16cff70, valaddr=0x0, bitpos=16, bitsize=12) at /home/pedro/gdb/mygit/src/gdb/value.c:3347
 #2  0x00000000005a1b9d in unpack_value_bitfield (dest_val=0x1b5d9d0, bitpos=16, bitsize=12, valaddr=0x0, embedded_offset=0, val=0x1b5d8d0)
     at /home/pedro/gdb/mygit/src/gdb/value.c:3441
 #3  0x00000000005a2a5f in value_fetch_lazy (val=0x1b5d9d0) at /home/pedro/gdb/mygit/src/gdb/value.c:3958
 #4  0x00000000005a10a7 in value_primitive_field (arg1=0x1b5d8d0, offset=0, fieldno=0, arg_type=0x16d04c0) at /home/pedro/gdb/mygit/src/gdb/value.c:3161
 #5  0x00000000005b01e5 in do_search_struct_field (name=0x1727c60 "bitfield", arg1=0x1b5d8d0, offset=0, type=0x16d04c0, looking_for_baseclass=0, result_ptr=0x7fffffffcaf8,
 [...]

unpack_value_bitfield is already optimized-out/unavailable -aware:

   (...) VALADDR points to the contents of VAL.  If the VAL's contents
   required to extract the bitfield from are unavailable/optimized
   out, DEST_VAL is correspondingly marked unavailable/optimized out.

however, it is not considering the case of the value having no
contents buffer at all, as can happen through
allocate_optimized_out_value.

gdb/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	* value.c (unpack_value_bitfield): Skip unpacking if the parent
	has no contents buffer to begin with.

gdb/testsuite/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	* gdb.dwarf2/bitfield-parent-optimized-out.exp: New file.
2016-08-09 12:04:48 +01:00
..
arr-stride.c
arr-stride.exp
arr-subrange.c
arr-subrange.exp
atomic-type.exp [ppc64] Fix for function descriptors 2016-07-13 13:58:19 +02:00
atomic.c [ppc64] Fix for function descriptors 2016-07-13 13:58:19 +02:00
bad-regnum.c
bad-regnum.exp
bitfield-parent-optimized-out.exp Fix PR gdb/20295: GDB segfaults printing bitfield member of optimized out value 2016-08-09 12:04:48 +01:00
callframecfa.S
callframecfa.exp
clztest.S
clztest.c
clztest.exp
comp-unit-lang.c
comp-unit-lang.exp
corrupt.c
corrupt.exp
count.exp
data-loc.c
data-loc.exp
dup-psym.S
dup-psym.exp
dw2-abs-hi-pc-hello-dbg.S
dw2-abs-hi-pc-hello.c
dw2-abs-hi-pc-world-dbg.S
dw2-abs-hi-pc-world.c
dw2-abs-hi-pc.c
dw2-abs-hi-pc.exp
dw2-ada-ffffffff.S
dw2-ada-ffffffff.exp
dw2-anon-mptr.S
dw2-anon-mptr.exp
dw2-anonymous-func.S
dw2-anonymous-func.exp
dw2-bad-mips-linkage-name.c [ppc64] Fix for function descriptors 2016-07-13 13:58:19 +02:00
dw2-bad-mips-linkage-name.exp [ppc64] Fix for function descriptors 2016-07-13 13:58:19 +02:00
dw2-bad-parameter-type.S
dw2-bad-parameter-type.exp
dw2-bad-unresolved.c
dw2-bad-unresolved.exp
dw2-basic.S
dw2-basic.exp
dw2-canonicalize-type.S
dw2-canonicalize-type.exp
dw2-case-insensitive-debug.S
dw2-case-insensitive.c
dw2-case-insensitive.exp
dw2-common-block.S
dw2-common-block.exp
dw2-compdir-oldgcc.S
dw2-compdir-oldgcc.exp
dw2-compressed.S
dw2-compressed.exp
dw2-const.S
dw2-const.exp
dw2-cp-infcall-ref-static-main.c
dw2-cp-infcall-ref-static.S
dw2-cp-infcall-ref-static.exp
dw2-cu-size.S
dw2-cu-size.exp
dw2-dir-file-name.c
dw2-dir-file-name.exp
dw2-dos-drive.S
dw2-dos-drive.exp
dw2-double-set-die-type.S
dw2-double-set-die-type.exp
dw2-dummy-cu.S
dw2-dummy-cu.exp
dw2-dup-frame.S
dw2-dup-frame.c
dw2-dup-frame.exp
dw2-empty-namespace.S
dw2-empty-namespace.exp
dw2-empty-pc-range.S
dw2-empty-pc-range.exp
dw2-entry-value-main.c
dw2-entry-value.S
dw2-entry-value.exp
dw2-error.S
dw2-error.c
dw2-error.exp
dw2-filename.S
dw2-filename.exp
dw2-icc-opaque.S
dw2-icc-opaque.exp
dw2-icycle.S
dw2-icycle.c
dw2-icycle.exp
dw2-ifort-parameter.c
dw2-ifort-parameter.exp
dw2-inheritance.S
dw2-inheritance.exp
dw2-inline-break.S
dw2-inline-break.exp
dw2-inline-param-main.c
dw2-inline-param.S
dw2-inline-param.exp
dw2-intercu.S
dw2-intercu.exp
dw2-intermix.S
dw2-intermix.exp
dw2-lexical-block-bare.exp [ppc64] Fix for function descriptors 2016-07-13 13:58:19 +02:00
dw2-linkage-name-trust-main.cc
dw2-linkage-name-trust.S
dw2-linkage-name-trust.exp
dw2-minsym-in-cu.S
dw2-minsym-in-cu.exp
dw2-modula2-self-type.S
dw2-modula2-self-type.exp
dw2-namespaceless-anonymous.S
dw2-namespaceless-anonymous.exp
dw2-noloc-main.c
dw2-noloc.S
dw2-noloc.exp
dw2-objfile-overlap-inner.S
dw2-objfile-overlap-outer.S
dw2-objfile-overlap.exp
dw2-op-call.S
dw2-op-call.exp
dw2-op-out-param.S
dw2-op-out-param.exp
dw2-op-stack-value.S
dw2-op-stack-value.exp
dw2-opt-structptr.c Optimized-out pointer: New test for error handling 2016-04-06 14:30:20 -07:00
dw2-opt-structptr.exp Optimized-out pointer: New test for error handling 2016-04-06 14:30:20 -07:00
dw2-param-error-main.c
dw2-param-error.S
dw2-param-error.exp
dw2-producer.S
dw2-producer.exp
dw2-ranges-base.c
dw2-ranges-base.exp
dw2-ranges.c
dw2-ranges.exp
dw2-ranges2.c
dw2-ranges3.c
dw2-ref-missing-frame-func.c
dw2-ref-missing-frame-main.c
dw2-ref-missing-frame.S
dw2-ref-missing-frame.exp
dw2-reg-undefined.S
dw2-reg-undefined.c
dw2-reg-undefined.exp
dw2-regno-invalid.exp
dw2-restore.S
dw2-restore.exp
dw2-restrict.S
dw2-restrict.c
dw2-restrict.exp
dw2-simple-locdesc.S
dw2-simple-locdesc.exp
dw2-single-line-discriminators.S
dw2-single-line-discriminators.c
dw2-single-line-discriminators.exp
dw2-skip-prologue.S
dw2-skip-prologue.c
dw2-skip-prologue.exp
dw2-stack-boundary.S
dw2-stack-boundary.exp
dw2-strp.S
dw2-strp.exp
dw2-undefined-ret-addr.S
dw2-undefined-ret-addr.c
dw2-undefined-ret-addr.exp
dw2-unresolved-main.c
dw2-unresolved.S
dw2-unresolved.exp
dw2-var-zero-addr.S
dw2-var-zero-addr.exp
dw4-sig-type-unused.S
dw4-sig-type-unused.exp
dw4-sig-types-b.cc
dw4-sig-types.cc
dw4-sig-types.exp
dw4-sig-types.h
dwp-sepdebug.c PR symtab/19914 fix handling of dwp + split debug 2016-05-03 16:30:58 -07:00
dwp-sepdebug.exp PR symtab/19914 fix handling of dwp + split debug 2016-05-03 16:30:58 -07:00
dwp-symlink.c
dwp-symlink.exp
dwz.exp
dwzbuildid.exp
dynarr-ptr.c
dynarr-ptr.exp
enum-type.exp
file1.txt
fission-base.S
fission-base.c
fission-base.exp
fission-loclists-pie.S PR symtab/19999 gdb unable to resolve vars with fission+PIE 2016-05-12 09:24:24 -07:00
fission-loclists-pie.exp PR symtab/19999 gdb unable to resolve vars with fission+PIE 2016-05-12 09:24:24 -07:00
fission-loclists.S
fission-loclists.exp
fission-mix.c
fission-mix.exp
fission-mix.h
fission-mix2.c
fission-reread.S
fission-reread.exp
gdb-index.exp
implptr-64bit.S
implptr-64bit.exp
implptr-optimized-out.exp
implptr.S
implptr.c
implptr.exp
implptrconst.c
implptrconst.exp
implptrpiece.exp
implref-array.c [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-array.exp [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-const.exp [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-global.c [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-global.exp [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-struct.c [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
implref-struct.exp [PR gdb/19893] Fix handling of synthetic C++ references 2016-05-31 15:56:34 -03:00
mac-fileno.S
mac-fileno.exp
main.c
member-ptr-forwardref.S
member-ptr-forwardref.exp
method-ptr.cc
method-ptr.exp
missing-sig-type.exp
nostaticblock.exp
opaque-type-lookup-2.c
opaque-type-lookup.c
opaque-type-lookup.exp
pieces-optimized-out.S
pieces-optimized-out.c
pieces-optimized-out.exp
pieces.S
pieces.c
pieces.exp
pr10770.c
pr10770.exp
pr11465.S
pr11465.exp
pr13961.S
pr13961.exp
staticvirtual.exp
subrange.exp
symtab-producer.exp
trace-crash.S
trace-crash.exp
typeddwarf-amd64.S
typeddwarf.S
typeddwarf.c
typeddwarf.exp
valop.S
valop.exp
watch-notconst.c
watch-notconst.exp
watch-notconst2.S
watch-notconst2.c