On Windows, a recent gnulib update imported the lstat module, and
this caused a remote-sim.c build failure in struct host_callback_struct:
In file included from /[...]/gdb/remote-sim.c:34:0:
/[...]/gdb/../include/gdb/callback.h:93:9: error: duplicate member '_stati64'
int (*lstat) (host_callback *, const char *, struct stat *);
^
What happens it that gnulib's stat.h makes the following defines:
/* Large File Support on native Windows. */
#if 1
# define stat _stati64
#endif
and then:
#if 1
# if ! 0
/* mingw does not support symlinks, therefore it does not have lstat. But
without links, stat does just fine. */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define lstat stat
# endif
So, the following fields in struct host_callback_struct...
int (*stat) (host_callback *, const char *, struct stat *);
int (*fstat) (host_callback *, int, struct stat *);
int (*lstat) (host_callback *, const char *, struct stat *);
... get translated to...
int (*_stati64) (host_callback *, const char *, struct _stati64 *);
int (*_fstati64) (host_callback *, int, struct _stati64 *);
int (*_stati64) (host_callback *, const char *, struct _stati64 *);
... which causes two fields to have the same name.
This patch fixes the issue by renaming the stat-related fields
by adding a "to_" prefix, similar to what is done in GDB's
target_ops vector.
include/gdb/ChangeLog:
* callback.h (struct host_callback_struct) <to_stat>: Renamed
from "stat".
<to_fstat>: Renamed from "fstat".
<to_lstat>: Renamed from "lstat".
sim/common/ChangeLog:
* sim-io.c (sim_io_stat, sim_io_fstat): Adjust calls to "stat"
and "fstat" callbacks by calls to "to_stat" and "to_fstat" (resp)
callbacks following renaming in callback.h.
* syscall.c (cb_syscall): Likewise. Adjust calls to "lstat"
callback by call to "to_lstat" callback
sim/cris/ChangeLog:
* traps.c (cris_break_13_handler): Adjust call to "fstat" callback
by call to "to_fstat" following renaming in callback.h.
sim/h8300/ChangeLog:
* compile.c (sim_resume): Adjust calls to "stat" and "fstat"
callbacks by calls to "to_stat" and "to_fstat" (resp) callbacks
following renaming in callback.h.
Tested by rebuilding each and every simulator on x86_64-linux.
Since the builds are currently broken on Windows, I decided to go
ahead and push, but it is of course extra easy to revert the patch,
now that we're using git, so that would be no problem if people
wanted to implement another solution. Just let me know.
Thank you,
@@ -1,3 +1,10 @@
+2014-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * callback.h (struct host_callback_struct) <to_stat>: Renamed
+ from "stat".
+ <to_fstat>: Renamed from "fstat".
+ <to_lstat>: Renamed from "lstat".
+
2014-03-10 Mike Frysinger <vapier@gentoo.org>
* remote-sim.h (sim_do_command): Add const to cmd.
@@ -88,9 +88,9 @@ struct host_callback_struct
void (*flush_stdout) (host_callback *);
int (*write_stderr) (host_callback *, const char *, int);
void (*flush_stderr) (host_callback *);
- int (*stat) (host_callback *, const char *, struct stat *);
- int (*fstat) (host_callback *, int, struct stat *);
- int (*lstat) (host_callback *, const char *, struct stat *);
+ int (*to_stat) (host_callback *, const char *, struct stat *);
+ int (*to_fstat) (host_callback *, int, struct stat *);
+ int (*to_lstat) (host_callback *, const char *, struct stat *);
int (*ftruncate) (host_callback *, int, long);
int (*truncate) (host_callback *, const char *, long);
int (*pipe) (host_callback *, int *);
@@ -1,3 +1,11 @@
+2014-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * sim-io.c (sim_io_stat, sim_io_fstat): Adjust calls to "stat"
+ and "fstat" callbacks by calls to "to_stat" and "to_fstat" (resp)
+ callbacks following renaming in callback.h.
+ * syscall.c (cb_syscall): Likewise. Adjust calls to "lstat"
+ callback by call to "to_lstat" callback
+
2014-08-28 Gary Benson <gbenson@redhat.com>
* sim-trace.h (debug_printf): New define.
@@ -391,11 +391,11 @@ sim_io_poll_read (SIM_DESC sd,
int
sim_io_stat (SIM_DESC sd, const char *path, struct stat *buf)
{
- return STATE_CALLBACK (sd)->stat (STATE_CALLBACK (sd), path, buf);
+ return STATE_CALLBACK (sd)->to_stat (STATE_CALLBACK (sd), path, buf);
}
int
sim_io_fstat (SIM_DESC sd, int fd, struct stat *buf)
{
- return STATE_CALLBACK (sd)->fstat (STATE_CALLBACK (sd), fd, buf);
+ return STATE_CALLBACK (sd)->to_fstat (STATE_CALLBACK (sd), fd, buf);
}
@@ -455,7 +455,7 @@ cb_syscall (host_callback *cb, CB_SYSCALL *sc)
result = -1;
goto FinishSyscall;
}
- result = (*cb->stat) (cb, path, &statbuf);
+ result = (*cb->to_stat) (cb, path, &statbuf);
free (path);
if (result < 0)
goto ErrorFinish;
@@ -488,7 +488,7 @@ cb_syscall (host_callback *cb, CB_SYSCALL *sc)
struct stat statbuf;
TADDR addr = sc->arg2;
- result = (*cb->fstat) (cb, sc->arg1, &statbuf);
+ result = (*cb->to_fstat) (cb, sc->arg1, &statbuf);
if (result < 0)
goto ErrorFinish;
buflen = cb_host_to_target_stat (cb, NULL, NULL);
@@ -526,7 +526,7 @@ cb_syscall (host_callback *cb, CB_SYSCALL *sc)
result = -1;
goto FinishSyscall;
}
- result = (*cb->lstat) (cb, path, &statbuf);
+ result = (*cb->to_lstat) (cb, path, &statbuf);
free (path);
if (result < 0)
goto ErrorFinish;
@@ -1,3 +1,8 @@
+2014-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * traps.c (cris_break_13_handler): Adjust call to "fstat" callback
+ by call to "to_fstat" following renaming in callback.h.
+
2014-08-19 Alan Modra <amodra@gmail.com>
* configure: Regenerate.
@@ -2204,7 +2204,7 @@ cris_break_13_handler (SIM_CPU *current_cpu, USI callnum, USI arg1,
|| ((events = sim_core_read_unaligned_2 (current_cpu, pc,
0, ufds + 4))
!= TARGET_POLLIN)
- || ((cb->fstat) (cb, fd, &buf) != 0
+ || ((cb->to_fstat) (cb, fd, &buf) != 0
|| (buf.st_mode & S_IFIFO) == 0)
|| current_cpu->thread_data == NULL)
{
@@ -1,3 +1,9 @@
+2014-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * compile.c (sim_resume): Adjust calls to "stat" and "fstat"
+ callbacks by calls to "to_stat" and "to_fstat" (resp) callbacks
+ following renaming in callback.h.
+
2014-08-19 Alan Modra <amodra@gmail.com>
* configure: Regenerate.
@@ -3062,7 +3062,8 @@ sim_resume (SIM_DESC sd, int step, int siggnal)
stat_ptr = (h8300hmode && !h8300_normal_mode) ? GET_L_REG (1) : GET_W_REG (1);
/* Callback stat and return. */
- fstat_return = sim_callback->fstat (sim_callback, fd, &stat_rec);
+ fstat_return = sim_callback->to_fstat (sim_callback, fd,
+ &stat_rec);
/* Have stat_ptr point to starting of stat_rec. */
temp_stat_ptr = (char *) (&stat_rec);
@@ -3136,7 +3137,7 @@ sim_resume (SIM_DESC sd, int step, int siggnal)
/* Callback stat and return. */
stat_return =
- sim_callback->stat (sim_callback, filename, &stat_rec);
+ sim_callback->to_stat (sim_callback, filename, &stat_rec);
/* Have stat_ptr point to starting of stat_rec. */
temp_stat_ptr = (char *) (&stat_rec);