X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Flto-section-in.c;h=fb0c70d81c46557c71cf671272851d39f0390868;hb=8d6495ed14d07a91e62633859b5eb094579fc64d;hp=6d081d8c1977adaac9969b070d31b1dee7495dfe;hpb=1bf41320ebc2b9427bda2813998eb2e869d4d0f4;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/lto-section-in.c b/gcc/lto-section-in.c index 6d081d8c197..fb0c70d81c4 100644 --- a/gcc/lto-section-in.c +++ b/gcc/lto-section-in.c @@ -1,6 +1,6 @@ /* Input functions for reading LTO sections. - Copyright 2009 Free Software Foundation, Inc. + Copyright 2009, 2010 Free Software Foundation, Inc. Contributed by Kenneth Zadeck This file is part of GCC. @@ -23,7 +23,6 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tm.h" -#include "toplev.h" #include "tree.h" #include "expr.h" #include "flags.h" @@ -35,7 +34,7 @@ along with GCC; see the file COPYING3. If not see #include "cgraph.h" #include "function.h" #include "ggc.h" -#include "diagnostic.h" +#include "diagnostic-core.h" #include "except.h" #include "vec.h" #include "timevar.h" @@ -50,92 +49,20 @@ const char *lto_section_name[LTO_N_SECTION_TYPES] = { "decls", "function_body", - "static_initializer", + "statics", "cgraph", - "varpool", + "vars", "refs", - "jump_funcs" - "ipa_pure_const", - "ipa_reference", + "asm", + "jmpfuncs", + "pureconst", + "reference", "symtab", "opts", - "cgraphopt" + "cgraphopt", + "inline" }; -unsigned char -lto_input_1_unsigned (struct lto_input_block *ib) -{ - if (ib->p >= ib->len) - internal_error ("bytecode stream: trying to read %d bytes " - "after the end of the input buffer", ib->p - ib->len); - - return (ib->data[ib->p++]); -} - - -/* Read an ULEB128 Number of IB. */ - -unsigned HOST_WIDE_INT -lto_input_uleb128 (struct lto_input_block *ib) -{ - unsigned HOST_WIDE_INT result = 0; - int shift = 0; - unsigned HOST_WIDE_INT byte; - - while (true) - { - byte = lto_input_1_unsigned (ib); - result |= (byte & 0x7f) << shift; - shift += 7; - if ((byte & 0x80) == 0) - return result; - } -} - -/* HOST_WIDEST_INT version of lto_input_uleb128. IB is as in - lto_input_uleb128. */ - -unsigned HOST_WIDEST_INT -lto_input_widest_uint_uleb128 (struct lto_input_block *ib) -{ - unsigned HOST_WIDEST_INT result = 0; - int shift = 0; - unsigned HOST_WIDEST_INT byte; - - while (true) - { - byte = lto_input_1_unsigned (ib); - result |= (byte & 0x7f) << shift; - shift += 7; - if ((byte & 0x80) == 0) - return result; - } -} - -/* Read an SLEB128 Number of IB. */ - -HOST_WIDE_INT -lto_input_sleb128 (struct lto_input_block *ib) -{ - HOST_WIDE_INT result = 0; - int shift = 0; - unsigned HOST_WIDE_INT byte; - - while (true) - { - byte = lto_input_1_unsigned (ib); - result |= (byte & 0x7f) << shift; - shift += 7; - if ((byte & 0x80) == 0) - { - if ((shift < HOST_BITS_PER_WIDE_INT) && (byte & 0x40)) - result |= - ((HOST_WIDE_INT)1 << shift); - - return result; - } - } -} - /* Hooks so that the ipa passes can call into the lto front end to get sections. */ @@ -297,7 +224,7 @@ lto_create_simple_input_block (struct lto_file_decl_data *file_data, = (const struct lto_simple_header *) data; struct lto_input_block* ib_main; - int32_t main_offset = sizeof (struct lto_simple_header); + int main_offset = sizeof (struct lto_simple_header); if (!data) return NULL; @@ -433,11 +360,7 @@ lto_get_decl_name_mapping (struct lto_file_decl_data *decl_data, struct lto_in_decl_state * lto_new_in_decl_state (void) { - struct lto_in_decl_state *state; - - state = ((struct lto_in_decl_state *) ggc_alloc (sizeof (*state))); - memset (state, 0, sizeof (*state)); - return state; + return ggc_alloc_cleared_lto_in_decl_state (); } /* Delete STATE and its components. */ @@ -490,3 +413,23 @@ lto_get_function_in_decl_state (struct lto_file_decl_data *file_data, slot = htab_find_slot (file_data->function_decl_states, &temp, NO_INSERT); return slot? ((struct lto_in_decl_state*) *slot) : NULL; } + + +/* Report read pass end of the section. */ + +void +lto_section_overrun (struct lto_input_block *ib) +{ + fatal_error ("bytecode stream: trying to read %d bytes " + "after the end of the input buffer", ib->p - ib->len); +} + +/* Report out of range value. */ + +void +lto_value_range_error (const char *purpose, HOST_WIDE_INT val, + HOST_WIDE_INT min, HOST_WIDE_INT max) +{ + fatal_error ("%s out of range: Range is %i to %i, value is %i", + purpose, (int)min, (int)max, (int)val); +}