Page MenuHomeFreeBSD

D33409.id100140.diff
No OneTemporary

D33409.id100140.diff

diff --git a/stand/common/load_elf.c b/stand/common/load_elf.c
--- a/stand/common/load_elf.c
+++ b/stand/common/load_elf.c
@@ -272,6 +272,7 @@
close(ef->fd);
return (ENOMEM);
}
+ preload(ef->fd);
#ifdef LOADER_VERIEXEC_VECTX
{
int verror;
diff --git a/stand/libsa/Makefile b/stand/libsa/Makefile
--- a/stand/libsa/Makefile
+++ b/stand/libsa/Makefile
@@ -132,7 +132,7 @@
# io routines
SRCS+= closeall.c dev.c ioctl.c nullfs.c stat.c mount.c \
- fstat.c close.c lseek.c open.c read.c write.c readdir.c
+ fstat.c close.c lseek.c open.c read.c write.c readdir.c preload.c
# SMBios routines
SRCS+= smbios.c
diff --git a/stand/libsa/preload.c b/stand/libsa/preload.c
new file mode 100644
--- /dev/null
+++ b/stand/libsa/preload.c
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2021 Beckhoff Automation GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include "stand.h"
+
+void
+preload(int fd)
+{
+ struct open_file *f;
+
+ f = fd2open_file(fd);
+ if (f == NULL) {
+ errno = EBADF;
+ return;
+ }
+ if (f->f_ops->fo_preload)
+ (f->f_ops->fo_preload)(f);
+}
diff --git a/stand/libsa/stand.h b/stand/libsa/stand.h
--- a/stand/libsa/stand.h
+++ b/stand/libsa/stand.h
@@ -111,6 +111,7 @@
off_t (*fo_seek)(struct open_file *f, off_t offset, int where);
int (*fo_stat)(struct open_file *f, struct stat *sb);
int (*fo_readdir)(struct open_file *f, struct dirent *d);
+ int (*fo_preload)(struct open_file *f);
int (*fo_mount)(const char *, const char *, void **);
int (*fo_unmount)(const char *, void *);
};
@@ -300,6 +301,7 @@
extern ssize_t read(int, void *, size_t);
extern ssize_t write(int, const void *, size_t);
extern struct dirent *readdirfd(int);
+extern void preload(int);
extern void srandom(unsigned int);
extern long random(void);

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 27, 6:12 PM (4 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16203360
Default Alt Text
D33409.id100140.diff (3 KB)

Event Timeline