From 80544cda8ae97d3041dcc1e078e22c70aba3a9a7 Mon Sep 17 00:00:00 2001 From: Derek Hower Date: Tue, 21 Jul 2009 18:33:05 -0500 Subject: [PATCH] ruby: libruby_init now takes parsed Ruby-lang config text libruby_init now expects to get a file that contains the output of running a ruby-lang configuration, opposed to the ruby-lang configuration itself. --- src/mem/ruby/config/cfg.rb | 15 ++++++++--- src/mem/ruby/libruby.cc | 53 +------------------------------------- 2 files changed, 12 insertions(+), 56 deletions(-) diff --git a/src/mem/ruby/config/cfg.rb b/src/mem/ruby/config/cfg.rb index de8bcafd2..a43b5e125 100644 --- a/src/mem/ruby/config/cfg.rb +++ b/src/mem/ruby/config/cfg.rb @@ -100,9 +100,11 @@ class LibRubyObject end def self.printConstructors() + str = "" @@all_objs.each { |obj| - print obj.cppClassName, " ", obj.obj_name, " ",obj.argv,"\n" + str += obj.cppClassName + " " + obj.obj_name + " " + obj.argv + "\n" } + return str end def self.all() @@all_objs @@ -215,7 +217,7 @@ class RubySystem EOS end - def self.generateConfig() + def self.getConfig() # get current time for random seed if set to "rand" if @@params[:random_seed] == "rand" t = Time.now @@ -224,13 +226,18 @@ class RubySystem if ! @@params[:random_seed].is_a?(Integer) raise TypeException end - print "System sys0 ",argv,"\n" + str = "System sys0 "+argv+"\n" LibRubyObject.all.each { |obj| if obj.is_a?(SetAssociativeCache) obj.calculateLatency end } - LibRubyObject.printConstructors + str += LibRubyObject.printConstructors + return str + end + + def self.generateConfig() + puts getConfig end def self.printIfacePorts() diff --git a/src/mem/ruby/libruby.cc b/src/mem/ruby/libruby.cc index b867fec34..e4e302eba 100644 --- a/src/mem/ruby/libruby.cc +++ b/src/mem/ruby/libruby.cc @@ -88,58 +88,7 @@ vector tokenizeString(string str, string delims) void libruby_init(const char* cfg_filename) { - stringstream cfg_output; - - // first we execute the Ruby-lang configuration script - int fd[2]; - int pid; - if (pipe(fd) == -1) { - perror("Error Creating Pipe"); - exit(EXIT_FAILURE); - } - - pid = fork(); - if (pid == -1){ - perror("Error forking"); - exit(EXIT_FAILURE); - } - - if (!pid) { - // child - close(fd[0]); // close the read end of the pipe - // replace stdout with the write pipe - if (dup2(fd[1], STDOUT_FILENO) == -1) { - perror("Error redirecting stdout"); - exit(EXIT_FAILURE); - } - if (execlp("ruby", "ruby", "-I", GEMS_ROOT "/ruby/config", - GEMS_ROOT "/ruby/config/print_cfg.rb", "-r", cfg_filename, NULL)) { - perror("execlp"); - exit(EXIT_FAILURE); - } - } else { - close(fd[1]); - - int child_status; - if (wait(&child_status) == -1) { - perror("wait"); - exit(EXIT_FAILURE); - } - if (child_status != EXIT_SUCCESS) { - exit(EXIT_FAILURE); - } - - char buf[100]; - int bytes_read; - while( (bytes_read = read(fd[0], buf, 100)) > 0 ) { - for (int i=0;i * sys_conf = new vector; -- 2.30.2