diff options
Diffstat (limited to 'gcc/lto')
-rw-r--r-- | gcc/lto/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/lto/lto.c | 24 | ||||
-rw-r--r-- | gcc/lto/lto.h | 2 |
3 files changed, 21 insertions, 12 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 2c7d83b..73a9cba 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,10 @@ +2011-12-13 Eric Botcazou <ebotcazou@adacore.com> + + * lto.h (lto_parse_hex): Delete. + * lto.c (lto_read_decls): Use 'int' for offsets. + (lto_parse_hex): Make static and return proper 64-bit host type. + (lto_resolution_read): Use proper 64-bit host type. + 2011-12-13 Richard Guenther <rguenther@suse.de> PR lto/48354 diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index accb807..d84dbfd 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -267,7 +267,7 @@ lto_read_in_decl_state (struct data_in *data_in, const uint32_t *data, uint32_t ix; tree decl; uint32_t i, j; - + ix = *data++; decl = streamer_tree_cache_get (data_in->reader_cache, ix); if (TREE_CODE (decl) != FUNCTION_DECL) @@ -886,9 +886,9 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, VEC(ld_plugin_symbol_resolution_t,heap) *resolutions) { const struct lto_decl_header *header = (const struct lto_decl_header *) data; - const int32_t decl_offset = sizeof (struct lto_decl_header); - const int32_t main_offset = decl_offset + header->decl_state_size; - const int32_t string_offset = main_offset + header->main_size; + const int decl_offset = sizeof (struct lto_decl_header); + const int main_offset = decl_offset + header->decl_state_size; + const int string_offset = main_offset + header->main_size; struct lto_input_block ib_main; struct data_in *data_in; unsigned int i; @@ -939,17 +939,20 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, if (data_ptr != data_end) internal_error ("bytecode stream: garbage at the end of symbols section"); - + /* Set the current decl state to be the global state. */ decl_data->current_decl_state = decl_data->global_decl_state; lto_data_in_delete (data_in); } -/* strtoll is not portable. */ -int64_t -lto_parse_hex (const char *p) { - uint64_t ret = 0; +/* Custom version of strtoll, which is not portable. */ + +static HOST_WIDEST_INT +lto_parse_hex (const char *p) +{ + HOST_WIDEST_INT ret = 0; + for (; *p != '\0'; ++p) { char c = *p; @@ -965,6 +968,7 @@ lto_parse_hex (const char *p) { internal_error ("could not parse hex number"); ret |= part; } + return ret; } @@ -1000,7 +1004,7 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file) { int t; char offset_p[17]; - int64_t offset; + HOST_WIDEST_INT offset; t = fscanf (resolution, "@0x%16s", offset_p); if (t != 1) internal_error ("could not parse file offset"); diff --git a/gcc/lto/lto.h b/gcc/lto/lto.h index 43fcca6..8fde159 100644 --- a/gcc/lto/lto.h +++ b/gcc/lto/lto.h @@ -68,6 +68,4 @@ struct lto_section_list struct lto_section_slot *first, *last; }; -int64_t lto_parse_hex (const char *p); - #endif /* LTO_H */ |