mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-13 14:59:34 +02:00
35c853f8b3
One of our SeaBIOS patches causes build errors with GCC 15:
src/romfile.c: In function 'romfile_loadfile_g':
src/romfile.c:65:18: error: too many arguments to function 'malloc_fn'; expected 0, have 1
65 | char *data = malloc_fn(filesize+add_len);
| ^~~~~~~~~ ~~~~~~~~~~~~~~~~
src/romfile.c: In function 'romfile_loadfile':
src/romfile.c:88:50: error: passing argument 3 of 'romfile_loadfile_g' from incompatible pointer type [-Wincompatible-pointer-types]
88 | char *data = romfile_loadfile_g(name, psize, &malloc_tmphigh, 1);
| ^~~~~~~~~~~~~~~
| |
| void * (*)(u32) {aka void * (*)(unsigned int)}
src/romfile.c:55:28: note: expected 'void * (*)(void)' but argument is of type 'void * (*)(u32)' {aka 'void * (*)(unsigned int)'}
55 | void *(*malloc_fn)(), int add_len)
| ~~~~~~~~^~~~~~~~~~~~
In file included from src/romfile.c:8:
src/malloc.h:42:21: note: 'malloc_tmphigh' declared here
42 | static inline void *malloc_tmphigh(u32 size) {
| ^~~~~~~~~~~~~~
make: *** [Makefile:142: out/src/romfile.o] Error 1
make: *** Waiting for unfinished jobs....
src/optionroms.c: In function 'vgarom_setup':
src/optionroms.c:468:60: error: passing argument 3 of 'romfile_loadfile_g' from incompatible pointer type [-Wincompatible-pointer-types]
468 | void *mxm_sis = romfile_loadfile_g("mxm-30-sis", NULL, &malloc_low, 0);
| ^~~~~~~~~~~
| |
| void * (*)(u32) {aka void * (*)(unsigned int)}
In file included from src/optionroms.c:18:
src/romfile.h:17:34: note: expected 'void * (*)(void)' but argument is of type 'void * (*)(u32)' {aka 'void * (*)(unsigned int)'}
17 | void *(*malloc_fn)(), int add_len);
| ~~~~~~~~^~~~~~~~~~~~
In file included from src/optionroms.c:16:
src/malloc.h:30:21: note: 'malloc_low' declared here
30 | static inline void *malloc_low(u32 size) {
| ^~~~~~~~~~
make: *** [Makefile:141: out/src/optionroms.o] Error 1
make: Leaving directory '/tmp/lbmk/src/seabios/default'
This is because the function pointer defined as `void *(*malloc_fn)()`
refers to a function that takes no arguments, unlike `malloc_tmphigh`
which takes an unsigned int. Add the missing argument type.
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
87 lines
2.8 KiB
Diff
87 lines
2.8 KiB
Diff
From 2aff8adc1dcd1315877fdb4ac4ef5e649c5b7d11 Mon Sep 17 00:00:00 2001
|
|
From: Riku Viitanen <riku.viitanen@protonmail.com>
|
|
Date: Sat, 10 Feb 2024 21:23:33 +0200
|
|
Subject: [PATCH 1/2] romfile: implement a generic loader
|
|
|
|
romfile_loadfile_g:
|
|
Based on romfile_loadfile but more flexible. User has to supply pointer
|
|
to a malloc function and the number of trailing padding bytes. Thus, any
|
|
memory region may be used.
|
|
|
|
romfile_loadfile:
|
|
It is now a wrapper around romfile_loadfile_g. Functionality is the same.
|
|
|
|
Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
|
|
---
|
|
src/romfile.c | 25 ++++++++++++++++++++-----
|
|
src/romfile.h | 2 ++
|
|
2 files changed, 22 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/romfile.c b/src/romfile.c
|
|
index b598274edc09..8ccf5139ece8 100644
|
|
--- a/src/romfile.c
|
|
+++ b/src/romfile.c
|
|
@@ -47,10 +47,12 @@ romfile_find(const char *name)
|
|
return __romfile_findprefix(name, strlen(name) + 1, NULL);
|
|
}
|
|
|
|
-// Helper function to find, malloc_tmphigh, and copy a romfile. This
|
|
-// function adds a trailing zero to the malloc'd copy.
|
|
+// Generic function to find romfile, malloc (using provided function
|
|
+// pointer), and copy a romfile. add_len specifies how many additional
|
|
+// trailing bytes to reserve. The extra bytes will not be initialised.
|
|
void *
|
|
-romfile_loadfile(const char *name, int *psize)
|
|
+romfile_loadfile_g(const char *name, int *psize,
|
|
+ void *(*malloc_fn)(u32), int add_len)
|
|
{
|
|
struct romfile_s *file = romfile_find(name);
|
|
if (!file)
|
|
@@ -60,7 +62,7 @@ romfile_loadfile(const char *name, int *psize)
|
|
if (!filesize)
|
|
return NULL;
|
|
|
|
- char *data = malloc_tmphigh(filesize+1);
|
|
+ char *data = malloc_fn(filesize+add_len);
|
|
if (!data) {
|
|
warn_noalloc();
|
|
return NULL;
|
|
@@ -74,7 +76,20 @@ romfile_loadfile(const char *name, int *psize)
|
|
}
|
|
if (psize)
|
|
*psize = filesize;
|
|
- data[filesize] = '\0';
|
|
+
|
|
+ return data;
|
|
+}
|
|
+
|
|
+// Helper function to find, malloc_tmphigh, and copy a romfile. This
|
|
+// function adds a trailing zero to the malloc'd copy.
|
|
+void *
|
|
+romfile_loadfile(const char *name, int *psize)
|
|
+{
|
|
+ char *data = romfile_loadfile_g(name, psize, &malloc_tmphigh, 1);
|
|
+ if (!data)
|
|
+ return NULL;
|
|
+
|
|
+ data[*psize] = '\0';
|
|
return data;
|
|
}
|
|
|
|
diff --git a/src/romfile.h b/src/romfile.h
|
|
index 3e0f820047dd..1b967d86551f 100644
|
|
--- a/src/romfile.h
|
|
+++ b/src/romfile.h
|
|
@@ -13,6 +13,8 @@ struct romfile_s {
|
|
void romfile_add(struct romfile_s *file);
|
|
struct romfile_s *romfile_findprefix(const char *prefix, struct romfile_s *prev);
|
|
struct romfile_s *romfile_find(const char *name);
|
|
+void *romfile_loadfile_g(const char *name, int *psize,
|
|
+ void *(*malloc_fn)(u32), int add_len);
|
|
void *romfile_loadfile(const char *name, int *psize);
|
|
u64 romfile_loadint(const char *name, u64 defval);
|
|
|
|
--
|
|
2.43.0
|
|
|