diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 1e936a69c93..5df1e050b87 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,12 @@ +2011-05-27 Ian Lance Taylor + + * go-backend.c: Include "output.h". + (go_write_export_data): New function. + * go-c.h (go_write_export_data): Declare. + * Make-lang.in (go/go-backend.o): Depend on output.h. + (go/export.o): Depend on $(GO_C_H). Do not depend on + $(MACHMODE_H), output.h, or $(TARGET_H). + 2011-05-24 Joseph Myers * Make-lang.in (GCCGO_OBJS): Remove prefix.o. diff --git a/gcc/go/Make-lang.in b/gcc/go/Make-lang.in index 82e219baa6f..ef5dc753d0a 100644 --- a/gcc/go/Make-lang.in +++ b/gcc/go/Make-lang.in @@ -224,7 +224,7 @@ GO_IMPORT_H = go/gofrontend/import.h go/gofrontend/export.h GO_RUNTIME_H = go/gofrontend/runtime.h go/gofrontend/runtime.def go/go-backend.o: go/go-backend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - $(TM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(TARGET_H) + $(TM_H) $(RTL_H) $(TREE_H) $(TM_P_H) output.h $(TARGET_H) go/go-lang.o: go/go-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(OPTS_H) \ $(TREE_H) $(GIMPLE_H) $(GGC_H) $(TOPLEV_H) debug.h options.h \ @@ -248,8 +248,8 @@ go/%.o: go/gofrontend/%.cc go/dataflow.o: go/gofrontend/dataflow.cc $(GO_SYSTEM_H) $(GO_GOGO_H) \ $(GO_EXPRESSIONS_H) $(GO_STATEMENTS_H) go/gofrontend/dataflow.h go/export.o: go/gofrontend/export.cc $(GO_SYSTEM_H) \ - $(srcdir)/../include/sha1.h $(MACHMODE_H) output.h $(TARGET_H) \ - $(GO_GOGO_H) $(GO_TYPES_H) $(GO_STATEMENTS_H) go/gofrontend/export.h + $(srcdir)/../include/sha1.h $(GO_C_H) $(GO_GOGO_H) $(GO_TYPES_H) \ + $(GO_STATEMENTS_H) go/gofrontend/export.h go/expressions.o: go/gofrontend/expressions.cc $(GO_SYSTEM_H) $(TOPLEV_H) \ intl.h $(TREE_H) $(GIMPLE_H) tree-iterator.h convert.h $(REAL_H) \ realmpfr.h $(GO_C_H) $(GO_GOGO_H) $(GO_TYPES_H) \ diff --git a/gcc/go/go-backend.c b/gcc/go/go-backend.c index 5ecc99bb18e..60a97db7df4 100644 --- a/gcc/go/go-backend.c +++ b/gcc/go/go-backend.c @@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see #include "rtl.h" #include "tree.h" #include "tm_p.h" +#include "output.h" #include "target.h" #include "go-c.h" @@ -91,3 +92,21 @@ go_imported_unsafe (void) /* Let the backend know that the options have changed. */ targetm.override_options_after_change (); } + +/* This is called by the Go frontend proper to add data to the + .go_export section. */ + +void +go_write_export_data (const char *bytes, unsigned int size) +{ + static section* sec; + + if (sec == NULL) + { + gcc_assert (targetm.have_named_sections); + sec = get_section (".go_export", SECTION_DEBUG, NULL); + } + + switch_to_section (sec); + assemble_string (bytes, size); +} diff --git a/gcc/go/go-c.h b/gcc/go/go-c.h index 1c7a3b1f0c6..f70f1ad6ccf 100644 --- a/gcc/go/go-c.h +++ b/gcc/go/go-c.h @@ -66,6 +66,8 @@ extern void go_trampoline_info (unsigned int *size, unsigned int *alignment); extern void go_imported_unsafe (void); +extern void go_write_export_data (const char *, unsigned int); + #if defined(__cplusplus) && !defined(ENABLE_BUILD_WITH_CXX) } /* End extern "C". */ #endif diff --git a/gcc/go/gofrontend/export.cc b/gcc/go/gofrontend/export.cc index 538fb97ce68..48088adddd3 100644 --- a/gcc/go/gofrontend/export.cc +++ b/gcc/go/gofrontend/export.cc @@ -5,20 +5,10 @@ // license that can be found in the LICENSE file. #include "go-system.h" + #include "sha1.h" -#ifndef ENABLE_BUILD_WITH_CXX -extern "C" -{ -#endif - -#include "machmode.h" -#include "output.h" -#include "target.h" - -#ifndef ENABLE_BUILD_WITH_CXX -} -#endif +#include "go-c.h" #include "gogo.h" #include "types.h" @@ -416,7 +406,6 @@ Export::Stream::write_checksum(const std::string& s) // Class Stream_to_section. Stream_to_section::Stream_to_section() - : section_(NULL) { } @@ -425,15 +414,5 @@ Stream_to_section::Stream_to_section() void Stream_to_section::do_write(const char* bytes, size_t length) { - section* sec = (section*) this->section_; - if (sec == NULL) - { - go_assert(targetm.have_named_sections); - - sec = get_section(".go_export", SECTION_DEBUG, NULL); - this->section_ = (void*) sec; - } - - switch_to_section(sec); - assemble_string(bytes, length); + go_write_export_data (bytes, length); } diff --git a/gcc/go/gofrontend/export.h b/gcc/go/gofrontend/export.h index 4a1fd2b6424..ef249779303 100644 --- a/gcc/go/gofrontend/export.h +++ b/gcc/go/gofrontend/export.h @@ -179,11 +179,6 @@ class Stream_to_section : public Export::Stream protected: void do_write(const char*, size_t); - - private: - // The section we are writing to; this is really union section - // defined in output.h. - void* section_; }; #endif // !defined(GO_EXPORT_H)