* [PATCH/committed 1/5] sim: m32r: cleanup unused variables
@ 2024-01-11 3:37 Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 2/5] sim: m32r: migrate ftime() to clock_gettime() Mike Frysinger
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Mike Frysinger @ 2024-01-11 3:37 UTC (permalink / raw)
To: gdb-patches
We've been building this file with -Wno-error, so clean up unused
variable warnings.
---
sim/m32r/traps.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/sim/m32r/traps.c b/sim/m32r/traps.c
index 51fe0d484a5e..b779e0c3b9f5 100644
--- a/sim/m32r/traps.c
+++ b/sim/m32r/traps.c
@@ -141,7 +141,6 @@ static void *
t2h_addr (host_callback *cb, struct cb_syscall *sc,
unsigned long taddr)
{
- void *addr;
SIM_DESC sd = (SIM_DESC) sc->p1;
SIM_CPU *cpu = (SIM_CPU *) sc->p2;
@@ -220,7 +219,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
{
CB_SYSCALL s;
unsigned int func, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
- int result, result2, errcode;
+ int result, errcode;
if (STATE_ENVIRONMENT (sd) != USER_ENVIRONMENT)
goto case_default;
@@ -250,7 +249,6 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
s.write_mem = sim_syscall_write_mem;
result = 0;
- result2 = 0;
errcode = 0;
switch (func)
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH/committed 2/5] sim: m32r: migrate ftime() to clock_gettime()
2024-01-11 3:37 [PATCH/committed 1/5] sim: m32r: cleanup unused variables Mike Frysinger
@ 2024-01-11 3:37 ` Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 3/5] sim: m32r: fix missing break statement Mike Frysinger
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2024-01-11 3:37 UTC (permalink / raw)
To: gdb-patches
The ftime() function has been deprecated since POSIX-1-2004, and
removed in POSIX.1-2008. It's also been deprecated/removed in glibc
since 2.33. POSIX has always said the function is not portable, and
its return value, timezone, and dstflag fields are unspecified. Even
if Linux/glibc & m32r had defined behavior, those aren't the host for
the sim runtime.
So let's stop using the function and switch to clock_gettime. gnulib
already has detection support for it, and it's been around since at
least POSIX-1-2004.
---
sim/m32r/traps.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/sim/m32r/traps.c b/sim/m32r/traps.c
index b779e0c3b9f5..c5191989d7fd 100644
--- a/sim/m32r/traps.c
+++ b/sim/m32r/traps.c
@@ -386,17 +386,20 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
case TARGET_LINUX_SYS_ftime:
{
struct timeb t;
+ struct timespec ts;
- result = ftime (&t);
+ result = clock_gettime (CLOCK_REALTIME, &ts);
errcode = errno;
if (result != 0)
break;
- t.time = H2T_4 (t.time);
- t.millitm = H2T_2 (t.millitm);
- t.timezone = H2T_2 (t.timezone);
- t.dstflag = H2T_2 (t.dstflag);
+ t.time = H2T_4 (ts.tv_sec);
+ t.millitm = H2T_2 (ts.tv_nsec / 1000000);
+ /* POSIX.1-2001 says the contents of the timezone and dstflag
+ members of tp after a call to ftime() are unspecified. */
+ t.timezone = H2T_2 (0);
+ t.dstflag = H2T_2 (0);
if ((s.write_mem) (cb, &s, arg1, (char *) &t, sizeof(t))
!= sizeof(t))
{
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH/committed 3/5] sim: m32r: fix missing break statement
2024-01-11 3:37 [PATCH/committed 1/5] sim: m32r: cleanup unused variables Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 2/5] sim: m32r: migrate ftime() to clock_gettime() Mike Frysinger
@ 2024-01-11 3:37 ` Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 4/5] sim: m32r: fixup some of the int<->pointer casts Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 5/5] sim: m32r: enable warnings in traps.c Mike Frysinger
3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2024-01-11 3:37 UTC (permalink / raw)
To: gdb-patches
The ftime syscall should not fallthrough to the sync syscall.
Clearly the code was missing a break statement.
---
sim/m32r/traps.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/sim/m32r/traps.c b/sim/m32r/traps.c
index c5191989d7fd..9ffa3bb15d94 100644
--- a/sim/m32r/traps.c
+++ b/sim/m32r/traps.c
@@ -407,6 +407,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
errcode = EINVAL;
}
}
+ break;
case TARGET_LINUX_SYS_sync:
sync ();
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH/committed 4/5] sim: m32r: fixup some of the int<->pointer casts
2024-01-11 3:37 [PATCH/committed 1/5] sim: m32r: cleanup unused variables Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 2/5] sim: m32r: migrate ftime() to clock_gettime() Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 3/5] sim: m32r: fix missing break statement Mike Frysinger
@ 2024-01-11 3:37 ` Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 5/5] sim: m32r: enable warnings in traps.c Mike Frysinger
3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2024-01-11 3:37 UTC (permalink / raw)
To: gdb-patches
The m32r trap code was written for a 32-bit Linux host (and really, one
whose Linux ABI matched pretty exactly). This has lead to conversions
between integers and pointers which breaks down hard on 64-bit hosts.
Clean up some of the functions where possible to avoid unnecessary
conversions, use uintptr_t to cast 32-bit target pointers to host
pointers in some places, and just stub out a few functions that can't
easily be salvaged currently when sizeof(void*) is not 32-bits. This
is a bit ugly, but lets us enable warnings for the whole file.
---
sim/config.h.in | 3 ++
sim/configure | 39 +++++++++++++++++--
sim/m32r/traps.c | 81 +++++++++++++++++++++++++--------------
sim/m4/sim_ac_platform.m4 | 2 +
4 files changed, 94 insertions(+), 31 deletions(-)
diff --git a/sim/m32r/traps.c b/sim/m32r/traps.c
index 9ffa3bb15d94..d010863502db 100644
--- a/sim/m32r/traps.c
+++ b/sim/m32r/traps.c
@@ -436,7 +436,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_brk:
- result = brk ((void *) arg1);
+ result = brk ((void *) (uintptr_t) arg1);
errcode = errno;
//result = arg1;
break;
@@ -582,51 +582,51 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
{
int n;
fd_set readfds;
- fd_set *treadfdsp;
+ unsigned int treadfdsp;
fd_set *hreadfdsp;
fd_set writefds;
- fd_set *twritefdsp;
+ unsigned int twritefdsp;
fd_set *hwritefdsp;
fd_set exceptfds;
- fd_set *texceptfdsp;
+ unsigned int texceptfdsp;
fd_set *hexceptfdsp;
- struct timeval *ttimeoutp;
+ unsigned int ttimeoutp;
struct timeval timeout;
n = arg1;
- treadfdsp = (fd_set *) arg2;
- if (treadfdsp != NULL)
+ treadfdsp = arg2;
+ if (treadfdsp !=0)
{
- readfds = *((fd_set *) t2h_addr (cb, &s, (unsigned int) treadfdsp));
+ readfds = *((fd_set *) t2h_addr (cb, &s, treadfdsp));
translate_endian_t2h (&readfds, sizeof(readfds));
hreadfdsp = &readfds;
}
else
hreadfdsp = NULL;
- twritefdsp = (fd_set *) arg3;
- if (twritefdsp != NULL)
+ twritefdsp = arg3;
+ if (twritefdsp != 0)
{
- writefds = *((fd_set *) t2h_addr (cb, &s, (unsigned int) twritefdsp));
+ writefds = *((fd_set *) t2h_addr (cb, &s, twritefdsp));
translate_endian_t2h (&writefds, sizeof(writefds));
hwritefdsp = &writefds;
}
else
hwritefdsp = NULL;
- texceptfdsp = (fd_set *) arg4;
- if (texceptfdsp != NULL)
+ texceptfdsp = arg4;
+ if (texceptfdsp != 0)
{
- exceptfds = *((fd_set *) t2h_addr (cb, &s, (unsigned int) texceptfdsp));
+ exceptfds = *((fd_set *) t2h_addr (cb, &s, texceptfdsp));
translate_endian_t2h (&exceptfds, sizeof(exceptfds));
hexceptfdsp = &exceptfds;
}
else
hexceptfdsp = NULL;
- ttimeoutp = (struct timeval *) arg5;
- timeout = *((struct timeval *) t2h_addr (cb, &s, (unsigned int) ttimeoutp));
+ ttimeoutp = arg5;
+ timeout = *((struct timeval *) t2h_addr (cb, &s, ttimeoutp));
translate_endian_t2h (&timeout, sizeof(timeout));
result = select (n, hreadfdsp, hwritefdsp, hexceptfdsp, &timeout);
@@ -635,10 +635,10 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
if (result != 0)
break;
- if (treadfdsp != NULL)
+ if (treadfdsp != 0)
{
translate_endian_h2t (&readfds, sizeof(readfds));
- if ((s.write_mem) (cb, &s, (unsigned long) treadfdsp,
+ if ((s.write_mem) (cb, &s, treadfdsp,
(char *) &readfds, sizeof(readfds)) != sizeof(readfds))
{
result = -1;
@@ -646,10 +646,10 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
}
}
- if (twritefdsp != NULL)
+ if (twritefdsp != 0)
{
translate_endian_h2t (&writefds, sizeof(writefds));
- if ((s.write_mem) (cb, &s, (unsigned long) twritefdsp,
+ if ((s.write_mem) (cb, &s, twritefdsp,
(char *) &writefds, sizeof(writefds)) != sizeof(writefds))
{
result = -1;
@@ -657,10 +657,10 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
}
}
- if (texceptfdsp != NULL)
+ if (texceptfdsp != 0)
{
translate_endian_h2t (&exceptfds, sizeof(exceptfds));
- if ((s.write_mem) (cb, &s, (unsigned long) texceptfdsp,
+ if ((s.write_mem) (cb, &s, texceptfdsp,
(char *) &exceptfds, sizeof(exceptfds)) != sizeof(exceptfds))
{
result = -1;
@@ -669,7 +669,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
}
translate_endian_h2t (&timeout, sizeof(timeout));
- if ((s.write_mem) (cb, &s, (unsigned long) ttimeoutp,
+ if ((s.write_mem) (cb, &s, ttimeoutp,
(char *) &timeout, sizeof(timeout)) != sizeof(timeout))
{
result = -1;
@@ -692,8 +692,13 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_readdir:
+#if SIZEOF_VOID_P == 4
result = (int) readdir ((DIR *) t2h_addr (cb, &s, arg1));
errcode = errno;
+#else
+ result = 0;
+ errcode = ENOSYS;
+#endif
break;
#if 0
@@ -714,6 +719,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
#endif
case TARGET_LINUX_SYS_mmap2:
{
+#if SIZEOF_VOID_P == 4 /* Code assumes m32r pointer size matches host. */
void *addr;
size_t len;
int prot, flags, fildes;
@@ -736,11 +742,16 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
0, access_read_write_exec, 0,
result, len, 0, NULL, NULL);
}
+#else
+ result = 0;
+ errcode = ENOSYS;
+#endif
}
break;
case TARGET_LINUX_SYS_mmap:
{
+#if SIZEOF_VOID_P == 4 /* Code assumes m32r pointer size matches host. */
void *addr;
size_t len;
int prot, flags, fildes;
@@ -773,11 +784,15 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
0, access_read_write_exec, 0,
result, len, 0, NULL, NULL);
}
+#else
+ result = 0;
+ errcode = ENOSYS;
+#endif
}
break;
case TARGET_LINUX_SYS_munmap:
- result = munmap ((void *)arg1, arg2);
+ result = munmap ((void *) (uintptr_t) arg1, arg2);
errcode = errno;
if (result != -1)
sim_core_detach (sd, NULL, 0, arg2, result);
@@ -1078,7 +1093,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_mprotect:
- result = mprotect ((void *) arg1, arg2, arg3);
+ result = mprotect ((void *) (uintptr_t) arg1, arg2, arg3);
errcode = errno;
break;
@@ -1149,7 +1164,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_msync:
- result = msync ((void *) arg1, arg2, arg3);
+ result = msync ((void *) (uintptr_t) arg1, arg2, arg3);
errcode = errno;
break;
@@ -1216,8 +1231,13 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_mremap: /* FIXME */
+#if SIZEOF_VOID_P == 4 /* Code assumes m32r pointer size matches host. */
result = (int) mremap ((void *) t2h_addr (cb, &s, arg1), arg2, arg3, arg4);
errcode = errno;
+#else
+ result = -1;
+ errcode = ENOSYS;
+#endif
break;
case TARGET_LINUX_SYS_getresuid32:
@@ -1285,8 +1305,13 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num)
break;
case TARGET_LINUX_SYS_getcwd:
- result = (int) getcwd ((char *) t2h_addr (cb, &s, arg1), arg2);
- errcode = errno;
+ {
+ void *ret;
+
+ ret = getcwd ((char *) t2h_addr (cb, &s, arg1), arg2);
+ result = ret == NULL ? 0 : arg1;
+ errcode = errno;
+ }
break;
case TARGET_LINUX_SYS_sendfile:
diff --git a/sim/m4/sim_ac_platform.m4 b/sim/m4/sim_ac_platform.m4
index fd6daeefbd1c..fa099f23e211 100644
--- a/sim/m4/sim_ac_platform.m4
+++ b/sim/m4/sim_ac_platform.m4
@@ -133,6 +133,8 @@ AC_CHECK_TYPES(socklen_t, [], [],
#include <sys/socket.h>
])
+AC_CHECK_SIZEOF([void *])
+
dnl Check for struct statfs.
AC_CACHE_CHECK([for struct statfs],
[sim_cv_struct_statfs],
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH/committed 5/5] sim: m32r: enable warnings in traps.c
2024-01-11 3:37 [PATCH/committed 1/5] sim: m32r: cleanup unused variables Mike Frysinger
` (2 preceding siblings ...)
2024-01-11 3:37 ` [PATCH/committed 4/5] sim: m32r: fixup some of the int<->pointer casts Mike Frysinger
@ 2024-01-11 3:37 ` Mike Frysinger
3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2024-01-11 3:37 UTC (permalink / raw)
To: gdb-patches
File should be clean now!
---
sim/Makefile.in | 1 -
sim/m32r/local.mk | 3 ---
2 files changed, 4 deletions(-)
diff --git a/sim/m32r/local.mk b/sim/m32r/local.mk
index bb9c84b2bb84..2b5d67ff9eb3 100644
--- a/sim/m32r/local.mk
+++ b/sim/m32r/local.mk
@@ -16,9 +16,6 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-## Some modules don't build cleanly yet.
-AM_CFLAGS_%C%_traps.o = -Wno-error
-
nodist_%C%_libsim_a_SOURCES = \
%D%/modules.c
%C%_libsim_a_SOURCES = \
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-01-11 3:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-11 3:37 [PATCH/committed 1/5] sim: m32r: cleanup unused variables Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 2/5] sim: m32r: migrate ftime() to clock_gettime() Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 3/5] sim: m32r: fix missing break statement Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 4/5] sim: m32r: fixup some of the int<->pointer casts Mike Frysinger
2024-01-11 3:37 ` [PATCH/committed 5/5] sim: m32r: enable warnings in traps.c Mike Frysinger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).