diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-01-04 21:03:59 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-01-04 21:03:59 +0100 |
commit | fb85f9d05f09a3e122d702f85b8af306a3999357 (patch) | |
tree | 90f35d4f1a343de8289b7d95299fc67845dbb79c | |
parent | 598bd6878aedc11ddffc0cc3908bfdaf86e212e8 (diff) | |
download | gcc-fb85f9d05f09a3e122d702f85b8af306a3999357.zip gcc-fb85f9d05f09a3e122d702f85b8af306a3999357.tar.gz gcc-fb85f9d05f09a3e122d702f85b8af306a3999357.tar.bz2 |
dwarf2out.c (output_loc_list): Don't throw away 64K+ location descriptions for -gdwarf-5 and emit them as...
* dwarf2out.c (output_loc_list): Don't throw away 64K+ location
descriptions for -gdwarf-5 and emit them as uleb128 instead of
2-byte data.
From-SVN: r244069
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 13 |
2 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5568ec6..242bf69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-01-04 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (output_loc_list): Don't throw away 64K+ location + descriptions for -gdwarf-5 and emit them as uleb128 instead of + 2-byte data. + 2017-01-04 Kelvin Nilsen <kelvin@gcc.gnu.org> PR target/78056 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 15b9a30..8abeb7a 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -9586,7 +9586,7 @@ output_loc_list (dw_loc_list_ref list_head) perhaps put it into DW_TAG_dwarf_procedure and refer to that in the expression, but >= 64KB expressions for a single value in a single range are unlikely very useful. */ - if (size > 0xffff) + if (dwarf_version < 5 && size > 0xffff) continue; if (dwarf_version >= 5) { @@ -9638,8 +9638,6 @@ output_loc_list (dw_loc_list_ref list_head) if (strcmp (curr2->begin, curr2->end) == 0 && !curr2->force) continue; - if ((unsigned long) size_of_locs (curr2->expr) > 0xffff) - continue; break; } if (curr2 == NULL || curr->section != curr2->section) @@ -9740,8 +9738,13 @@ output_loc_list (dw_loc_list_ref list_head) } /* Output the block length for this list of location operations. */ - gcc_assert (size <= 0xffff); - dw2_asm_output_data (2, size, "%s", "Location expression size"); + if (dwarf_version >= 5) + dw2_asm_output_data_uleb128 (size, "Location expression size"); + else + { + gcc_assert (size <= 0xffff); + dw2_asm_output_data (2, size, "Location expression size"); + } output_loc_sequence (curr->expr, -1); } |