8000 compile.c: do not dump pointers · willnet/ruby@bc6e61f · GitHub
[go: up one dir, main page]

Skip to content

Commit bc6e61f

Browse files
committed
compile.c: do not dump pointers
* compile.c (ibf_dump_iseq_each): do not dump succ_index_table pointer. positions are dumped as integer arrays. pointer values are meaningless outside the process. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 04dfc46 commit bc6e61f

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed

compile.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8612,9 +8612,9 @@ ibf_load_insns_info_body(const struct ibf_load *load, const struct rb_iseq_const
86128612
}
86138613

86148614
static unsigned int *
8615-
ibf_dump_insns_info_positions(struct ibf_dump *dump, const rb_iseq_t *iseq)
8615+
ibf_dump_insns_info_positions(struct ibf_dump *dump, const struct rb_iseq_constant_body *body)
86168616
{
8617-
return IBF_W(iseq->body->insns_info.positions, unsigned int, iseq->body->insns_info.size);
8617+
return IBF_W(body->insns_info.positions, unsigned int, body->insns_info.size);
86188618
}
86198619

86208620
static unsigned int *
@@ -8765,7 +8765,10 @@ static ibf_offset_t
87658765
ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq)
87668766
{
87678767
struct rb_iseq_constant_body dump_body;
8768+
unsigned int *positions;
8769+
#if VM_INSN_INFO_TABLE_IMPL == 2
87688770
dump_body = *iseq->body;
8771+
#endif
87698772

87708773
dump_body.location.pathobj = ibf_dump_object(dump, dump_body.location.pathobj); /* TODO: freeze */
87718774
dump_body.location.base_label = ibf_dump_object(dump, dump_body.location.base_label);
@@ -8776,11 +8779,12 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq)
87768779
dump_body.param.keyword = ibf_dump_param_keyword(dump, iseq);
87778780
dump_body.insns_info.body = ibf_dump_insns_info_body(dump, iseq);
87788781
#if VM_INSN_INFO_TABLE_IMPL == 2
8779-
rb_iseq_insns_info_decode_positions(iseq);
8782+
positions = rb_iseq_insns_info_decode_positions(&dump_body);
8783+
dump_body.insns_info.positions = positions;
87808784
#endif
8781-
dump_body.insns_info.positions = ibf_dump_insns_info_positions(dump, iseq);
8785+
dump_body.insns_info.positions = ibf_dump_insns_info_positions(dump, &dump_body);
87828786
#if VM_INSN_INFO_TABLE_IMPL == 2
8783-
rb_iseq_insns_info_encode_positions(iseq);
8787+
ruby_xfree(positions);
87848788
#endif
87858789
dump_body.local_table = ibf_dump_local_table(dump, iseq);
87868790
dump_body.catch_table = ibf_dump_catch_table(dump, iseq);

iseq.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -498,15 +498,14 @@ rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq)
498498
#endif
499499
}
500500

501-
void
502-
rb_iseq_insns_info_decode_positions(const rb_iseq_t *iseq)
501 8000 +
unsigned int *
502+
rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body)
503503
{
504504
#if VM_INSN_INFO_TABLE_IMPL == 2
505-
int size = iseq->body->insns_info.size;
506-
int max_pos = iseq->body->iseq_size;
507-
struct succ_index_table *sd = iseq->body->insns_info.succ_index_table;
508-
if (iseq->body->insns_info.positions) ruby_xfree(iseq->body->insns_info.positions);
509-
iseq->body->insns_info.positions = succ_index_table_invert(max_pos, sd, size);
505+
int size = body->insns_info.size;
506+
int max_pos = body->iseq_size;
507+
struct succ_index_table *sd = body->insns_info.succ_index_table;
508+
return succ_index_table_invert(max_pos, sd, size);
510509
#endif
511510
}
512511

iseq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ VALUE iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
143143
void ibf_load_iseq_complete(rb_iseq_t *iseq);
144144
const rb_iseq_t *iseq_ibf_load(VALUE str);
145145
VALUE iseq_ibf_load_extra_data(VALUE str);
146+
unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
146147

147148
RUBY_SYMBOL_EXPORT_BEGIN
148149

@@ -164,7 +165,6 @@ void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
164165
void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
165166
void rb_iseq_trace_on_all(void);
166167
void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
167-
void rb_iseq_insns_info_decode_positions(const rb_iseq_t *iseq);
168168

169169
VALUE rb_iseqw_new(const rb_iseq_t *iseq);
170170
const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);

0 commit comments

Comments
 (0)
0