http://bugzilla.suse.com/show_bug.cgi?id=1076819
http://bugzilla.suse.com/show_bug.cgi?id=1076819#c5
Richard Biener changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |IN_PROGRESS
--- Comment #5 from Richard Biener ---
(gdb) p r_offset
$8 = 4294971687
(gdb) p dso->lines.table[lndx]
$37 = {old_idx = 0, new_idx = 0, size_diff = -12, replace_dirs = true,
replace_files = false, unit_length = 4759, version = 2,
header_length = 4390, min_instr_len = 1 '\001',
max_op_per_instr = 186 '\272', default_is_stmt = 1 '\001',
line_base = -5 '\373', line_range = 14 '\016', opcode_base = 13 '\r'}
size_diff is -12 but as the expression is computed unsigned we end up with
r_offset zero-extended as r_offset is unsinged long long but the difference
we compute is unsigned int (in the 32bit debugedit case).
Thus a debugedit issue.
Fix:
--- tools/debugedit.c.orig 2018-01-22 12:09:07.477955907 +0100
+++ tools/debugedit.c 2018-01-22 12:09:22.210197759 +0100
@@ -2154,9 +2154,9 @@
/* Offset (pointing into the line program) moves
from old to new index including the header
size diff. */
- r_offset += ((dso->lines.table[lndx].new_idx
- - dso->lines.table[lndx].old_idx)
- + dso->lines.table[lndx].size_diff);
+ r_offset += (ssize_t)((dso->lines.table[lndx].new_idx
+ - dso->lines.table[lndx].old_idx)
+ +
dso->lines.table[lndx].size_diff);
if (rtype == SHT_RELA)
{
will commit to Base:System and SR to Factory.
--
You are receiving this mail because:
You are on the CC list for the bug.