app-benchmarks/filebench: add 1.5.0_alpha3_p20200220

update HOMEPAGE and SRC_URI with github repo

add a snapshot after 1.5.0_alpha3
auto-completion/libtecla support removed in 1.5.0_alpha1
bug #729104 fixed in 1.5.0_alpha1
remove .la files

patches :
fix gcc-15
fix implicit function in configure
fix an issue with randomization

Closes: https://bugs.gentoo.org/729104
Closes: https://bugs.gentoo.org/906004
Closes: https://bugs.gentoo.org/943905
Signed-off-by: Nicolas PARLANT <nicolas.parlant@parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/43620
Closes: https://github.com/gentoo/gentoo/pull/43620
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Nicolas PARLANT
2025-08-31 04:27:17 +02:00
committed by Sam James
parent 34737ad1c2
commit ef484b6b19
6 changed files with 677 additions and 1 deletions

View File

@@ -1 +1,2 @@
DIST filebench-1.4.9.1.tar.gz 349535 BLAKE2B 774eab935fba422064c9c6a5c233b99545b639b4319cb9658b6555d087f1af0f59c29de57a5fef94c2256199f1c328d2309641785d8573832629fb4a28b2e716 SHA512 a6400aba4266fcf98e46c4824796a594adc5d5e7f9605f6e1ab01973ce448e27948991e453b186947a8d89f8603a69a3ba955edf2a1abccd2935196af7b6f0d1
DIST filebench-1.5.0_alpha3_p20200220.tar.gz 255950 BLAKE2B 77df6388a982d045c27e4b14bd87371dd559c1b3e428e8a6934b3b6d4632831887440ae82c0e44c993b4870c9e198ead233779f8a7df5f02c2c2130eaa0f0e3f SHA512 96878a3c665b9e31d08806f49bf2a513f00751b833088d9470a94cfbac013d8d3d8fc68574e58531c6ab4bffa7fde88f6ccf6009667d70a1d8d586eb884d1dd8

View File

@@ -0,0 +1,40 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit autotools
COMMIT_HASH="22620e602cbbebad90c0bd041896ebccf70dbf5f"
DESCRIPTION="Filebench - A Model Based File System Workload Generator"
HOMEPAGE="https://github.com/filebench/filebench"
SRC_URI="https://github.com/${PN}/${PN}/archive/${COMMIT_HASH}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/${PN}-${COMMIT_HASH}"
LICENSE="CDDL"
SLOT="0"
KEYWORDS="~amd64 ~riscv ~x86"
DEPEND="
app-alternatives/lex
app-alternatives/yacc
"
PATCHES=(
# https://github.com/filebench/filebench/pull/143
"${FILESDIR}"/${PN}-1.5.0_alpha3_add_suppress_asr.patch
# https://github.com/filebench/filebench/pull/160 #906004
"${FILESDIR}"/${PN}-1.5.0_alpha3_fix_implicit_syscall.patch
# selected commits from https://github.com/filebench/filebench/pull/116 #943905
"${FILESDIR}"/${PN}-1.5.0_alpha3_fix_gcc15.patch
)
src_prepare() {
default
eautoreconf
}
src_install() {
default
find "${ED}" -name '*.la' -delete || die
}

View File

