mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 15:18:37 +08:00
sim: callback: expose argv & environ
Pass the existing strings data to the callbacks so that common libgloss syscalls can be implemented (which we'll do shortly).
This commit is contained in:
@ -178,6 +178,12 @@ struct host_callback_struct
|
||||
|
||||
enum bfd_endian target_endian;
|
||||
|
||||
/* Program command line options. */
|
||||
char **argv;
|
||||
|
||||
/* Program environment. */
|
||||
char **envp;
|
||||
|
||||
/* Size of an "int" on the target (for syscalls whose ABI uses "int").
|
||||
This must include padding, and only padding-at-higher-address is
|
||||
supported. For example, a 64-bit target with 32-bit int:s which
|
||||
|
@ -126,6 +126,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char * const *argv, char * const *env)
|
||||
{
|
||||
sim_cpu *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
bfd_vma addr = 0;
|
||||
|
||||
if (abfd != NULL)
|
||||
@ -150,6 +151,9 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
if (trace_load_symbols (sd))
|
||||
{
|
||||
STATE_PROG_SYMS_COUNT (sd) =
|
||||
|
@ -1151,6 +1151,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char * const *argv, char * const *env)
|
||||
{
|
||||
SIM_CPU *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
/* Set the PC. */
|
||||
@ -1176,6 +1177,9 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
switch (STATE_ENVIRONMENT (sd))
|
||||
{
|
||||
case USER_ENVIRONMENT:
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include "sim-options.h"
|
||||
#include "libiberty.h"
|
||||
@ -193,6 +194,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char *const *argv, char *const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
/* Determine the start address.
|
||||
@ -219,5 +221,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -770,6 +770,8 @@ host_callback default_callback =
|
||||
|
||||
/* Defaults expected to be overridden at initialization, where needed. */
|
||||
BFD_ENDIAN_UNKNOWN, /* target_endian */
|
||||
NULL, /* argv */
|
||||
NULL, /* envp */
|
||||
4, /* target_sizeof_int */
|
||||
|
||||
HOST_CALLBACK_MAGIC,
|
||||
|
@ -23,14 +23,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libiberty.h"
|
||||
#include "bfd.h"
|
||||
#include "elf-bfd.h"
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include "sim-options.h"
|
||||
#include "sim-hw.h"
|
||||
#include "dis-asm.h"
|
||||
@ -741,7 +743,9 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
||||
|
||||
/* Find out how much room is needed for the environment and argv, create
|
||||
that memory and fill it. Only do this when there's a program
|
||||
specified. */
|
||||
specified.
|
||||
|
||||
TODO: Move this to sim_create_inferior and use STATE_PROG_ENVP. */
|
||||
if (abfd != NULL && !cris_bare_iron)
|
||||
{
|
||||
const char *name = bfd_get_filename (abfd);
|
||||
@ -955,6 +959,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char * const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
if (sd != NULL)
|
||||
@ -983,6 +988,9 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include "sim-options.h"
|
||||
|
||||
@ -155,6 +156,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char * const *argv, char * const *env)
|
||||
{
|
||||
SIM_CPU *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
sim_cia addr;
|
||||
|
||||
/* Set the PC. */
|
||||
@ -180,5 +182,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -20,10 +20,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sim/callback.h"
|
||||
|
||||
#define WANT_CPU
|
||||
#define WANT_CPU_FRVBF
|
||||
#include "sim-main.h"
|
||||
#include <stdlib.h>
|
||||
#include "sim-options.h"
|
||||
#include "libiberty.h"
|
||||
#include "bfd.h"
|
||||
@ -178,6 +181,7 @@ sim_create_inferior (SIM_DESC sd, bfd *abfd, char * const *argv,
|
||||
char * const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
if (abfd != NULL)
|
||||
@ -202,5 +206,8 @@ sim_create_inferior (SIM_DESC sd, bfd *abfd, char * const *argv,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -884,6 +884,7 @@ sim_create_inferior (SIM_DESC sd,
|
||||
{
|
||||
uint32_t addr;
|
||||
sim_cpu *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
|
||||
/* Set the PC. */
|
||||
if (abfd != NULL)
|
||||
@ -907,6 +908,9 @@ sim_create_inferior (SIM_DESC sd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
cpu->state.regs[FT32_HARD_SP] = addr;
|
||||
cpu->state.num_i = 0;
|
||||
cpu->state.cycles = 0;
|
||||
|
@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-options.h"
|
||||
#include "libiberty.h"
|
||||
#include "bfd.h"
|
||||
@ -134,6 +135,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
char * const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
if (abfd != NULL)
|
||||
@ -158,5 +160,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -21,12 +21,13 @@
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include "sim-options.h"
|
||||
#include "libiberty.h"
|
||||
#include "bfd.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Cover function of sim_state_free to free the cpu buffers as well. */
|
||||
|
||||
@ -195,6 +196,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
char * const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
if (abfd != NULL)
|
||||
@ -219,5 +221,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -20,14 +20,15 @@
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include "sim-options.h"
|
||||
#include "libiberty.h"
|
||||
#include "bfd.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dv-m32r_uart.h"
|
||||
|
||||
#define M32R_DEFAULT_MEM_SIZE 0x2000000 /* 32M */
|
||||
@ -148,6 +149,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
char * const *env)
|
||||
{
|
||||
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
if (abfd != NULL)
|
||||
@ -180,6 +182,9 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
@ -831,6 +831,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *prog_bfd,
|
||||
char * const *argv, char * const *env)
|
||||
{
|
||||
SIM_CPU *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
addr = bfd_get_start_address (prog_bfd);
|
||||
@ -854,5 +855,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *prog_bfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
/* This must come before any other includes. */
|
||||
#include "defs.h"
|
||||
|
||||
#include "sim/callback.h"
|
||||
#include "sim-main.h"
|
||||
#include "sim-options.h"
|
||||
|
||||
@ -134,6 +135,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
char * const *argv, char * const *env)
|
||||
{
|
||||
SIM_CPU *cpu = STATE_CPU (sd, 0);
|
||||
host_callback *cb = STATE_CALLBACK (sd);
|
||||
SIM_ADDR addr;
|
||||
|
||||
/* Set the PC. */
|
||||
@ -159,6 +161,9 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
|
||||
STATE_PROG_ENVP (sd) = dupargv (env);
|
||||
}
|
||||
|
||||
cb->argv = STATE_PROG_ARGV (sd);
|
||||
cb->envp = STATE_PROG_ENVP (sd);
|
||||
|
||||
initialize_env (sd, (void *)argv, (void *)env);
|
||||
|
||||
return SIM_RC_OK;
|
||||
|
Reference in New Issue
Block a user