From 8c838da707d897e698d740eedb76ecee762eb21a Mon Sep 17 00:00:00 2001 From: Charlie Jenkins Date: Fri, 4 Apr 2025 15:35:08 -0700 Subject: [PATCH 1/7] Add signum param to signal handlers A signal handler is required to have a signum parameter that is an integer. This patch is used by buildroot for GCC 15.x compatibility: https://gitlab.com/buildroot.org/buildroot/-/commit/6fd3e498af1bf837f3318eb0d47f27ac6901e7dc Signed-off-by: Charlie Jenkins Signed-off-by: Bernd Kuhls --- src/lat_udp.c | 4 ++-- src/lmdd.c | 14 +++++++------- src/lmhttp.c | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lat_udp.c b/src/lat_udp.c index cd4be23..2c4e85a 100644 --- a/src/lat_udp.c +++ b/src/lat_udp.c @@ -19,7 +19,7 @@ char *id = "$Id$\n"; void client_main(int ac, char **av); void server_main(); -void timeout(); +void timeout(int signum); void init(iter_t iterations, void* cookie); void cleanup(iter_t iterations, void* cookie); void doit(iter_t iterations, void* cookie); @@ -164,7 +164,7 @@ cleanup(iter_t iterations, void* cookie) } void -timeout() +timeout(int signum) { fprintf(stderr, "Recv timed out\n"); exit(1); diff --git a/src/lmdd.c b/src/lmdd.c index 419f03f..d28edc6 100644 --- a/src/lmdd.c +++ b/src/lmdd.c @@ -156,7 +156,7 @@ char *cmds[] = { void error(char *); -void done(); +void done(int signum); #ifdef DBG extern int dbg; #endif @@ -340,7 +340,7 @@ main(int ac, char **av) register int moved; if (gotcnt && count-- <= 0) { - done(); + done(0); } /* @@ -453,7 +453,7 @@ main(int ac, char **av) perror("read"); } if (moved <= 0) { - done(); + done(0); } if (inpat != -1) { register int foo, cnt; @@ -466,7 +466,7 @@ main(int ac, char **av) (uint)(off + foo*sizeof(int)), buf[foo]); if (mismatch != -1 && --misses == 0) { - done(); + done(0); } } } @@ -531,7 +531,7 @@ main(int ac, char **av) if (moved2 != moved) { fprintf(stderr, "write: wanted=%d got=%d\n", moved, moved2); - done(); + done(0); } if ((Wtmax != -1) || (Wtmin != -1)) { int mics = stop(&start_tv, &stop_tv); @@ -568,7 +568,7 @@ main(int ac, char **av) perror("write"); } if (moved2 != moved) { - done(); + done(0); } if (touch) { @@ -634,7 +634,7 @@ chkarg(char *arg) } void -done(void) +done(int signum) { int i; int step; diff --git a/src/lmhttp.c b/src/lmhttp.c index 00bd4b0..ba741a7 100644 --- a/src/lmhttp.c +++ b/src/lmhttp.c @@ -26,7 +26,7 @@ char *buf; char *bufs[3]; int Dflg, dflg, nflg, lflg, fflg, zflg; int data, logfile; -void die(); +void die(int signum); void worker(); char *http_time(void); char *date(time_t *tt); @@ -387,7 +387,7 @@ logit(int sock, char *name, int size) nbytes += len; } -void die() +void die(int signum) { if (nbytes) { write(logfile, logbuf, nbytes); From d06b06e4efb41554ec6595665d74f32c056e2030 Mon Sep 17 00:00:00 2001 From: Charlie Jenkins Date: Thu, 10 Apr 2025 13:25:07 -0700 Subject: [PATCH 2/7] scripts/build: int return type main() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some compilers (such as the bootlin riscv64-lp64d glibc bleeding-edge 2024.05-1 toolchain) fail to run the dependency checking scripts and error at "return type defaults to ‘int’ [-Wimplicit-int]". Add types to these main() functions to allow this dependency tracking to work. This patch is used by buildroot for GCC 15.x compatibility: https://gitlab.com/buildroot.org/buildroot/-/commit/6fd3e498af1bf837f3318eb0d47f27ac6901e7dc Signed-off-by: Charlie Jenkins Signed-off-by: Bernd Kuhls --- scripts/build | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/build b/scripts/build index 0f85562..67ac4df 100755 --- a/scripts/build +++ b/scripts/build @@ -51,14 +51,14 @@ fi # check for bcopy (optionally set the SYS5 flag) echo "#include " > ${BASE}$$.c -echo "main() { char a[256], b[256]; bcopy(a, b, 256); }" >> ${BASE}$$.c +echo "int main() { char a[256], b[256]; bcopy(a, b, 256); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ || CFLAGS="${CFLAGS} -DSYS5" rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c # check for valloc echo "#include " > ${BASE}$$.c -echo "main() { char* buf = valloc(123); }" >> ${BASE}$$.c +echo "int main() { char* buf = valloc(123); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ || CFLAGS="${CFLAGS} -Dvalloc=malloc" rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -70,7 +70,7 @@ echo "#include " >> ${BASE}$$.c echo "#ifndef RUSAGE_SELF" >> ${BASE}$$.c echo "#define RUSAGE_SELF 0" >> ${BASE}$$.c echo "#endif /* RUSAGE_SELF */" >> ${BASE}$$.c -echo "main() { struct rusage ru; getrusage(RUSAGE_SELF, &ru); }" >> ${BASE}$$.c +echo "int main() { struct rusage ru; getrusage(RUSAGE_SELF, &ru); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DRUSAGE" rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -118,13 +118,13 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c # check for OSs that have S_IFFIFO instead of S_IFIFO echo "#include " > ${BASE}$$.c -echo "main() { return (S_IFIFO); }" >> ${BASE}$$.c +echo "int main() { return (S_IFIFO); }" >> ${BASE}$$.c if ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL}; then true; else rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c echo "#include " > ${BASE}$$.c - echo "main() { return (S_IFFIFO); }" >> ${BASE}$$.c + echo "int main() { return (S_IFFIFO); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ || CFLAGS="${CFLAGS} -DS_IFIFO=S_IFFIFO" fi @@ -133,7 +133,7 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c # check that we have uint echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { uint i = 0; return (i); }" >> ${BASE}$$.c +echo "int main() { uint i = 0; return (i); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_uint=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -143,7 +143,7 @@ HAVE_uint64=0 echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { uint64 i = 0; return (int)(i); }" >> ${BASE}$$.c +echo "int main() { uint64 i = 0; return (int)(i); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_uint64=1" && HAVE_uint64=1; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -152,7 +152,7 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c if [ ${HAVE_uint64} = 0 ]; then echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c - echo "main() { uint64_t i = 0; return (int)(i); }" >> ${BASE}$$.c + echo "int main() { uint64_t i = 0; return (int)(i); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_uint64_t=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -163,7 +163,7 @@ HAVE_int64=0 echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { int64 i = 0; return (int)(i); }" >> ${BASE}$$.c +echo "int main() { int64 i = 0; return (int)(i); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_int64=1" && HAVE_int64=1; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -172,7 +172,7 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c if [ ${HAVE_int64} = 0 ]; then echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c - echo "main() { int64_t i = 0; return (int)(i); }" >> ${BASE}$$.c + echo "int main() { int64_t i = 0; return (int)(i); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_int64_t=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -181,7 +181,7 @@ fi # check that we have drand48 and srand48 HAVE_RANDOM=0 echo "#include " > ${BASE}$$.c -echo "main() { srand48(973); return (int)(1.0E9 * drand48()); }" >> ${BASE}$$.c +echo "int main() { srand48(973); return (int)(1.0E9 * drand48()); }" >> ${BASE}$$.c if ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL}; then CFLAGS="${CFLAGS} -DHAVE_DRAND48" HAVE_RANDOM=1 @@ -190,7 +190,7 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c if [ ${HAVE_RANDOM} -eq 0 ]; then echo "#include " > ${BASE}$$.c - echo "main() { srand(973); return (10 * rand()) / RAND_MAX; }" >> ${BASE}$$.c + echo "int main() { srand(973); return (10 * rand()) / RAND_MAX; }" >> ${BASE}$$.c if ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL}; then CFLAGS="${CFLAGS} -DHAVE_RAND" HAVE_RANDOM=1 @@ -200,7 +200,7 @@ fi if [ ${HAVE_RANDOM} -eq 0 ]; then echo "#include " > ${BASE}$$.c - echo "main() { srandom(973); return (10 * random()) / RAND_MAX; }" >> ${BASE}$$.c + echo "int main() { srandom(973); return (10 * random()) / RAND_MAX; }" >> ${BASE}$$.c if ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL}; then CFLAGS="${CFLAGS} -DHAVE_RANDOM" HAVE_RANDOM=1 @@ -211,7 +211,7 @@ fi # check that we have sysmp echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { return (int)sysmp(MP_NPROCS); }" >> ${BASE}$$.c +echo "int main() { return (int)sysmp(MP_NPROCS); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_SYSMP=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -221,7 +221,7 @@ echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { return bindprocessor(BINDPROCESS, getpid(), 0); }" >> ${BASE}$$.c +echo "int main() { return bindprocessor(BINDPROCESS, getpid(), 0); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_BINDPROCESSOR=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -231,7 +231,7 @@ echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { return processor(P_PID, P_MYPID, 0, NULL); }" >> ${BASE}$$.c +echo "int main() { return processor(P_PID, P_MYPID, 0, NULL); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_BINDPROCESSOR=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c @@ -240,7 +240,7 @@ rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c echo "#include " > ${BASE}$$.c echo "#include " >> ${BASE}$$.c echo "#include " >> ${BASE}$$.c -echo "main() { unsigned long mask = 1; return sched_setaffinity(0, sizeof(unsigned long), &mask); }" >> ${BASE}$$.c +echo "int main() { unsigned long mask = 1; return sched_setaffinity(0, sizeof(unsigned long), &mask); }" >> ${BASE}$$.c ${CC} ${CFLAGS} -o ${BASE}$$ ${BASE}$$.c 1>${NULL} 2>${NULL} \ && CFLAGS="${CFLAGS} -DHAVE_SCHED_SETAFFINITY=1"; rm -f ${BASE}$$ ${BASE}$$.o ${BASE}$$.c From 3ed3840ea4c65d28ac5082b88b359ed8d6916841 Mon Sep 17 00:00:00 2001 From: Charlie Jenkins Date: Fri, 4 Apr 2025 15:48:07 -0700 Subject: [PATCH 3/7] Fixup function declarations GCC-15 requires function declarations to be properly typed. This patch is used by buildroot for GCC 15.x compatibility: https://gitlab.com/buildroot.org/buildroot/-/commit/6fd3e498af1bf837f3318eb0d47f27ac6901e7dc Signed-off-by: Charlie Jenkins Signed-off-by: Bernd Kuhls --- src/bench.h | 4 ++-- src/lat_rpc.c | 18 +++++++----------- src/lmdd.c | 4 ++-- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/bench.h b/src/bench.h index f0fd6b7..78239d6 100644 --- a/src/bench.h +++ b/src/bench.h @@ -326,8 +326,8 @@ extern int handle_scheduler(int childno, int benchproc, int nbenchprocs); #define XACT_VERS ((u_long)1) #define RPC_XACT ((u_long)1) #define RPC_EXIT ((u_long)2) -extern char *rpc_xact_1(); -extern char *client_rpc_xact_1(); +extern char *rpc_xact_1(char *msg, register SVCXPRT *transp); +extern char *client_rpc_xact_1(char *argp, CLIENT *clnt); void lmbench_usage(int argc, char *argv[], char* usage); diff --git a/src/lat_rpc.c b/src/lat_rpc.c index 3ebfb16..7c881b0 100644 --- a/src/lat_rpc.c +++ b/src/lat_rpc.c @@ -190,16 +190,14 @@ client_rpc_xact_1(char *argp, CLIENT *clnt) */ /* ARGSUSED */ char * -rpc_xact_1(msg, transp) - char *msg; - register SVCXPRT *transp; +rpc_xact_1(char *msg, register SVCXPRT *transp) { static char r = 123; return &r; } -static void xact_prog_1(); +static void xact_prog_1(struct svc_req *rqstp, register SVCXPRT *transp); void server_main() @@ -237,16 +235,14 @@ server_main() } static void -xact_prog_1(rqstp, transp) - struct svc_req *rqstp; - register SVCXPRT *transp; +xact_prog_1(struct svc_req *rqstp, register SVCXPRT *transp) { union { char rpc_xact_1_arg; } argument; char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); + bool_t (*xdr_argument)(XDR *, char *), (*xdr_result)(XDR *, char *); + char *(*local)(char *, struct svc_req *); switch (rqstp->rq_proc) { case NULLPROC: @@ -256,7 +252,7 @@ xact_prog_1(rqstp, transp) case RPC_XACT: xdr_argument = xdr_char; xdr_result = xdr_char; - local = (char *(*)()) rpc_xact_1; + local = (char *(*)(char *, struct svc_req *)) rpc_xact_1; break; case RPC_EXIT: @@ -273,7 +269,7 @@ xact_prog_1(rqstp, transp) svcerr_decode(transp); return; } - result = (*local)(&argument, rqstp); + result = (*local)((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t)xdr_result, result)) { svcerr_systemerr(transp); } diff --git a/src/lmdd.c b/src/lmdd.c index d28edc6..da33f54 100644 --- a/src/lmdd.c +++ b/src/lmdd.c @@ -84,7 +84,7 @@ int norepeats = -1; bds_msg *m1, *m2; #endif -uint64 getarg(); +uint64 getarg(char *s, int ac, char **av); int been_there(uint64 off); int getfile(char *s, int ac, char **av); @@ -170,7 +170,7 @@ main(int ac, char **av) int Fork, misses, mismatch, outpat, inpat, in, timeopen, gotcnt; int slp; uint64 skip, size, count; - void chkarg(); + void chkarg(char *arg); int i; uint64 off = 0; int touch; From 326c16a724ea940413bfec6e1cb1684ee725d0f4 Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Fri, 5 Dec 2025 17:59:00 +0100 Subject: [PATCH 4/7] src/lat_sig.c: fix build lat_sig.c:42:31: error: assignment to '__sighandler_t' {aka 'void (*)(int)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types] 42 | sa.sa_handler = handler; | ^ lat_sig.c:23:9: note: 'handler' declared here 23 | void handler() { } lat_sig.c:95:23: error: assignment to '__sighandler_t' {aka 'void (*)(int)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types] 95 | sa.sa_handler = prot; | ^ lat_sig.c:72:1: note: 'prot' declared here 72 | prot() { Signed-off-by: Bernd Kuhls --- src/lat_sig.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lat_sig.c b/src/lat_sig.c index 46aef0e..5913c48 100644 --- a/src/lat_sig.c +++ b/src/lat_sig.c @@ -20,7 +20,7 @@ char *id = "$Id$\n"; uint64 caught, n; double adj; -void handler() { } +void handler(int) { } jmp_buf prot_env; void @@ -69,7 +69,7 @@ struct _state { }; void -prot() { +prot(int) { if (++caught == n) { caught = 0; n = benchmp_interval(benchmp_getstate()); From 552039fc856c0b958c61a4f2324929879005128c Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Fri, 5 Dec 2025 18:01:15 +0100 Subject: [PATCH 5/7] src/memsize.c: fix build memsize.c:167:23: error: assignment to '__sighandler_t' {aka 'void (*)(int)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types] 167 | sa.sa_handler = gotalarm; | ^ memsize.c:154:1: note: 'gotalarm' declared here 154 | gotalarm() Signed-off-by: Bernd Kuhls --- src/memsize.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/memsize.c b/src/memsize.c index e1d05be..902132a 100644 --- a/src/memsize.c +++ b/src/memsize.c @@ -151,7 +151,7 @@ test_malloc(size_t size) } void -gotalarm() +gotalarm(int) { alarm_triggered = 1; } From f5cd000523e07c5bbf94820ec5dd00d5f3785c50 Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Fri, 5 Dec 2025 18:02:10 +0100 Subject: [PATCH 6/7] src/lat_unix.c: fix build lat_unix.c:85:17: error: too many arguments to function 'exit'; expected 0, have 1 85 | exit(1); | ^~~~ ~ lat_unix.c:74:17: note: declared here 74 | void exit(); Signed-off-by: Bernd Kuhls --- src/lat_unix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lat_unix.c b/src/lat_unix.c index 1e321f8..9a062c1 100644 --- a/src/lat_unix.c +++ b/src/lat_unix.c @@ -71,7 +71,7 @@ void initialize(iter_t iterations, void* cookie) { struct _state* pState = (struct _state*)cookie; - void exit(); + void exit(int); if (iterations) return; From 995f4928d02e32452cf00672af2cd18ac062cf4a Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Fri, 5 Dec 2025 18:04:07 +0100 Subject: [PATCH 7/7] src/lat_usleep.c: fix build lat_usleep.c:125:19: error: assignment to '__sighandler_t' {aka 'void (*)(int)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types] 125 | sa.sa_handler = interval; | ^ lat_usleep.c:102:1: note: 'interval' declared here 102 | interval() Signed-off-by: Bernd Kuhls --- src/lat_usleep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lat_usleep.c b/src/lat_usleep.c index d18d0c8..842ad06 100755 --- a/src/lat_usleep.c +++ b/src/lat_usleep.c @@ -99,7 +99,7 @@ bench_pselect(iter_t iterations, void *cookie) #endif /* _POSIX_SELECT */ void -interval() +interval(int) { if (++caught == n) { caught = 0;