fix PLT_DELAY_FROM_ZO
Fetching bytecode from a previously read file was broken in the case of a bytecode file with submodules. Closes PR 14878
This commit is contained in:
parent
dbfe4df223
commit
d6c26f9742
|
@ -5416,7 +5416,7 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
{
|
||||
Scheme_Hash_Table *directory = NULL;
|
||||
Scheme_Object *result;
|
||||
intptr_t size, shared_size, got, offset = 0, directory_count = 0;
|
||||
intptr_t size, shared_size, got, offset, directory_count = 0;
|
||||
CPort *rp;
|
||||
intptr_t symtabsize;
|
||||
Scheme_Object **symtab;
|
||||
|
@ -5449,7 +5449,6 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
" expected version: %s",
|
||||
(buf[0] ? buf : "???"), MZSCHEME_VERSION);
|
||||
}
|
||||
offset += size + 1;
|
||||
|
||||
mode = scheme_get_byte(port);
|
||||
if (mode == 'D') {
|
||||
|
@ -5473,10 +5472,8 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
|
||||
/* Module hash code */
|
||||
got = scheme_get_bytes(port, 20, hash_code, 0);
|
||||
offset += 20;
|
||||
|
||||
symtabsize = read_simple_number_from_port(port);
|
||||
offset += 4;
|
||||
|
||||
/* Load table mapping symtab indices to stream positions: */
|
||||
|
||||
|
@ -5495,8 +5492,6 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
scheme_read_err(port, NULL, -1, -1, -1, -1, 0, NULL,
|
||||
"read (compiled): ill-formed code (bad table count: %" PRIdPTR " != %" PRIdPTR ")",
|
||||
got, (all_short ? 2 : 4) * (symtabsize - 1));
|
||||
offset += got;
|
||||
|
||||
{
|
||||
/* This loop runs top to bottom, since sizeof(long) may be larger
|
||||
than the decoded integers (but it's never shorter) */
|
||||
|
@ -5527,8 +5522,6 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
shared_size, size);
|
||||
}
|
||||
|
||||
offset += 8;
|
||||
|
||||
rp = MALLOC_ONE_RT(CPort);
|
||||
SET_REQUIRED_TAG(rp->type = scheme_rt_compact_port);
|
||||
{
|
||||
|
@ -5542,6 +5535,7 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
scheme_tell_all(port, NULL, NULL, &base);
|
||||
rp->base = base;
|
||||
}
|
||||
offset = SCHEME_INT_VAL(scheme_file_position(1, &port));
|
||||
rp->orig_port = port;
|
||||
rp->size = size;
|
||||
if ((got = scheme_get_bytes(port, size, (char *)rp->start, 0)) != size)
|
||||
|
@ -5590,7 +5584,7 @@ static Scheme_Object *read_compiled(Scheme_Object *port,
|
|||
} else {
|
||||
scheme_reserve_file_descriptor();
|
||||
rp->pos = shared_size; /* skip shared part */
|
||||
delay_info->file_offset = offset + 2 + 1; /* +2 is for #~; +1 is ???? */
|
||||
delay_info->file_offset = offset;
|
||||
delay_info->size = shared_size;
|
||||
delay_info->symtab_size = rp->symtab_size;
|
||||
delay_info->symtab = rp->symtab;
|
||||
|
|
Loading…
Reference in New Issue
Block a user