expr.c (int highest_label_pc_this_method, [...]): New globals.
* expr.c (int highest_label_pc_this_method, start_label_pc_this_method): New globals. (lookup_label): Add start_label_pc_this_method to pc for label, and update highest_label_pc_this_method. This prevents conflicts between labels from different methods. * java-tree.h: Declare new globals. * jcf-parse.c (parse_class_file): If needed bump start_label_pc_this_method and reset highest_label_pc_this_method. From-SVN: r100896
This commit is contained in:
parent
a1b6a5910b
commit
885beb81ab
4 changed files with 41 additions and 1 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2005-06-13 Per Bothner <per@bothner.com>
|
||||||
|
|
||||||
|
* expr.c (int highest_label_pc_this_method,
|
||||||
|
start_label_pc_this_method): New globals.
|
||||||
|
(lookup_label): Add start_label_pc_this_method to pc for label, and
|
||||||
|
update highest_label_pc_this_method. This prevents conflicts between
|
||||||
|
labels from different methods.
|
||||||
|
* java-tree.h: Declare new globals.
|
||||||
|
* jcf-parse.c (parse_class_file): If needed bump
|
||||||
|
start_label_pc_this_method and reset highest_label_pc_this_method.
|
||||||
|
|
||||||
2005-06-13 Tom Tromey <tromey@redhat.com>
|
2005-06-13 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
PR java/21844:
|
PR java/21844:
|
||||||
|
|
|
@ -138,6 +138,12 @@ int stack_pointer;
|
||||||
const unsigned char *linenumber_table;
|
const unsigned char *linenumber_table;
|
||||||
int linenumber_count;
|
int linenumber_count;
|
||||||
|
|
||||||
|
/* Largest pc so far in this method that has been passed to lookup_label. */
|
||||||
|
int highest_label_pc_this_method = -1;
|
||||||
|
|
||||||
|
/* Base value for this method to add to pc to get generated label. */
|
||||||
|
int start_label_pc_this_method = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
init_expr_processing (void)
|
init_expr_processing (void)
|
||||||
{
|
{
|
||||||
|
@ -1766,7 +1772,9 @@ lookup_label (int pc)
|
||||||
{
|
{
|
||||||
tree name;
|
tree name;
|
||||||
char buf[32];
|
char buf[32];
|
||||||
ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", pc);
|
if (pc > highest_label_pc_this_method)
|
||||||
|
highest_label_pc_this_method = pc;
|
||||||
|
ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", start_label_pc_this_method + pc);
|
||||||
name = get_identifier (buf);
|
name = get_identifier (buf);
|
||||||
if (IDENTIFIER_LOCAL_VALUE (name))
|
if (IDENTIFIER_LOCAL_VALUE (name))
|
||||||
return IDENTIFIER_LOCAL_VALUE (name);
|
return IDENTIFIER_LOCAL_VALUE (name);
|
||||||
|
|
|
@ -234,6 +234,12 @@ extern int always_initialize_class_p;
|
||||||
|
|
||||||
extern int flag_verify_invocations;
|
extern int flag_verify_invocations;
|
||||||
|
|
||||||
|
/* Largest pc so far in this method that has been passed to lookup_label. */
|
||||||
|
extern int highest_label_pc_this_method;
|
||||||
|
|
||||||
|
/* Base value for this method to add to pc to get generated label. */
|
||||||
|
extern int start_label_pc_this_method;
|
||||||
|
|
||||||
typedef struct CPool constant_pool;
|
typedef struct CPool constant_pool;
|
||||||
|
|
||||||
#define CONSTANT_ResolvedFlag 16
|
#define CONSTANT_ResolvedFlag 16
|
||||||
|
|
|
@ -929,6 +929,21 @@ parse_class_file (void)
|
||||||
|
|
||||||
give_name_to_locals (jcf);
|
give_name_to_locals (jcf);
|
||||||
|
|
||||||
|
/* Bump up start_label_pc_this_method so we get a unique label number
|
||||||
|
and reset highest_label_pc_this_method. */
|
||||||
|
if (highest_label_pc_this_method >= 0)
|
||||||
|
{
|
||||||
|
/* We adjust to the next multiple of 1000. This is just a frill
|
||||||
|
so the last 3 digits of the label number match the bytecode
|
||||||
|
offset, which might make debugging marginally more convenient. */
|
||||||
|
start_label_pc_this_method
|
||||||
|
= ((((start_label_pc_this_method + highest_label_pc_this_method)
|
||||||
|
/ 1000)
|
||||||
|
+ 1)
|
||||||
|
* 1000);
|
||||||
|
highest_label_pc_this_method = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Convert bytecode to trees. */
|
/* Convert bytecode to trees. */
|
||||||
expand_byte_code (jcf, method);
|
expand_byte_code (jcf, method);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue