forked from Imagelibrary/binutils-gdb
[C++] remote.c: Avoid enum arithmetic
Fixes:
src/gdb/remote.c: In function ‘void remote_unpush_target()’:
src/gdb/remote.c:4610:45: error: invalid conversion from ‘int’ to ‘strata’ [-fpermissive]
pop_all_targets_above (process_stratum - 1);
^
In file included from src/gdb/inferior.h:38:0,
from src/gdb/remote.c:25:
src/gdb/target.h:2299:13: error: initializing argument 1 of ‘void pop_all_targets_above(strata)’ [-fpermissive]
extern void pop_all_targets_above (enum strata above_stratum);
^
I used to carry a patch in the C++ branch that just did:
- pop_all_targets_above (process_stratum - 1);
+ pop_all_targets_above ((enum strata) (process_stratum - 1));
But then thought that maybe adding a routine that does exactly what we
need results in clearer code. This is the result.
gdb/ChangeLog:
2015-11-19 Pedro Alves <palves@redhat.com>
* remote.c (remote_unpush_target): Use
pop_all_targets_at_and_above instead of pop_all_targets_above.
* target.c (unpush_target_and_assert): New function, factored out
from ...
(pop_all_targets_above): ... here.
(pop_all_targets_at_and_above): New function.
* target.h (pop_all_targets_at_and_above): Declare.
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
2015-11-19 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* remote.c (remote_unpush_target): Use
|
||||
pop_all_targets_at_and_above instead of pop_all_targets_above.
|
||||
* target.c (unpush_target_and_assert): New function, factored out
|
||||
from ...
|
||||
(pop_all_targets_above): ... here.
|
||||
(pop_all_targets_at_and_above): New function.
|
||||
* target.h (pop_all_targets_at_and_above): Declare.
|
||||
|
||||
2015-11-18 Simon Marchi <simon.marchi@ericsson.com>
|
||||
|
||||
* valops.c (value_string): Constify 'ptr' parameter.
|
||||
|
||||
@@ -4607,7 +4607,7 @@ remote_query_supported (void)
|
||||
static void
|
||||
remote_unpush_target (void)
|
||||
{
|
||||
pop_all_targets_above (process_stratum - 1);
|
||||
pop_all_targets_at_and_above (process_stratum);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
36
gdb/target.c
36
gdb/target.c
@@ -746,21 +746,35 @@ unpush_target (struct target_ops *t)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Unpush TARGET and assert that it worked. */
|
||||
|
||||
static void
|
||||
unpush_target_and_assert (struct target_ops *target)
|
||||
{
|
||||
if (!unpush_target (target))
|
||||
{
|
||||
fprintf_unfiltered (gdb_stderr,
|
||||
"pop_all_targets couldn't find target %s\n",
|
||||
target->to_shortname);
|
||||
internal_error (__FILE__, __LINE__,
|
||||
_("failed internal consistency check"));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
pop_all_targets_above (enum strata above_stratum)
|
||||
{
|
||||
while ((int) (current_target.to_stratum) > (int) above_stratum)
|
||||
{
|
||||
if (!unpush_target (target_stack))
|
||||
{
|
||||
fprintf_unfiltered (gdb_stderr,
|
||||
"pop_all_targets couldn't find target %s\n",
|
||||
target_stack->to_shortname);
|
||||
internal_error (__FILE__, __LINE__,
|
||||
_("failed internal consistency check"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
unpush_target_and_assert (target_stack);
|
||||
}
|
||||
|
||||
/* See target.h. */
|
||||
|
||||
void
|
||||
pop_all_targets_at_and_above (enum strata stratum)
|
||||
{
|
||||
while ((int) (current_target.to_stratum) >= (int) stratum)
|
||||
unpush_target_and_assert (target_stack);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -2294,6 +2294,10 @@ extern void target_preopen (int);
|
||||
/* Does whatever cleanup is required to get rid of all pushed targets. */
|
||||
extern void pop_all_targets (void);
|
||||
|
||||
/* Like pop_all_targets, but pops only targets whose stratum is at or
|
||||
above STRATUM. */
|
||||
extern void pop_all_targets_at_and_above (enum strata stratum);
|
||||
|
||||
/* Like pop_all_targets, but pops only targets whose stratum is
|
||||
strictly above ABOVE_STRATUM. */
|
||||
extern void pop_all_targets_above (enum strata above_stratum);
|
||||
|
||||
Reference in New Issue
Block a user