@@ -0,0 +1,116 @@
PR pending to fix an issue with randomization, see upstream #110
https://github.com/filebench/filebench/pull/143.patch
From 18c708a9771d9414fb3fa44bd916c05cdd43868c Mon Sep 17 00:00:00 2001
From: Tony Mason <fsgeek@cs.ubc.ca>
Date: Sat, 20 Jun 2020 20:39:23 +0000
Subject: [PATCH] Add ASR suppression logic
--- a/parser_gram.y
+++ b/parser_gram.y
@@ -45,6 +45,7 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/wait.h>
+#include <syscall.h>
#include "parsertypes.h"
#include "filebench.h"
#include "utils.h"
@@ -1569,7 +1570,6 @@ parser_abort(int arg)
static void
master_mode(struct fbparams *fbparams) {
int ret;
-
printf("Filebench Version %s\n", FILEBENCH_VERSION);
yyin = fopen(fbparams->fscriptname, "r");
@@ -1620,6 +1620,66 @@ init_common()
fb_set_rlimit();
}
+static void suppress_asr(char *const argv[], char * const envp[])
+{
+#if defined(SYS_personality)
+ unsigned index = 0;
+ size_t space = 0;
+ char **newenvp = (char **)malloc(space);
+ char *detect_string = "FILEBENCH_ASR_REINVOKED";
+ int current;
+ unsigned long persona = (unsigned long)~0;
+ const unsigned long asr_disabled = 0x0040000;
+
+ // Is this a reinvocation?
+ for (index = 0; envp[index]; index++) {
+ if (0 == strcmp(envp[index], detect_string)) {
+ // Yes - no further checking.
+ return;
+ }
+ }
+
+ // check if ASR is already disabled
+ current = (long) syscall(SYS_personality, persona);
+ if (-1 != current) {
+ persona = (unsigned long) current;
+
+ if (asr_disabled == (persona & asr_disabled)) { // ASR disabled
+ return;
+ }
+
+ persona |= 0x0040000;
+ errno = 0;
+ current = (long) syscall(SYS_personality, persona);
+
+ if (-1 == current) {
+ // failed - give up
+ fprintf(stderr, "ASR disable failed - good luck\n");
+ return;
+ }
+
+ space = (index + 2) * sizeof(char *); // + 1 null entry + 1 new entry
+ if (NULL == newenvp) {
+ fprintf(stderr, "Reinvocation after disable ASR malloc failed\n");
+ return;
+ }
+
+ for (unsigned i = 0; i < index; i++) {
+ newenvp[i] = envp[i];
+ }
+ newenvp[index] = detect_string;
+ newenvp[index+1] = NULL;
+
+ if (-1 != current) {
+ if (0 > execvpe(argv[0], argv, newenvp)) {
+ fprintf(stderr, "execvpe failed (errno %d - %s)\n", errno, strerror(errno));
+ }
+ }
+ }
+#endif // SYS_personality
+
+}
+
/*
* Entry point for Filebench. Processes command line arguments. The -f option
* will read in a workload file (the full name and extension must must be
@@ -1635,11 +1695,13 @@ init_common()
* supplied workload file, or enters interactive mode.
*/
int
-main(int argc, char *argv[])
+main(int argc, char *argv[], char *envp[])
{
struct fbparams fbparams;
int mode;
+ suppress_asr(argv, envp);
+
/* parse_options() exits if detects wrong usage */
mode = parse_options(argc, argv, &fbparams);
@@ -1651,7 +1713,7 @@ main(int argc, char *argv[])
init_common();
- if (mode == FB_MODE_MASTER)
+ if (mode == FB_MODE_MASTER)
master_mode(&fbparams);
if (mode == FB_MODE_WORKER)

View File

@@ -0,0 +1,496 @@
PR pending, selected commits to fix compilation with gcc15
fix unprototyped functions :
https://github.com/filebench/filebench/pull/116/commits/07194b64f7a9c7c473896934339775ab54f1da78.patch
remove bool occurences / bug #943905 :
https://github.com/filebench/filebench/pull/116/commits/64a08cf7caa1beb1de078ab1099de0f7a1fed8ec.patch
https://github.com/filebench/filebench/pull/116/commits/fd3565c371d87a5d6cdebcedac557a231aa4a85e.patch
From 07194b64f7a9c7c473896934339775ab54f1da78 Mon Sep 17 00:00:00 2001
From: Nathaniel Wesley Filardo <nwf@auristor.com>
Date: Wed, 1 Nov 2017 17:50:59 -0400
Subject: [PATCH] Make real prototypes in some places
--- a/aslr.c
+++ b/aslr.c
@@ -23,7 +23,7 @@
#if defined(HAVE_SYS_PERSONALITY_H) && defined(HAVE_ADDR_NO_RANDOMIZE)
void
-linux_disable_aslr()
+linux_disable_aslr(void)
{
int r;
@@ -34,7 +34,7 @@ linux_disable_aslr()
}
#else /* HAVE_SYS_PERSONALITY_H && HAVE_ADDR_NO_RANDOMIZE */
void
-other_disable_aslr()
+other_disable_aslr(void)
{
filebench_log(LOG_INFO, "Per-process disabling of ASLR is not "
"supported on this system. "
--- a/aslr.h
+++ b/aslr.h
@@ -5,19 +5,19 @@
#if defined(HAVE_SYS_PERSONALITY_H) && defined(HAVE_ADDR_NO_RANDOMIZE)
extern void
-linux_disable_aslr();
+linux_disable_aslr(void);
static inline void
-disable_aslr()
+disable_aslr(void)
{
return linux_disable_aslr();
}
#else /* HAVE_SYS_PERSONALITY_H && HAVE_ADDR_NO_RANDOMIZE */
extern void
-other_disable_aslr();
+other_disable_aslr(void);
static inline void
-disable_aslr() {
+disable_aslr(void) {
return other_disable_aslr();
}
#endif /* HAVE_SYS_PERSONALITY_H && HAVE_ADDR_NO_RANDOMIZE */
--- a/cvars/cvar-erlang.c
+++ b/cvars/cvar-erlang.c
@@ -122,7 +122,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -155,7 +155,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-exponential.c
+++ b/cvars/cvar-exponential.c
@@ -108,7 +108,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -135,7 +135,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-gamma.c
+++ b/cvars/cvar-gamma.c
@@ -242,7 +242,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -274,7 +274,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-lognormal.c
+++ b/cvars/cvar-lognormal.c
@@ -121,7 +121,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -154,7 +154,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-normal.c
+++ b/cvars/cvar-normal.c
@@ -109,7 +109,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -142,7 +142,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-triangular.c
+++ b/cvars/cvar-triangular.c
@@ -132,7 +132,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -169,7 +169,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-uniform.c
+++ b/cvars/cvar-uniform.c
@@ -115,7 +115,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -147,7 +147,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar-weibull.c
+++ b/cvars/cvar-weibull.c
@@ -122,7 +122,7 @@ void cvar_free_handle(void *handle, void (*cvar_free)(void *ptr))
cvar_free(handle);
}
-const char *cvar_usage()
+const char *cvar_usage(void)
{
int offset;
@@ -155,7 +155,7 @@ const char *cvar_usage()
return usage;
}
-const char *cvar_version()
+const char *cvar_version(void)
{
return VERSION;
}
--- a/cvars/cvar.h
+++ b/cvars/cvar.h
@@ -19,7 +19,7 @@
* Return 0 on success and a non-zero error code on failure.
*/
-int cvar_module_init();
+int cvar_module_init(void);
/*
* Allocate a new custom variable handle. A handle is subsequently used to
@@ -84,7 +84,7 @@ void cvar_free_handle(void *cvar_handle, void (*cvar_free)(void *ptr));
* to quit without invoking cvar_module_exit.
*/
-void cvar_module_exit();
+void cvar_module_exit(void);
/*
* Show usage, including information on the list of parameters supported and the
@@ -95,7 +95,7 @@ void cvar_module_exit();
* Return a non-null, formatted string to be displayed on screen.
*/
-const char *cvar_usage();
+const char *cvar_usage(void);
/*
* Show version.
@@ -105,6 +105,6 @@ const char *cvar_usage();
* Return a non-null version string.
*/
-const char *cvar_version();
+const char *cvar_version(void);
#endif /* _CVAR_H */
--- a/fb_cvar.c
+++ b/fb_cvar.c
@@ -204,7 +204,7 @@ static char
* Returns 0 on success and non-zero on error.
*/
int
-init_cvar_libraries()
+init_cvar_libraries(void)
{
int count;
int ret = -1;
@@ -425,7 +425,7 @@ get_cvar_value(cvar_t *cvar)
* Return 0 on success and a non-zero error code on failure.
*/
int
-revalidate_cvar_handles()
+revalidate_cvar_handles(void)
{
cvar_t *t;
cvar_library_t *cvar_lib;
--- a/fb_cvar.h
+++ b/fb_cvar.h
@@ -59,7 +59,7 @@ typedef struct cvar_operations {
int (*cvar_revalidate_handle)(void *cvar_handle);
int (*cvar_next_value)(void *cvar_handle, double *value);
void (*cvar_free_handle)(void *cvar_handle, void (*cvar_free)(void *ptr));
- void (*cvar_module_exit)();
+ void (*cvar_module_exit)(void);
const char *(*cvar_usage)(void);
const char *(*cvar_version)(void);
} cvar_operations_t;
@@ -78,9 +78,9 @@ extern cvar_library_t **cvar_libraries;
cvar_t * cvar_alloc(void);
int init_cvar_library_info(const char *dirpath);
-int init_cvar_libraries();
+int init_cvar_libraries(void);
int init_cvar_handle(cvar_t *cvar, const char *type, const char *parameters);
double get_cvar_value(cvar_t *cvar);
-int revalidate_cvar_handles();
+int revalidate_cvar_handles(void);
#endif /* _FB_CVAR_H */
--- a/fb_random.c
+++ b/fb_random.c
@@ -103,7 +103,7 @@ fb_random32(uint32_t *randp,
* Same as filebench_randomno64, but for probability [0-1].
*/
static double
-fb_random_probability()
+fb_random_probability(void)
{
uint64_t randnum;
--- a/fileset.c
+++ b/fileset.c
@@ -1749,7 +1749,7 @@ fileset_checkraw(fileset_t *fileset)
* fail.
*/
int
-fileset_createsets()
+fileset_createsets(void)
{
fileset_t *list;
int ret = 0;
--- a/fileset.h
+++ b/fileset.h
@@ -142,7 +142,7 @@ typedef struct fileset {
pthread_mutex_t fs_histo_lock; /* lock for incr of histo */
} fileset_t;
-int fileset_createsets();
+int fileset_createsets(void);
void fileset_delete_all_filesets(void);
int fileset_openfile(fb_fdesc_t *fd, fileset_t *fileset,
--- a/flowop.h
+++ b/flowop.h
@@ -37,9 +37,9 @@ typedef struct flowop {
struct flowop *fo_comp_fops; /* List of flowops in composite fo */
var_t *fo_lvar_list; /* List of composite local vars */
struct threadflow *fo_thread; /* Backpointer to thread */
- int (*fo_func)(); /* Method */
- int (*fo_init)(); /* Init Method */
- void (*fo_destruct)(); /* Destructor Method */
+ int (*fo_func)(threadflow_t *, struct flowop *); /* Method */
+ int (*fo_init)(struct flowop *); /* Init Method */
+ void (*fo_destruct)(struct flowop *); /* Destructor Method */
int fo_type; /* Type */
int fo_attrs; /* Flow op attribute */
avd_t fo_filename; /* file/fileset name */
@@ -118,9 +118,9 @@ typedef struct flowop_proto {
int fl_type;
int fl_attrs;
char *fl_name;
- int (*fl_init)();
- int (*fl_func)();
- void (*fl_destruct)();
+ int (*fl_init)(flowop_t *);
+ int (*fl_func)(threadflow_t *, flowop_t *);
+ void (*fl_destruct)(flowop_t *);
} flowop_proto_t;
extern struct flowstats controlstats;
@@ -148,7 +148,7 @@ void flowop_printall(void);
void flowop_init(int ismaster);
/* Local file system specific */
-void fb_lfs_funcvecinit();
-void fb_lfs_newflowops();
+void fb_lfs_funcvecinit(void);
+void fb_lfs_newflowops(void);
#endif /* _FB_FLOWOP_H */
--- a/parser_gram.y
+++ b/parser_gram.y
@@ -69,7 +69,7 @@ static attr_t *alloc_attr(void);
static attr_t *alloc_lvar_attr(var_t *var);
static attr_t *get_attr(cmd_t *cmd, int64_t name);
static void get_attr_lvars(cmd_t *cmd, flowop_t *flowop);
-static list_t *alloc_list();
+static list_t *alloc_list(void);
static probtabent_t *alloc_probtabent(void);
static void add_lvar_to_list(var_t *newlvar, var_t **lvar_list);
@@ -1619,7 +1619,7 @@ master_mode(struct fbparams *fbparams) {
}
static void
-init_common()
+init_common(void)
{
disable_aslr();
my_pid = getpid();
@@ -3117,7 +3117,7 @@ get_attr_lvars(cmd_t *cmd, flowop_t *flowop)
* returns a pointer to it. On failure, returns NULL.
*/
static list_t *
-alloc_list()
+alloc_list(void)
{
list_t *list;
--- a/procflow.c
+++ b/procflow.c
@@ -560,7 +560,7 @@ procflow_cleanup(procflow_t *procflow)
* in which case it returns -1.
*/
static int
-procflow_allstarted()
+procflow_allstarted(void)
{
procflow_t *procflow = filebench_shm->shm_procflowlist;
int running_procs = 0;
@@ -787,7 +787,7 @@ procflow_define(char *name, avd_t instances)
* system.
*/
void
-proc_create()
+proc_create(void)
{
filebench_shm->shm_1st_err = 0;
filebench_shm->shm_f_abort = FILEBENCH_OK;
@@ -828,7 +828,7 @@ proc_create()
* It does not exit the filebench program though.
*/
void
-proc_shutdown()
+proc_shutdown(void)
{
filebench_log(LOG_INFO, "Shutting down processes");
procflow_shutdown();
From 64a08cf7caa1beb1de078ab1099de0f7a1fed8ec Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.dionne@auristor.com>
Date: Mon, 13 Jan 2025 15:12:37 -0400
Subject: [PATCH] vars: Avoid using keyword "bool" as an argument name
With gcc 15, "bool" is a restricted keyword that can't be used as
an argument name.
Signed-off-by: Marc Dionne <marc.dionne@auristor.com>
--- a/vars.c
+++ b/vars.c
@@ -417,7 +417,7 @@ var_find_alloc(char *name)
}
int
-var_assign_boolean(char *name, boolean_t bool)
+var_assign_boolean(char *name, boolean_t val)
{
var_t *var;
@@ -427,7 +427,7 @@ var_assign_boolean(char *name, boolean_t bool)
return -1;
}
- VAR_SET_BOOL(var, bool);
+ VAR_SET_BOOL(var, val);
return 0;
}
@@ -786,7 +786,7 @@ var_lvar_assign_var(char *name, char *src_name)
}
var_t *
-var_lvar_assign_boolean(char *name, boolean_t bool)
+var_lvar_assign_boolean(char *name, boolean_t val)
{
var_t *var;
@@ -797,7 +797,7 @@ var_lvar_assign_boolean(char *name, boolean_t bool)
return NULL;
}
- VAR_SET_BOOL(var, bool);
+ VAR_SET_BOOL(var, val);
return var;
}
From fd3565c371d87a5d6cdebcedac557a231aa4a85e Mon Sep 17 00:00:00 2001
From: Nathaniel Wesley Filardo <nwf@auristor.com>
Date: Wed, 1 Nov 2017 23:46:20 -0400
Subject: [PATCH] vars.h: don't use bool keyword as variable
--- a/vars.h
+++ b/vars.h
@@ -160,13 +160,13 @@ typedef struct var {
(vp)->var_type = VAR_UNKNOWN; \
}
-avd_t avd_bool_alloc(boolean_t bool);
+avd_t avd_bool_alloc(boolean_t boolval);
avd_t avd_int_alloc(uint64_t integer);
avd_t avd_dbl_alloc(double integer);
avd_t avd_str_alloc(char *string);
avd_t avd_var_alloc(char *varname);
-int var_assign_boolean(char *name, boolean_t bool);
+int var_assign_boolean(char *name, boolean_t boolval);
int var_assign_integer(char *name, uint64_t integer);
int var_assign_double(char *name, double dbl);
int var_assign_string(char *name, char *string);

View File

@@ -0,0 +1,22 @@
PR pending / bug #906004
https://github.com/filebench/filebench/pull/160.patch
From bee9657493f66432a20d1e9e02132da5819b6133 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Tue, 20 Dec 2022 10:11:08 +0100
Subject: [PATCH] configure.ac: Improve C99 compatibility of HAVE_IOPRIO check
Include <unistd.h> to obtain a declaration of the syscall function.
Implicit function declarations are likely to be rejected by future
compilers by default.
--- a/configure.ac
+++ b/configure.ac
@@ -370,7 +370,8 @@ AC_TRY_COMPILE([
# check for I/O priority system calls
AC_MSG_CHECKING(for I/O priority system calls)
AC_TRY_COMPILE([
- #include <syscall.h>],
+ #include <syscall.h>
+ #include <unistd.h>],
[(void)syscall(__NR_ioprio_set, 0, 0, 0);
],[
AC_DEFINE(HAVE_IOPRIO, 1, [ Define if you have I/O priority syscalls. ])

View File

@@ -6,6 +6,7 @@
<flag name="auto-completion">Enable command-line autocompletion using <pkg>dev-libs/libtecla</pkg></flag>
</use>
<upstream>
<remote-id type="sourceforge">filebench</remote-id>
<remote-id type="sourceforge">filebench</remote-id><!-- old -->
<remote-id type="github">filebench/filebench</remote-id>
</upstream>
</pkgmetadata>