aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2022-11-12 01:15:32 +0700
committerMike Frysinger <vapier@gentoo.org>2022-12-22 19:29:24 -0500
commit63fd5b5ddad9c715531168d5863853017a1f02d3 (patch)
tree0ede0e8d44166303d4b451dfc30e096e82e5d505 /sim
parent20fea6638f1785b241c39454dcb707234a675524 (diff)
downloadbinutils-63fd5b5ddad9c715531168d5863853017a1f02d3.zip
binutils-63fd5b5ddad9c715531168d5863853017a1f02d3.tar.gz
binutils-63fd5b5ddad9c715531168d5863853017a1f02d3.tar.bz2
sim: switch sim_{read,write} APIs to 64-bit all the time [PR sim/7504]
We've been using SIM_ADDR which has always been 32-bit. This means the upper 32-bit address range in 64-bit sims is inaccessible. Use 64-bit addresses all the time since we want the APIs to be stable regardless of the active arch backend (which can be 32 or 64-bit). The length is also 64-bit because it's completely feasible to have a program that is larger than 4 GiB in size/image/runtime. Forcing the caller to manually chunk those accesses up into 4 GiB at a time doesn't seem useful to anyone. Bug: https://sourceware.org/PR7504
Diffstat (limited to 'sim')
-rw-r--r--sim/arm/wrapper.c16
-rw-r--r--sim/avr/interp.c8
-rw-r--r--sim/common/sim-hrw.c8
-rw-r--r--sim/common/sim-utils.h4
-rw-r--r--sim/cris/sim-if.c4
-rw-r--r--sim/d10v/interp.c12
-rw-r--r--sim/erc32/interf.c8
-rw-r--r--sim/h8300/compile.c8
-rw-r--r--sim/m32c/gdb-if.c8
-rw-r--r--sim/ppc/sim_calls.c18
-rw-r--r--sim/rl78/gdb-if.c8
-rw-r--r--sim/rx/gdb-if.c8
-rw-r--r--sim/sh/interp.c8
13 files changed, 60 insertions, 58 deletions
diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c
index 2c5253f..7b11532 100644
--- a/sim/arm/wrapper.c
+++ b/sim/arm/wrapper.c
@@ -150,13 +150,13 @@ ARMul_ConsolePrint (ARMul_State * state,
}
}
-int
+uint64_t
sim_write (SIM_DESC sd ATTRIBUTE_UNUSED,
- SIM_ADDR addr,
+ uint64_t addr,
const void * buffer,
- int size)
+ uint64_t size)
{
- int i;
+ uint64_t i;
const unsigned char * data = buffer;
init ();
@@ -167,13 +167,13 @@ sim_write (SIM_DESC sd ATTRIBUTE_UNUSED,
return size;
}
-int
+uint64_t
sim_read (SIM_DESC sd ATTRIBUTE_UNUSED,
- SIM_ADDR addr,
+ uint64_t addr,
void * buffer,
- int size)
+ uint64_t size)
{
- int i;
+ uint64_t i;
unsigned char * data = buffer;
init ();
diff --git a/sim/avr/interp.c b/sim/avr/interp.c
index 3acf09b..b72da53 100644
--- a/sim/avr/interp.c
+++ b/sim/avr/interp.c
@@ -1529,8 +1529,8 @@ sim_engine_run (SIM_DESC sd,
}
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t addr, const void *buffer, uint64_t size)
{
int osize = size;
@@ -1566,8 +1566,8 @@ sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
return 0;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR addr, void *buffer, int size)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t addr, void *buffer, uint64_t size)
{
int osize = size;
diff --git a/sim/common/sim-hrw.c b/sim/common/sim-hrw.c
index 2596019..091ff5b 100644
--- a/sim/common/sim-hrw.c
+++ b/sim/common/sim-hrw.c
@@ -26,16 +26,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* Generic implementation of sim_read that works with simulators
modeling real hardware */
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buffer, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buffer, uint64_t length)
{
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
return sim_core_read_buffer (sd, NULL, read_map,
buffer, mem, length);
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buffer, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buffer, uint64_t length)
{
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
return sim_core_write_buffer (sd, NULL, write_map,
diff --git a/sim/common/sim-utils.h b/sim/common/sim-utils.h
index cd8aca9..b34ee94 100644
--- a/sim/common/sim-utils.h
+++ b/sim/common/sim-utils.h
@@ -63,8 +63,8 @@ SIM_RC sim_analyze_program (SIM_DESC sd, const char *prog_name,
This is still accommodated for backward compatibility reasons. */
typedef struct host_callback_struct host_callback;
-typedef int sim_write_fn (SIM_DESC sd, SIM_ADDR mem,
- const void *buf, int length);
+typedef uint64_t sim_write_fn (SIM_DESC sd, uint64_t mem,
+ const void *buf, uint64_t length);
struct bfd *sim_load_file (SIM_DESC sd, const char *myname,
host_callback *callback, const char *prog,
struct bfd *prog_bfd, int verbose_p,
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index a952a27..47862ed 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -485,8 +485,8 @@ aux_ent_entry (struct bfd *ebfd)
/* Helper for cris_handle_interpreter: like sim_write, but load at
interp_load_addr offset. */
-static int
-cris_write_interp (SIM_DESC sd, SIM_ADDR mem, const void *buf, int length)
+static uint64_t
+cris_write_interp (SIM_DESC sd, uint64_t mem, const void *buf, uint64_t length)
{
return sim_write (sd, mem + interp_load_addr, buf, length);
}
diff --git a/sim/d10v/interp.c b/sim/d10v/interp.c
index f83fa66..ae8b670 100644
--- a/sim/d10v/interp.c
+++ b/sim/d10v/interp.c
@@ -664,9 +664,9 @@ map_memory (SIM_DESC sd, SIM_CPU *cpu, unsigned phys_addr)
static int
xfer_mem (SIM_DESC sd,
- SIM_ADDR virt,
+ address_word virt,
unsigned char *buffer,
- int size,
+ uint64_t size,
int write_p)
{
uint8_t *memory;
@@ -705,8 +705,8 @@ xfer_mem (SIM_DESC sd,
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t addr, const void *buffer, uint64_t size)
{
/* FIXME: this should be performing a virtual transfer */
/* FIXME: We cast the const away, but it's safe because xfer_mem only reads
@@ -714,8 +714,8 @@ sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
return xfer_mem (sd, addr, (void *) buffer, size, 1);
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR addr, void *buffer, int size)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t addr, void *buffer, uint64_t size)
{
/* FIXME: this should be performing a virtual transfer */
return xfer_mem (sd, addr, buffer, size, 0);
diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c
index e88e5ed..fdd3f0f 100644
--- a/sim/erc32/interf.c
+++ b/sim/erc32/interf.c
@@ -329,8 +329,8 @@ sim_fetch_register(SIM_DESC sd, int regno, void *buf, int length)
return -1;
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buffer, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buffer, uint64_t length)
{
int i, len;
const unsigned char *data = buffer;
@@ -341,8 +341,8 @@ sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buffer, int length)
return length;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buffer, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buffer, uint64_t length)
{
int i, len;
unsigned char *data = buffer;
diff --git a/sim/h8300/compile.c b/sim/h8300/compile.c
index 261e904..077bc6d 100644
--- a/sim/h8300/compile.c
+++ b/sim/h8300/compile.c
@@ -4340,8 +4340,8 @@ sim_engine_run (SIM_DESC sd,
}
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t addr, const void *buffer, uint64_t size)
{
sim_cpu *cpu = STATE_CPU (sd, 0);
int i;
@@ -4362,8 +4362,8 @@ sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
return i;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR addr, void *buffer, int size)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t addr, void *buffer, uint64_t size)
{
sim_cpu *cpu = STATE_CPU (sd, 0);
diff --git a/sim/m32c/gdb-if.c b/sim/m32c/gdb-if.c
index b065bdc..f75052b 100644
--- a/sim/m32c/gdb-if.c
+++ b/sim/m32c/gdb-if.c
@@ -158,8 +158,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd * abfd,
return SIM_RC_OK;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buf, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buf, uint64_t length)
{
check_desc (sd);
@@ -171,8 +171,8 @@ sim_read (SIM_DESC sd, SIM_ADDR mem, void *buf, int length)
return length;
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buf, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buf, uint64_t length)
{
check_desc (sd);
diff --git a/sim/ppc/sim_calls.c b/sim/ppc/sim_calls.c
index 6ca6c2c..8854445 100644
--- a/sim/ppc/sim_calls.c
+++ b/sim/ppc/sim_calls.c
@@ -124,25 +124,27 @@ sim_load (SIM_DESC sd, const char *prog, bfd *abfd, int from_tty)
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buf, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buf, uint64_t length)
{
int result = psim_read_memory(simulator, MAX_NR_PROCESSORS,
buf, mem, length);
- TRACE(trace_gdb, ("sim_read(mem=0x%lx, buf=%p, length=%d) = %d\n",
- (long)mem, buf, length, result));
+ TRACE(trace_gdb,
+ ("sim_read(mem=0x%" PRIx64 ", buf=%p, length=%" PRIx64 ") = %d\n",
+ mem, buf, length, result));
return result;
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buf, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buf, uint64_t length)
{
int result = psim_write_memory(simulator, MAX_NR_PROCESSORS,
buf, mem, length,
1/*violate_ro*/);
- TRACE(trace_gdb, ("sim_write(mem=0x%lx, buf=%p, length=%d) = %d\n",
- (long)mem, buf, length, result));
+ TRACE(trace_gdb,
+ ("sim_write(mem=0x%" PRIx64 ", buf=%p, length=%" PRIx64 ") = %d\n",
+ mem, buf, length, result));
return result;
}
diff --git a/sim/rl78/gdb-if.c b/sim/rl78/gdb-if.c
index cc76a7d..3b3a7ae 100644
--- a/sim/rl78/gdb-if.c
+++ b/sim/rl78/gdb-if.c
@@ -204,8 +204,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
/* Read memory. */
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buf, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buf, uint64_t length)
{
check_desc (sd);
@@ -220,8 +220,8 @@ sim_read (SIM_DESC sd, SIM_ADDR mem, void *buf, int length)
/* Write memory. */
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buf, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buf, uint64_t length)
{
check_desc (sd);
diff --git a/sim/rx/gdb-if.c b/sim/rx/gdb-if.c
index 70f84c1..caa7ddb 100644
--- a/sim/rx/gdb-if.c
+++ b/sim/rx/gdb-if.c
@@ -225,8 +225,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
return SIM_RC_OK;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR mem, void *buffer, int length)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t mem, void *buffer, uint64_t length)
{
int i;
unsigned char *data = buffer;
@@ -251,8 +251,8 @@ sim_read (SIM_DESC sd, SIM_ADDR mem, void *buffer, int length)
return length;
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR mem, const void *buffer, int length)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t mem, const void *buffer, uint64_t length)
{
int i;
const unsigned char *data = buffer;
diff --git a/sim/sh/interp.c b/sim/sh/interp.c
index e0cbc7f..7784ca7 100644
--- a/sim/sh/interp.c
+++ b/sim/sh/interp.c
@@ -1873,8 +1873,8 @@ sim_resume (SIM_DESC sd, int step, int siggnal)
signal (SIGFPE, prev_fpe);
}
-int
-sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
+uint64_t
+sim_write (SIM_DESC sd, uint64_t addr, const void *buffer, uint64_t size)
{
int i;
const unsigned char *data = buffer;
@@ -1888,8 +1888,8 @@ sim_write (SIM_DESC sd, SIM_ADDR addr, const void *buffer, int size)
return size;
}
-int
-sim_read (SIM_DESC sd, SIM_ADDR addr, void *buffer, int size)
+uint64_t
+sim_read (SIM_DESC sd, uint64_t addr, void *buffer, uint64_t size)
{
int i;
unsigned char *data = buffer;