Edward O'Callaghan has uploaded this change for review.

View Change

tests/: Factor out all link-time wrapped func

Situate all the link-time wrapped functions into their
own object file. This makes it easier to grok test code
and keep all related harness supports together.

BUG=b:217629892,b:215255210
TEST=`ninja test`.

Change-Id: Ic5e18c9390c064a3112caa7f5778569ae478552d
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
---
M tests/meson.build
M tests/tests.c
A tests/wraps.c
3 files changed, 325 insertions(+), 305 deletions(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/77/62777/1
diff --git a/tests/meson.build b/tests/meson.build
index 610d1c6..0a90ed6 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -23,6 +23,7 @@
'lifecycle.c',
'layout.c',
'chip.c',
+ 'wraps.c',
]

mocks = [
diff --git a/tests/tests.c b/tests/tests.c
index 21cc1ed..3a3d381 100644
--- a/tests/tests.c
+++ b/tests/tests.c
@@ -14,318 +14,13 @@
*/

#include <include/test.h>
-#include "io_mock.h"
#include "tests.h"

-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
void *not_null(void)
{
return (void *)NON_ZERO;
}

-/* Workaround for https://github.com/clibs/cmocka/issues/17 */
-char *__wrap_strdup(const char *s)
-{
- size_t len = strlen(s) + 1;
- void *new = malloc(len);
- if (new == NULL)
- return NULL;
- return (char *)memcpy(new, s, len);
-}
-
-void __wrap_physunmap(void *virt_addr, size_t len)
-{
- LOG_ME;
-}
-
-void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len)
-{
- LOG_ME;
- return NULL;
-}
-
-struct pci_dev mock_pci_dev = {
- .device_id = NON_ZERO,
-};
-
-struct pci_dev *__wrap_pcidev_init(void *devs, int bar)
-{
- LOG_ME;
- return &mock_pci_dev;
-}
-
-uintptr_t __wrap_pcidev_readbar(void *dev, int bar)
-{
- LOG_ME;
- return NON_ZERO;
-}
-
-void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data)
-{
- LOG_ME;
-}
-
-uint8_t __wrap_sio_read(uint16_t port, uint8_t reg)
-{
- LOG_ME;
- return (uint8_t)mock();
-}
-
-int __wrap_open(const char *pathname, int flags)
-{
- LOG_ME;
- if (get_io() && get_io()->open)
- return get_io()->open(get_io()->state, pathname, flags);
- return NON_ZERO;
-}
-
-int __wrap_open64(const char *pathname, int flags)
-{
- LOG_ME;
- if (get_io() && get_io()->open)
- return get_io()->open(get_io()->state, pathname, flags);
- return NON_ZERO;
-}
-
-int __wrap_ioctl(int fd, unsigned long int request, ...)
-{
- LOG_ME;
- if (get_io() && get_io()->ioctl) {
- va_list args;
- int out;
- va_start(args, request);
- out = get_io()->ioctl(get_io()->state, fd, request, args);
- va_end(args);
- return out;
- }
- return 0;
-}
-
-int __wrap_write(int fd, const void *buf, size_t sz)
-{
- LOG_ME;
- if (get_io() && get_io()->write)
- return get_io()->write(get_io()->state, fd, buf, sz);
- return sz;
-}
-
-int __wrap_read(int fd, void *buf, size_t sz)
-{
- LOG_ME;
- if (get_io() && get_io()->read)
- return get_io()->read(get_io()->state, fd, buf, sz);
- return sz;
-}
-
-FILE *__wrap_fopen(const char *pathname, const char *mode)
-{
- LOG_ME;
- if (get_io() && get_io()->fopen)
- return get_io()->fopen(get_io()->state, pathname, mode);
- return not_null();
-}
-
-FILE *__wrap_fopen64(const char *pathname, const char *mode)
-{
- LOG_ME;
- if (get_io() && get_io()->fopen)
- return get_io()->fopen(get_io()->state, pathname, mode);
- return not_null();
-}
-
-FILE *__wrap_fdopen(int fd, const char *mode)
-{
- LOG_ME;
- return not_null();
-}
-
-int __wrap_stat(const char *path, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_stat64(const char *path, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap___xstat(const char *path, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap___xstat64(const char *path, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_fstat(int fd, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_fstat64(int fd, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap___fxstat(int fd, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap___fxstat64(int fd, void *buf)
-{
- LOG_ME;
- return 0;
-}
-
-char *__wrap_fgets(char *buf, int len, FILE *fp)
-{
- LOG_ME;
- if (get_io() && get_io()->fgets)
- return get_io()->fgets(get_io()->state, buf, len, fp);
- return NULL;
-}
-
-size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp)
-{
- LOG_ME;
- if (get_io() && get_io()->fread)
- return get_io()->fread(get_io()->state, ptr, size, nmemb, fp);
- return nmemb;
-}
-
-size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp)
-{
- LOG_ME;
- return nmemb;
-}
-
-int __wrap_fflush(FILE *fp)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_fileno(FILE *fp)
-{
- LOG_ME;
- return NON_ZERO;
-}
-
-int __wrap_fsync(int fd)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size)
-{
- LOG_ME;
- return 0;
-}
-
-int __wrap_fprintf(FILE *fp, const char *fmt, ...)
-{
- LOG_ME;
- if (get_io() && get_io()->fprintf) {
- va_list args;
- int out;
- va_start(args, fmt);
- out = get_io()->fprintf(get_io()->state, fp, fmt, args);
- va_end(args);
- return out;
- }
- return 0;
-}
-
-int __wrap_fclose(FILE *fp)
-{
- LOG_ME;
- if (get_io() && get_io()->fclose)
- return get_io()->fclose(get_io()->state, fp);
- return 0;
-}
-
-int __wrap_feof(FILE *fp)
-{
- /* LOG_ME; */
- return 0;
-}
-
-int __wrap_ferror(FILE *fp)
-{
- /* LOG_ME; */
- return 0;
-}
-void __wrap_clearerr(FILE *fp)
-{
- /* LOG_ME; */
- return;
-}
-
-int __wrap_rget_io_perms(void)
-{
- LOG_ME;
- return 0;
-}
-
-void __wrap_test_outb(unsigned char value, unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->outb)
- get_io()->outb(get_io()->state, value, port);
-}
-
-unsigned char __wrap_test_inb(unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->inb)
- return get_io()->inb(get_io()->state, port);
- return 0;
-}
-
-void __wrap_test_outw(unsigned short value, unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->outw)
- get_io()->outw(get_io()->state, value, port);
-}
-
-unsigned short __wrap_test_inw(unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->inw)
- return get_io()->inw(get_io()->state, port);
- return 0;
-}
-
-void __wrap_test_outl(unsigned int value, unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->outl)
- get_io()->outl(get_io()->state, value, port);
-}
-
-unsigned int __wrap_test_inl(unsigned short port)
-{
- /* LOG_ME; */
- if (get_io() && get_io()->inl)
- return get_io()->inl(get_io()->state, port);
- return 0;
-}
-
int main(void)
{
int ret = 0;
diff --git a/tests/wraps.c b/tests/wraps.c
new file mode 100644
index 0000000..f3fe343
--- /dev/null
+++ b/tests/wraps.c
@@ -0,0 +1,324 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright 2021-2022 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <include/test.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "io_mock.h"
+
+
+/* Workaround for https://github.com/clibs/cmocka/issues/17 */
+char *__wrap_strdup(const char *s)
+{
+ size_t len = strlen(s) + 1;
+ void *new = malloc(len);
+ if (new == NULL)
+ return NULL;
+ return (char *)memcpy(new, s, len);
+}
+
+void __wrap_physunmap(void *virt_addr, size_t len)
+{
+ LOG_ME;
+}
+
+void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len)
+{
+ LOG_ME;
+ return NULL;
+}
+
+struct pci_dev mock_pci_dev = {
+ .device_id = NON_ZERO,
+};
+
+struct pci_dev *__wrap_pcidev_init(void *devs, int bar)
+{
+ LOG_ME;
+ return &mock_pci_dev;
+}
+
+uintptr_t __wrap_pcidev_readbar(void *dev, int bar)
+{
+ LOG_ME;
+ return NON_ZERO;
+}
+
+void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data)
+{
+ LOG_ME;
+}
+
+uint8_t __wrap_sio_read(uint16_t port, uint8_t reg)
+{
+ LOG_ME;
+ return (uint8_t)mock();
+}
+
+int __wrap_open(const char *pathname, int flags)
+{
+ LOG_ME;
+ if (get_io() && get_io()->open)
+ return get_io()->open(get_io()->state, pathname, flags);
+ return NON_ZERO;
+}
+
+int __wrap_open64(const char *pathname, int flags)
+{
+ LOG_ME;
+ if (get_io() && get_io()->open)
+ return get_io()->open(get_io()->state, pathname, flags);
+ return NON_ZERO;
+}
+
+int __wrap_ioctl(int fd, unsigned long int request, ...)
+{
+ LOG_ME;
+ if (get_io() && get_io()->ioctl) {
+ va_list args;
+ int out;
+ va_start(args, request);
+ out = get_io()->ioctl(get_io()->state, fd, request, args);
+ va_end(args);
+ return out;
+ }
+ return 0;
+}
+
+int __wrap_write(int fd, const void *buf, size_t sz)
+{
+ LOG_ME;
+ if (get_io() && get_io()->write)
+ return get_io()->write(get_io()->state, fd, buf, sz);
+ return sz;
+}
+
+int __wrap_read(int fd, void *buf, size_t sz)
+{
+ LOG_ME;
+ if (get_io() && get_io()->read)
+ return get_io()->read(get_io()->state, fd, buf, sz);
+ return sz;
+}
+
+FILE *__wrap_fopen(const char *pathname, const char *mode)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fopen)
+ return get_io()->fopen(get_io()->state, pathname, mode);
+ return not_null();
+}
+
+FILE *__wrap_fopen64(const char *pathname, const char *mode)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fopen)
+ return get_io()->fopen(get_io()->state, pathname, mode);
+ return not_null();
+}
+
+FILE *__wrap_fdopen(int fd, const char *mode)
+{
+ LOG_ME;
+ return not_null();
+}
+
+int __wrap_stat(const char *path, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_stat64(const char *path, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap___xstat(const char *path, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap___xstat64(const char *path, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_fstat(int fd, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_fstat64(int fd, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap___fxstat(int fd, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap___fxstat64(int fd, void *buf)
+{
+ LOG_ME;
+ return 0;
+}
+
+char *__wrap_fgets(char *buf, int len, FILE *fp)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fgets)
+ return get_io()->fgets(get_io()->state, buf, len, fp);
+ return NULL;
+}
+
+size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fread)
+ return get_io()->fread(get_io()->state, ptr, size, nmemb, fp);
+ return nmemb;
+}
+
+size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp)
+{
+ LOG_ME;
+ return nmemb;
+}
+
+int __wrap_fflush(FILE *fp)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_fileno(FILE *fp)
+{
+ LOG_ME;
+ return NON_ZERO;
+}
+
+int __wrap_fsync(int fd)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size)
+{
+ LOG_ME;
+ return 0;
+}
+
+int __wrap_fprintf(FILE *fp, const char *fmt, ...)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fprintf) {
+ va_list args;
+ int out;
+ va_start(args, fmt);
+ out = get_io()->fprintf(get_io()->state, fp, fmt, args);
+ va_end(args);
+ return out;
+ }
+ return 0;
+}
+
+int __wrap_fclose(FILE *fp)
+{
+ LOG_ME;
+ if (get_io() && get_io()->fclose)
+ return get_io()->fclose(get_io()->state, fp);
+ return 0;
+}
+
+int __wrap_feof(FILE *fp)
+{
+ /* LOG_ME; */
+ return 0;
+}
+
+int __wrap_ferror(FILE *fp)
+{
+ /* LOG_ME; */
+ return 0;
+}
+
+void __wrap_clearerr(FILE *fp)
+{
+ /* LOG_ME; */
+ return;
+}
+
+int __wrap_rget_io_perms(void)
+{
+ LOG_ME;
+ return 0;
+}
+
+void __wrap_test_outb(unsigned char value, unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->outb)
+ get_io()->outb(get_io()->state, value, port);
+}
+
+unsigned char __wrap_test_inb(unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->inb)
+ return get_io()->inb(get_io()->state, port);
+ return 0;
+}
+
+void __wrap_test_outw(unsigned short value, unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->outw)
+ get_io()->outw(get_io()->state, value, port);
+}
+
+unsigned short __wrap_test_inw(unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->inw)
+ return get_io()->inw(get_io()->state, port);
+ return 0;
+}
+
+void __wrap_test_outl(unsigned int value, unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->outl)
+ get_io()->outl(get_io()->state, value, port);
+}
+
+unsigned int __wrap_test_inl(unsigned short port)
+{
+ /* LOG_ME; */
+ if (get_io() && get_io()->inl)
+ return get_io()->inl(get_io()->state, port);
+ return 0;
+}

To view, visit change 62777. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ic5e18c9390c064a3112caa7f5778569ae478552d
Gerrit-Change-Number: 62777
Gerrit-PatchSet: 1
Gerrit-Owner: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-MessageType: newchange