summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/aarch64/interp.c6
-rw-r--r--sim/bfin/interp.c6
-rw-r--r--sim/bpf/sim-if.c8
-rw-r--r--sim/common/sim-base.h4
-rw-r--r--sim/common/sim-utils.c1
-rw-r--r--sim/cris/sim-if.c10
-rw-r--r--sim/example-synacor/interp.c6
-rw-r--r--sim/frv/sim-if.c8
-rw-r--r--sim/ft32/interp.c7
-rw-r--r--sim/iq2000/sim-if.c8
-rw-r--r--sim/lm32/sim-if.c8
-rw-r--r--sim/m32r/sim-if.c8
-rw-r--r--sim/pru/interp.c6
-rw-r--r--sim/riscv/interp.c6
14 files changed, 85 insertions, 7 deletions
diff --git a/sim/aarch64/interp.c b/sim/aarch64/interp.c
index 999b949ed88..4d7f4217456 100644
--- a/sim/aarch64/interp.c
+++ b/sim/aarch64/interp.c
@@ -144,6 +144,12 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
if (trace_load_symbols (sd))
{
STATE_PROG_SYMS_COUNT (sd) =
diff --git a/sim/bfin/interp.c b/sim/bfin/interp.c
index 088b5593787..9d0e737cc33 100644
--- a/sim/bfin/interp.c
+++ b/sim/bfin/interp.c
@@ -1170,6 +1170,12 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
switch (STATE_ENVIRONMENT (sd))
{
case USER_ENVIRONMENT:
diff --git a/sim/bpf/sim-if.c b/sim/bpf/sim-if.c
index a8d94411567..7503a302ca3 100644
--- a/sim/bpf/sim-if.c
+++ b/sim/bpf/sim-if.c
@@ -190,7 +190,7 @@ sim_open (SIM_OPEN_KIND kind,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
- char *const *argv, char *const *envp)
+ char *const *argv, char *const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -213,5 +213,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/common/sim-base.h b/sim/common/sim-base.h
index c34f6f66a91..50def1e02b7 100644
--- a/sim/common/sim-base.h
+++ b/sim/common/sim-base.h
@@ -165,6 +165,10 @@ struct sim_state {
char *prog_argv0;
#define STATE_PROG_ARGV0(sd) ((sd)->prog_argv0)
+ /* The program's environment. */
+ char **prog_envp;
+#define STATE_PROG_ENVP(sd) ((sd)->prog_envp)
+
/* The program's bfd. */
struct bfd *prog_bfd;
#define STATE_PROG_BFD(sd) ((sd)->prog_bfd)
diff --git a/sim/common/sim-utils.c b/sim/common/sim-utils.c
index 6f147b2d703..ff6234b1c98 100644
--- a/sim/common/sim-utils.c
+++ b/sim/common/sim-utils.c
@@ -99,6 +99,7 @@ sim_state_free (SIM_DESC sd)
free (STATE_PROG_FILE (sd));
free (STATE_PROG_ARGV0 (sd));
+ freeargv (STATE_PROG_ENVP (sd));
free (sd);
}
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index 500941a27d7..d29ccc59f35 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -951,8 +951,8 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
- char * const *argv ATTRIBUTE_UNUSED,
- char * const *envp ATTRIBUTE_UNUSED)
+ char * const *argv,
+ char * const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -977,6 +977,12 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/example-synacor/interp.c b/sim/example-synacor/interp.c
index d1a82e509d1..93aea7b0a86 100644
--- a/sim/example-synacor/interp.c
+++ b/sim/example-synacor/interp.c
@@ -174,5 +174,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/frv/sim-if.c b/sim/frv/sim-if.c
index d0361537c61..7b0913dad01 100644
--- a/sim/frv/sim-if.c
+++ b/sim/frv/sim-if.c
@@ -175,7 +175,7 @@ frv_sim_close (SIM_DESC sd, int quitting)
SIM_RC
sim_create_inferior (SIM_DESC sd, bfd *abfd, char * const *argv,
- char * const *envp)
+ char * const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -196,5 +196,11 @@ sim_create_inferior (SIM_DESC sd, bfd *abfd, char * const *argv,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/ft32/interp.c b/sim/ft32/interp.c
index a1cc9abe911..2838395dd02 100644
--- a/sim/ft32/interp.c
+++ b/sim/ft32/interp.c
@@ -900,6 +900,13 @@ sim_create_inferior (SIM_DESC sd,
freeargv (STATE_PROG_ARGV (sd));
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
cpu->state.regs[FT32_HARD_SP] = addr;
cpu->state.num_i = 0;
cpu->state.cycles = 0;
diff --git a/sim/iq2000/sim-if.c b/sim/iq2000/sim-if.c
index 21ed8217bb0..05b348efe90 100644
--- a/sim/iq2000/sim-if.c
+++ b/sim/iq2000/sim-if.c
@@ -131,7 +131,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
- char * const *envp)
+ char * const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -152,5 +152,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/lm32/sim-if.c b/sim/lm32/sim-if.c
index ce9ab5ac967..e7bffbdf3f6 100644
--- a/sim/lm32/sim-if.c
+++ b/sim/lm32/sim-if.c
@@ -192,7 +192,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
- char * const *envp)
+ char * const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -213,5 +213,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/m32r/sim-if.c b/sim/m32r/sim-if.c
index b2f7b4636e0..0cb49a1e4e1 100644
--- a/sim/m32r/sim-if.c
+++ b/sim/m32r/sim-if.c
@@ -145,7 +145,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
- char * const *envp)
+ char * const *env)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
SIM_ADDR addr;
@@ -174,6 +174,12 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/pru/interp.c b/sim/pru/interp.c
index ca640f440bc..f243df9426d 100644
--- a/sim/pru/interp.c
+++ b/sim/pru/interp.c
@@ -848,5 +848,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *prog_bfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
return SIM_RC_OK;
}
diff --git a/sim/riscv/interp.c b/sim/riscv/interp.c
index f94a8428d69..7ecdd55141c 100644
--- a/sim/riscv/interp.c
+++ b/sim/riscv/interp.c
@@ -153,6 +153,12 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
STATE_PROG_ARGV (sd) = dupargv (argv);
}
+ if (STATE_PROG_ENVP (sd) != env)
+ {
+ freeargv (STATE_PROG_ENVP (sd));
+ STATE_PROG_ENVP (sd) = dupargv (env);
+ }
+
initialize_env (sd, (void *)argv, (void *)env);
return SIM_RC_OK;