From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Siddhesh Poyarekar <siddhesh@redhat.com>
Cc: gdb-patches@sourceware.org, Tom Tromey <tromey@redhat.com>,
Sergio Durigan <sdurigan@redhat.com>
Subject: Re: Splint report and scripts for gdb (was: Expand bitpos and type.length)
Date: Sun, 01 Jul 2012 19:38:00 -0000 [thread overview]
Message-ID: <20120701193755.GA8904@host2.jankratochvil.net> (raw)
In-Reply-To: <20120628184814.30a8977f@spoyarek>
[-- Attachment #1: Type: text/plain, Size: 2191 bytes --]
On Thu, 28 Jun 2012 15:18:14 +0200, Siddhesh Poyarekar wrote:
> After all the sanitization, what we have left is a very clean pattern,
> which is:
>
> LOC (file:num)
> The warning for this LOC
I have read it etc. and I agree.
[...]
> http://siddhesh.fedorapeople.org/splint-bitpos.tar.xz
>
> These are the exact same files that you had uploaded earlier, so you
> should be able to git-init a repository from your files and then
> overwrite them with my copy to get a difference.
>
> Can you please review the script changes?
You have made '^ LOC' and '^ LOC' equal but they are not by the changes:
-1 while $f=~s{^ LOC .*\n(?: .*?\n)*?(.LOC )}{$1}gm;
+1 while $f=~s{^\s+LOC .*\n(?: .*?\n)*?((.\s*LOC )|(.Finished checking))}{$1}gm;
+# Finally, remove the extra spaces from the beginning of the LOC lines.
+$f=~s{^\s+(LOC.*\n)}{$1}gm;
'^ LOC' always starts a new splint record while '^ LOC' (more spaces) is
only supplementary information for that record. See this single original
record:
ada-lang.c:6510: Fresh storage type not released before return
ada-lang.c:6478: Fresh storage type created
Translated into:
LOC ada-lang.c:6492
Fresh storage type not released before return
LOC ada-lang.c:6460
Fresh storage type created
While you now consider it as two different records. But this should not miss
any record, it just adds more records to process - although you discard these
in splint-siddhesh-process-locdiff by rules like so it does not matter:
if (/Previous definition of \w+: \w+/) {
Not sure if it was all intentional or not.
# If the TYPE_LENGTH expression is a builtin_type then we're safe.
$_ = $expr;
return 1 if (/builtin_type[^ ]+->length/);
- I would not call it safe, it can be a part of an arbitrary large expression.
But the 6 cases where it applies are OK.
if (/^ (Right)|(Left) operand of \W+ /) {
- it did not discard any important line but the regex is dangerously wrong, it
does:
if (/^ Right/ || /Left operand of \W+ /) {
Otherwise I have made comments to your .report file. I believe we should
follow now the 'compact' form instead. It is a lot of work as I see.
Thanks,
Jan
[-- Attachment #2: splint-bitpos.locdiff.report.diff --]
[-- Type: text/plain, Size: 29973 bytes --]
--- splint-bitpos.locdiff.report-orig 2012-06-28 14:27:29.000000000 +0200
+++ splint-bitpos.locdiff.report 2012-07-01 21:34:05.919249908 +0200
@@ -3,10 +3,15 @@
@@ -1,1255255 +1,1255562 @@
LOC ada-lang.c:579 (ada-lang.c:578)
- Function memcpy expects arg 3 to be size_t gets UINT: (type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - it is OK, anything in memory fits in size_t. The problem is in allocate_value_contents:
+ value.c:695
+ xzalloc (TYPE_LENGTH (val->enclosing_type));
+ which is listed here later.
+ "iterative" is a good idea but that is too complicated change outside of the scope of this patch.
LOC ada-lang.c:670 (ada-lang.c:669)
- Function umax_of_size expects arg 1 to be int gets UINT: (t)->length
+ Function umax_of_size expects arg 1 to be int gets ULONGEST: (t)->length
*** SAFE: Type passed to function are primitive.
@@ -58,10 +63,11 @@
LOC ada-lang.c:2342 (ada-lang.c:2339)
- Function memset expects arg 3 to be size_t gets UINT: (type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - the problem is again in allocate_value_contents, not here.
+LOC ada-lang.c:2379
+ Assignment of LONGEST to int: src = targ = 0
*** SAFE.
@@ -107,20 +113,23 @@
Right operand of << may be negative (int): 1 << chunk_size
LOC ada-lang.c:2545 (ada-lang.c:2542)
- Function memcpy expects arg 3 to be size_t gets UINT: (type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - the problem is again in allocate_value_contents, not here.
LOC ada-lang.c:4094 (ada-lang.c:4091)
- Function write_memory expects arg 3 to be ssize_t gets int: len
+ Function write_memory expects arg 3 to be ssize_t gets LONGEST: len
*** LIMITED.
+ - the problem is again in allocate_value_contents, not here.
LOC ada-lang.c:4138 (ada-lang.c:4135)
- Function memcpy expects arg 3 to be size_t gets UINT: (actual_type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (actual_type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - the problem is again in allocate_value_contents, not here.
LOC ada-lang.c:4163 (ada-lang.c:4160)
- Function C_alloca expects arg 1 to be size_t gets UINT: len
+ Function C_alloca expects arg 1 to be size_t gets ULONGEST: len
*** SAFE: value_pointer only accepts address types.
@@ -170,54 +179,68 @@
LOC ada-lang.c:8739 (ada-lang.c:8735)
- Function memcmp expects arg 3 to be size_t gets UINT: (value_type(arg1))->length
+ Function memcmp expects arg 3 to be size_t gets ULONGEST: (value_type(arg1))->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - the problem is again in allocate_value_contents, not here.
LOC ada-lang.c:8794 (ada-lang.c:8790)
- Function ada_index_struct_field expects arg 1 to be int gets LONGEST: index
-LOC ada-lang.c:8790
New fresh storage (type struct type *) passed as implicitly temp (not released): value_type(lhs)
LOC ada-tasks.c:785
- Variable target_ptr_byte initialized to type UINT, expects int: (data->known_tasks_element)->length
+ Variable target_ptr_byte initialized to type ULONGEST, expects int: (data->known_tasks_element)->length
*** SAFE: known_tasks_element is usually a pointer.
+ - it seems read_known_tasks_array's extract_typed_address will assert-crash if it is not a pointer.
+ It does not necessarily needs to be a pointer, ada_tasks_inferior_data_sniffer can read anything
+ from inferior symbol tables. But non-pointer types already do not make sense there.
LOC ada-tasks.c:812
- Variable target_ptr_byte initialized to type UINT, expects int: (data->known_tasks_element)->length
+ Variable target_ptr_byte initialized to type ULONGEST, expects int: (data->known_tasks_element)->length
*** SAFE: known_tasks_element is usually a pointer.
+ - likewise
LOC ada-valprint.c:376
- Function ada_emit_char expects arg 5 to be int gets UINT: (type)->length
+ Function ada_emit_char expects arg 5 to be int gets ULONGEST: (type)->length
*** SAFE: type is a char.
ada-valprint.c: (in function ada_print_scalar)
LOC ada-valprint.c:483 (ada-valprint.c:491)
+ Operands of < have incompatible types (UINT, ULONGEST): i < length
*** FIX: Make i, rep1, reps ULONGEST.
+ - AI: Yes, I agree to fix what you describe.
+ - additionally: options->print_max is always at most UINT_MAX.
+ One may ask more for options->print_max being ULONGEST but that also does
+ not make sense, such text output would be just too long.
+ No need to fix that part.
+LOC ada-valprint.c:491
Test expression for if not boolean, type int: quit_flag
LOC ada-valprint.c:501 (ada-valprint.c:502)
- Function char_at expects arg 2 to be int gets UINT: rep1
+ Operands of < have incompatible types (UINT, ULONGEST): rep1 < length
*** FIX: Make i, rep1, reps ULONGEST.
+ - Likewise above.
LOC ada-valprint.c:502 (ada-valprint.c:503)
- Function char_at expects arg 2 to be int gets UINT: i
+ Function char_at expects arg 2 to be LONGEST gets UINT: rep1
*** SAFE.
+ - I will be non-issue after the change above.
+LOC ada-valprint.c:503
+ Function char_at expects arg 2 to be LONGEST gets UINT: i
*** SAFE.
+ - I will be non-issue after the change above.
LOC ada-valprint.c:553
+ Operands of < have incompatible types (UINT, ULONGEST): i < length
*** FIX: Make i, rep1, reps ULONGEST.
+ - I will be non-issue after the change above.
+LOC ada-valprint.c:553
Left operand of || is non-boolean (int): force_ellipses || i < length
ada-valprint.c: (in function ada_printstr)
LOC ada-valprint.c:563
@@ -252,10 +275,13 @@
Null storage passed as non-null param: ada_value_primitive_packed_val (NULL, ...)
+LOC alpha-tdep.c:402
+ Assignment of LONGEST to int: accumulate_size = (accumulate_size + m_arg->len + 7) & ~7
*** FIX: Expand required_arg_regs, accumulate_size, m_arg->offset and offset
+ - AI: Yes, I agree.
+ - AI: But m_arg->len should be only ssize_t, as it depends on contents which
+ is in host memory. Similar issue to allocate_value_contents.
LOC alpha-tdep.c:432
- Operands of <= have incompatible types (int, size_t): offset + len <= sizeof((arg_reg_buffer))
+ Operands of <= have incompatible types (LONGEST, size_t): offset + len <= sizeof((arg_reg_buffer))
*** SAFE.
@@ -267,10 +293,11 @@
LOC alpha-tdep.c:448
- Function write_memory expects arg 3 to be ssize_t gets int: len
+ Function write_memory expects arg 3 to be ssize_t gets LONGEST: len
*** LIMITED.
+ - This is non-issue after the last AI above.
LOC alpha-tdep.c:534 (alpha-tdep.c:537)
+ Function store_unsigned_integer expects arg 2 to be int gets LONGEST: length
*** SAFE.
@@ -320,36 +347,53 @@
*** LIMITED.
+LOC amd64-windows-tdep.c:119
+ Function regcache_raw_read_part expects arg 4 to be int gets LONGEST: len
*** UNSURE: Should be safe since regcache_raw_read* reads from the *register* cache
+ - AI: regcache_raw_read_part and regcache_raw_write_part (and their callee
+ regcache_xfer_part) should get the parameter upgraded to LONGEST. This way
+ gdb_assert in regcache_xfer_part will catch possibly too large LEN.
+ Currently GDB could return invalid value without failing that assertion.
+ Sure nothing such serious.
LOC amd64-windows-tdep.c:121 (amd64-windows-tdep.c:77)
+ Function regcache_raw_write_part expects arg 4 to be int gets LONGEST: len
*** UNSURE: Should be safe since regcache_raw_read* reads from the *register* cache
+ - AI: Likewise.
+LOC amd64-windows-tdep.c:77
Parameter gdbarch not used
LOC arm-linux-nat.c:932
- Right operand of << may be negative (int): 1 << len
+ Right operand of << may be negative (LONGEST): 1 << len
*** UNSURE: maybe len should not be expanded at all.
+ - I would say keep it that way. Or even put there gdb_assert (len < sizeof (int) * 8);
+ Here arm_linux_region_ok_for_hw_watchpoint (implementation of
+ to_region_ok_for_hw_watchpoint, therefore target_region_ok_for_hw_watchpoint)
+ already ensures LEN cannot be too large so I agree LEN here could be just
+ int. OTOH if to_region_ok_for_hw_watchpoint gets the int type we would need
+ to re-check all other files installing to_region_ok_for_hw_watchpoint
+ implementation they protect the size early enougn. We could no longer
+ assert-check any LEN in to_insert_watchpoint of other implementations
+ afterwards.
LOC arm-linux-nat.c:932
- Assignment of int to UINT: mask = (1 << len) - 1
+ Assignment of LONGEST to UINT: mask = (1 << len) - 1
*** UNSURE: maybe len should not be expanded at all.
+ - Likewise.
LOC arm-tdep.c:3289
- Return value type UINT does not match declared type int: (t)->length
+ Return value type ULONGEST does not match declared type int: (t)->length
*** SAFE: Types are primitive.
LOC arm-tdep.c:3422
- Return value type UINT does not match declared type int: (t)->length / unitlen
+ Return value type ULONGEST does not match declared type int: (t)->length / unitlen
*** FIX: Make arm_vfp_cprc_sub_candidate return LONGEST.
+ - AI: Yes.
LOC arm-tdep.c:3689 (arm-tdep.c:3690)
+ Function extract_unsigned_integer expects arg 2 to be int gets LONGEST: len
*** SAFE.
@@ -378,10 +422,12 @@
avr-tdep.c: (in function avr_pointer_to_address)
LOC avr-tdep.c:932 (avr-tdep.c:937)
- Operands of < have incompatible types (int, UINT): i < (valtype)->length
+ Function regcache_cooked_write expects arg 2 to be int gets LONGEST: lsb_reg + i
*** SAFE: type is neither struct nor array.
+ - AI: Moreover for value > 8 it would get gdb_assert_not_reached ("unexpected type length");
+ Therefore simplify it, 'i' can be just 'int'.
+LOC avr-tdep.c:937
+ Operands of < have incompatible types (LONGEST, ULONGEST): i < (valtype)->length
*** SAFE: type is neither struct nor array.
@@ -393,14 +439,22 @@
Return value (type enum register_status) ignored: regcache_cooked_...
LOC avr-tdep.c:1184 (avr-tdep.c:1183)
- Function xmalloc expects arg 1 to be size_t gets int: len
+ Function xmalloc expects arg 1 to be size_t gets LONGEST: len
*** LIMITED.
+ - AI: It is limited at the caller, not here. It may be dangerous if new code
+ starts using this function - it has LONGEST parameter but it cannot handle
+ LONGEST. Just make LEN ssize_t.
+ The same applies to arm-tdep.c push_stack_item and cris-tdep.c push_stack_item.
LOC avr-tdep.c:1185
+ Assignment of LONGEST to int: si->len = len
*** FIX: Expand stack_item->len.
+ - AI: Yes and no. Function already gets CONTENTS in host memory, so the LEN
+ size should be ssize_t, not LONGEST.
+ (I understand we are not strict in this regard and in many LONGEST cases we
+ could probably rather use ssize_t.)
+LOC avr-tdep.c:1186
Implicitly only storage si->prev (type struct stack_item *) not released before assignment: si->prev = prev
LOC avr-tdep.c:1187 (avr-tdep.c:1186)
- Function memcpy expects arg 3 to be size_t gets int: len
@@ -414,10 +468,11 @@
*** SAFE.
+LOC avr-tdep.c:1290
+ Operands of < have incompatible types (int, LONGEST): j < len
*** FIX: Expand j.
+ - AI: Yes; in fact both LEN and J can be just ssize_t when we need value_contents anyway.
+LOC avr-tdep.c:1292
+ Right operand of >> may be negative (LONGEST): val >> (8 * (len - j - 1))
*** SAFE.
@@ -434,10 +489,12 @@
LOC ax-gdb.c:512 (ax-gdb.c:511)
- Function ax_trace_quick expects arg 2 to be int gets UINT: (type)->length
+ Function ax_trace_quick expects arg 2 to be int gets ULONGEST: (type)->length
*** SAFE: Primitive types.
+ - AI: While I agree I would prefer making ax_trace_quick's N to be LONGEST.
+ To catch some more complicated internal issues. Not important.
-LOC ax-gdb.c:597
- Function gen_offset expects arg 2 to be int gets LONGEST: frame_offset
ax-gdb.c: (in function gen_frame_locals_address)
-LOC ax-gdb.c:612
@@ -448,10 +505,11 @@
ax-gdb.c: (in function gen_var_ref)
ax-gdb.c: (in function gen_ptradd)
LOC ax-gdb.c:1424 (ax-gdb.c:1427)
+ Function expects arg 2 to be int gets LONGEST: end - start
*** SAFE: bitfield ref, so end - start should fit into int.
+ - OK, there is even internal_error above.
+LOC ax-gdb.c:1428
Implicitly only storage value->type (type struct type *) not released before assignment: value->type = type
ax-gdb.c: (in function gen_primitive_field)
LOC bfin-tdep.c:538
@@ -460,23 +518,26 @@
*** LIMITED.
LOC breakpoint.c:2173 (breakpoint.c:2179)
+ Assignment of LONGEST to int: bl->target_info.length = bl->length
*** FIX: Expand struct bp_target_info.length.
+ - AI: Yes.
+LOC breakpoint.c:2180
Test expression for if not boolean, type int: is_breakpoint(bl->owner)
LOC breakpoint.c:4396 (breakpoint.c:4393)
+ Function expects arg 4 to be int gets LONGEST: loc->length
*** FIX: Expand to_watchpoint_addr_within_range arg 4.
+ - AI: Yes.
+LOC breakpoint.c:4394
Test expression for if not boolean, type int: (*¤t_target.to_watchpoint_addr_within_range)(¤t_target, addr, loc->address, loc->length)
LOC breakpoint.c:6374 (breakpoint.c:6371)
- Operands of && are non-boolean (int): bl->length && breakpoint_address_match_range(bl->pspace->aspace, bl->address, bl->length, aspace, addr)
+ Function breakpoint_address_match_range expects arg 3 to be int gets LONGEST: bl->length
*** FIX: Expand breakpoint_address_match_range arg 3.
+ - AI: Yes.
+LOC breakpoint.c:6372
+ Operands of && are non-booleans (LONGEST, int): bl->length && breakpoint_address_match_range(bl->pspace->aspace, bl->address, bl->length, aspace, addr)
*** SAFE.
@@ -484,21 +545,24 @@
Return value (type int) ignored: create_breakpoin...
+breakpoint.c: (in function breakpoint_hit_ranged_breakpoint)
+LOC breakpoint.c:9594
+ Function breakpoint_address_match_range expects arg 3 to be int gets LONGEST: bl->length
*** FIX: Expand breakpoint_address_match_range arg 3.
+ - AI: Yes, already above.
breakpoint.c: (in function resources_needed_ranged_breakpoint)
LOC breakpoint.c:15660 (breakpoint.c:15659)
- Function observer_attach_memory_changed expects arg 1 to be observer_memory_changed_ftype * gets [function (CORE_ADDR, int, bfd_byte *) returns void]: invalidate_bp_value_on_memory_change
+ Function observer_attach_memory_changed expects arg 1 to be observer_memory_changed_ftype * gets [function (CORE_ADDR, LONGEST, bfd_byte *) returns void]: invalidate_bp_value_on_memory_change
*** SAFE: Generated code from doc/observer.texi.
+ - Yes, splint got confused somehow.
LOC c-lang.c:205
- Variable width initialized to type UINT, expects int: (type)->length
+ Variable width initialized to type ULONGEST, expects int: (type)->length
*** SAFE: width is unused.
+ - AI: But then width must be removed as it contains invalid number now.
LOC c-lang.c:292
- Assignment of UINT to int: width = (element_type)->length
+ Assignment of ULONGEST to int: width = (element_type)->length
*** SAFE: element_type is char-like.
@@ -549,22 +613,34 @@
*** SAFE: Those paths throw exceptions.
LOC cp-valprint.c:363 (cp-valprint.c:366)
+ Variable i_offset initialized to type LONGEST, expects int: offset + ((((type)->main_type->flds_bnds.fields[i]).loc.bitpos) + 0) / 8
*** FIX: expand i_offset.
+ - AI: Yes.
+LOC cp-valprint.c:366
Test expression for if not boolean, type int: valprint_check_validity(stream, i_type, i_offset, val)
LOC cp-valprint.c:560 (cp-valprint.c:559)
- Function C_alloca expects arg 1 to be size_t gets UINT: (baseclass)->length
+ Function C_alloca expects arg 1 to be size_t gets ULONGEST: (baseclass)->length
*** LATERFIX: alloca with large size may be unsafe.
+ - AI: Better to do a real fix.
+ gdb_byte *buf;
+ struct cleanup *back_to;
+ if ((size_t) TYPE_LENGTH (baseclass) != TYPE_LENGTH (baseclass))
+ error (_("Target object too large for host GDB memory."));
+ buf = xmalloc (TYPE_LENGTH (baseclass));
+ back_to = make_cleanup (xfree, buf);
+ [...]
+ do_cleanups (back_to);
+ The same should be done in allocate_value_contents.
LOC cp-valprint.c:563 (cp-valprint.c:562)
- Function target_read_memory expects arg 3 to be ssize_t gets UINT: (baseclass)->length
+ Function target_read_memory expects arg 3 to be ssize_t gets ULONGEST: (baseclass)->length
*** LIMITED.
+ - See above.
LOC cris-tdep.c:683
- Function xmalloc expects arg 1 to be size_t gets int: len
+ Function xmalloc expects arg 1 to be size_t gets LONGEST: len
LOC cris-tdep.c:684 (cris-tdep.c:685)
@@ -573,10 +649,11 @@
Implicitly only storage si->prev (type struct stack_item *) not released before assignment: si->prev = prev
LOC cris-tdep.c:686
- Function memcpy expects arg 3 to be size_t gets int: len
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - AI: See push_stack_item note above, it is the same function.
cris-tdep.c: (in function cris_frame_unwind_cache)
LOC cris-tdep.c:899
- Function write_memory expects arg 3 to be ssize_t gets int: len
+ Function write_memory expects arg 3 to be ssize_t gets LONGEST: len
@@ -599,25 +676,29 @@
+ Operands of == have incompatible types (LONGEST, UINT): len * 8 == gdbarch_long_double_format(gdbarch)[0]->totalsize
LOC doublest.c:857
- Function memset expects arg 3 to be size_t gets UINT: (type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed. Caller already gave host GDB memory ADDR so TYPE has to fit in host memory.
LOC doublest.c:883
- Function memset expects arg 3 to be size_t gets UINT: (to_type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (to_type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC doublest.c:893
- Function memset expects arg 3 to be size_t gets UINT: (to_type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (to_type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC doublest.c:894
- Function memcpy expects arg 3 to be size_t gets UINT: (((from_type)->length) < ((to_type)->length) ? ((from_type)->length) : ((to_type)->length))
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (((from_type)->length) < ((to_type)->length) ? ((from_type)->length) : ((to_type)->length))
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC dwarf2expr.c:452
- Operands of != have incompatible types (UINT, int): (result)->length != size
+ Operands of != have incompatible types (ULONGEST, int): (result)->length != size
LOC dwarf2expr.c:1050
@@ -628,10 +709,11 @@
+ Function C_alloca expects arg 1 to be size_t gets ULONGEST: (type)->length
LOC dwarf2loc.c:1279
- Function memcpy expects arg 3 to be size_t gets UINT: (checked_type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (checked_type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed, it is reponsibility of value_contents_raw.
LOC dwarf2loc.c:1496 (dwarf2loc.c:1503)
+ Assignment of ULONGEST to UINT: source_offset_bits = source_offset % 8
+LOC dwarf2loc.c:1498
+ Assignment of ULONGEST to UINT: dest_avail = 8 - dest_offset_bits % 8
@@ -676,10 +758,11 @@
- Function get_frame_register_bytes expects arg 4 to be int gets size_t: this_size
+ Function get_frame_register_bytes expects arg 4 to be int gets ULONGEST: this_size
LOC dwarf2loc.c:1631 (dwarf2loc.c:1633)
+ Function memset expects arg 3 to be size_t gets ULONGEST: this_size
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed, it is reponsibility of code acquiring the buffer, such as value_contents_raw.
+LOC dwarf2loc.c:1633
Test expression for if not boolean, type int: optim
LOC dwarf2loc.c:1636
- Function mark_value_bytes_unavailable expects arg 2 to be int gets LONGEST: offset
@@ -765,10 +848,11 @@
-LOC dwarf2loc.c:2255
Fresh storage objfile_gdbarch not released before scope exit
LOC dwarf2loc.c:2257
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: n
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
+LOC dwarf2loc.c:2258
Fresh storage value not released before scope exit
LOC dwarf2loc.c:2277 (dwarf2loc.c:2276)
- Operands of > have incompatible types (size_t, UINT): n > (type)->length
@@ -779,10 +863,11 @@
dwarf2read.c: (in function dwarf2_section_buffer_overflow_complaint)
LOC dwarf2read.c:6117
- Function memcpy expects arg 3 to be size_t gets UINT: (type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC dwarf2read.c:7763 (dwarf2read.c:7764)
+ Assignment of size_t to ULONGEST: dlbaton->size = ((attr)->u.blk)->size
+LOC dwarf2read.c:7764
Implicitly only storage dlbaton->per_cu (type struct dwarf2_per_cu_data *) not released before assignment: dlbaton->per_cu = cu->per_cu
@@ -912,20 +997,23 @@
+ Variable ptr_size initialized to type ULONGEST, expects size_t: (ptr_type)->length
LOC eval.c:446 (eval.c:445)
- Function memcpy expects arg 3 to be size_t gets UINT: (value_type(val))->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (value_type(val))->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:489 (eval.c:488)
- Function memcpy expects arg 3 to be size_t gets int: element_size
+ Function memcpy expects arg 3 to be size_t gets LONGEST: element_size
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:498 (eval.c:497)
- Function memcpy expects arg 3 to be size_t gets int: element_size
+ Function memcpy expects arg 3 to be size_t gets LONGEST: element_size
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:611 (eval.c:610)
- Operands of > have incompatible types (UINT, int): (type1)->length * 8 > gdbarch_double_bit(gdbarch)
+ Operands of > have incompatible types (ULONGEST, int): (type1)->length * 8 > gdbarch_double_bit(gdbarch)
LOC eval.c:612 (eval.c:611)
@@ -939,25 +1027,29 @@
+ Operands of > have incompatible types (ULONGEST, int): result_len > gdbarch_long_bit(gdbarch) / 8
LOC eval.c:979 (eval.c:978)
- Function memset expects arg 3 to be size_t gets UINT: (type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:998 (eval.c:997)
- Function memset expects arg 3 to be size_t gets UINT: (expect_type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (expect_type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:1029 (eval.c:1028)
- Function memcpy expects arg 3 to be size_t gets int: element_size
+ Function memcpy expects arg 3 to be size_t gets LONGEST: element_size
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC eval.c:1052 (eval.c:1051)
- Function memset expects arg 3 to be size_t gets UINT: (type)->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed like above.
LOC f-valprint.c:85
Return value type LONGEST does not match declared type int: ((((((type))->main_type->flds_bnds.fields[0]).type))->main_type->flds_bnds.bounds->high)
-f-valprint.c: (in function f77_get_dynamic_length_of_aggregate)
-LOC f-valprint.c:115
@@ -988,10 +1080,16 @@
+ Conditional clauses are not of same type: (val_bytes) (LONGEST), (sizeof(int64_t)) (size_t)
LOC findcmd.c:216
- Function memcpy expects arg 3 to be size_t gets int: val_bytes
+ Function memcpy expects arg 3 to be size_t gets LONGEST: val_bytes
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - AI: This patch did not make it non-compliant but one should fix instead xrealloc above.
+ But the code is already buggy anyway, filed as:
+ There should be something like: http://sourceware.org/bugzilla/show_bug.cgi?id=14321
+ if ((size_t) (pattern_buf_size * 2) != pattern_buf_size)
+ error (_("Target object too large for host GDB memory."));
+ But there will not be * 2 after fix of that bug.
findvar.c: (in function signed_pointer_to_address)
findvar.c: (in function address_to_signed_pointer)
LOC findvar.c:468
+ Function store_signed_integer expects arg 2 to be int gets LONGEST: len
@@ -999,20 +1097,23 @@
New fresh storage (type gdb_byte *) passed as implicitly temp (not released): value_contents_raw(v)
LOC findvar.c:493
- Function memcpy expects arg 3 to be size_t gets int: len
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed. It is responsibility of value_contents_raw.
LOC frame.c:872
- Function memcpy expects arg 3 to be size_t gets UINT: (value_type(value))->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (value_type(value))->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed. It is responsibility of value_contents_all and the caller.
LOC frame.c:874
- Function memset expects arg 3 to be size_t gets UINT: (value_type(value))->length
+ Function memset expects arg 3 to be size_t gets ULONGEST: (value_type(value))->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Again.
LOC frv-tdep.c:1129 (frv-tdep.c:1135)
+ Function store_unsigned_integer expects arg 2 to be int gets LONGEST: len
+LOC frv-tdep.c:1135
Passed storage ®val not completely defined: regcache_cooked_read_unsigned (..., ®val)
@@ -1022,10 +1123,11 @@
Function extract_unsigned_integer expects arg 1 to be gdb_byte * gets char *: val
LOC frv-tdep.c:1337
- Function memcpy expects arg 3 to be size_t gets int: len
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - No, there is 'if (len <= 4)' above.
frv-tdep.c: (in function frv_return_value)
LOC gdbtypes.c:804
- Operands of > have incompatible types (UINT, size_t): (type)->length > sizeof(LONGEST)
+ Operands of > have incompatible types (ULONGEST, size_t): (type)->length > sizeof(LONGEST)
@@ -1075,15 +1177,17 @@
+ Function C_alloca expects arg 1 to be size_t gets LONGEST: padded_len
LOC h8300-tdep.c:677
- Function memset expects arg 3 to be size_t gets int: padded_len
+ Function memset expects arg 3 to be size_t gets LONGEST: padded_len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - AI: There is value_contents so rather LEN and PADDED_LEN can be ssize_t instead.
LOC h8300-tdep.c:679
- Function memcpy expects arg 3 to be size_t gets int: len
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - See above.
LOC h8300-tdep.c:686
- Right operand of && is non-boolean (int): len > wordsize && len % wordsize
+ Right operand of && is non-boolean (LONGEST): len > wordsize && len % wordsize
LOC h8300-tdep.c:689
@@ -1112,10 +1216,11 @@
+ Function write_memory expects arg 3 to be ssize_t gets ULONGEST: (type)->length
LOC hppa-tdep.c:766
- Function memcpy expects arg 3 to be size_t gets UINT: (type)->length
+ Function memcpy expects arg 3 to be size_t gets ULONGEST: (type)->length
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed, responsibility of value_contents.
LOC hppa-tdep.c:867
- Variable len initialized to type UINT, expects int: (type)->length
+ Variable len initialized to type ULONGEST, expects int: (type)->length
LOC hppa-tdep.c:889
@@ -1182,20 +1287,23 @@
+ Function write_memory expects arg 3 to be ssize_t gets LONGEST: len
LOC i386-tdep.c:2470
- Function memset expects arg 3 to be size_t gets int: len
+ Function memset expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Nothing needed, responsibility of the caller.
LOC i386-tdep.c:2489
- Function memcpy expects arg 3 to be size_t gets int: len
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Likewise.
LOC i386-tdep.c:2496
- Function memcpy expects arg 3 to be size_t gets int: len - low_size
+ Function memcpy expects arg 3 to be size_t gets LONGEST: len - low_size
*** REVIEW: Might need iterative copying when sizeof(ULONGEST) > sizeof(size_t)
+ - Likewise.
LOC i386-tdep.c:2556 (i386-tdep.c:2565)
- New fresh storage (type char *) passed as implicitly temp (not released): gettext("Cannot store return value of %d bytes long.")
+ Function regcache_raw_write_part expects arg 4 to be int gets LONGEST: len
+LOC i386-tdep.c:2561
next prev parent reply other threads:[~2012-07-01 19:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-28 13:18 Siddhesh Poyarekar
2012-07-01 19:38 ` Jan Kratochvil [this message]
2012-07-02 2:49 ` Siddhesh Poyarekar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120701193755.GA8904@host2.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=sdurigan@redhat.com \
--cc=siddhesh@redhat.com \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox