summaryrefslogtreecommitdiff
path: root/patches/mesa-drm-maple.patch
diff options
context:
space:
mode:
authorAlexander Hill <ahill@breadpudding.dev>2025-07-18 23:03:00 -0400
committerAlexander Hill <ahill@breadpudding.dev>2025-07-18 23:03:11 -0400
commit9a562846c03b64ca63d1b1414a6b500942b975c7 (patch)
tree34ab04a62a3ca235fb0c5df0e790a24aad9e41bc /patches/mesa-drm-maple.patch
parent872a8c617e35fc549d618c53c7aaa1d347859d67 (diff)
Successfully built Mesa!
Special thanks to L3m0n-Cao for helping me set up the Python build environment!
Diffstat (limited to 'patches/mesa-drm-maple.patch')
-rw-r--r--patches/mesa-drm-maple.patch225
1 files changed, 225 insertions, 0 deletions
diff --git a/patches/mesa-drm-maple.patch b/patches/mesa-drm-maple.patch
new file mode 100644
index 0000000..8b3079a
--- /dev/null
+++ b/patches/mesa-drm-maple.patch
@@ -0,0 +1,225 @@
+--- src/drm-shim/drm_shim.c 2025-07-14 02:47:27.834000000 +0000
++++ src/drm-shim/drm_shim.c 2025-07-14 02:58:33.373000000 +0000
+@@ -324,8 +324,6 @@
+
+ return real_fopen(path, mode);
+ }
+-PUBLIC FILE *fopen64(const char *path, const char *mode)
+- __attribute__((alias("fopen")));
+
+ /* Intercepts access(render_node_path) to trick drmGetMinorType */
+ PUBLIC int access(const char *path, int mode)
+@@ -371,7 +369,6 @@
+
+ return fd;
+ }
+-PUBLIC int open64(const char*, int, ...) __attribute__((alias("open")));
+
+ /* __open64_2 isn't declared unless _FORTIFY_SOURCE is defined. */
+ PUBLIC int __open64_2(const char *path, int flags);
+@@ -429,45 +426,6 @@
+ return 0;
+ }
+
+-/* Fakes stat to return character device stuff for our fake render node. */
+-PUBLIC int __xstat64(int ver, const char *path, struct stat64 *st)
+-{
+- init_shim();
+-
+- /* Note: call real stat if we're in the process of probing for a free
+- * render node!
+- */
+- if (render_node_minor == -1)
+- return real___xstat64(ver, path, st);
+-
+- if (hide_drm_device_path(path)) {
+- errno = ENOENT;
+- return -1;
+- }
+-
+- /* Fool libdrm's probe of whether the /sys dir for this char dev is
+- * there.
+- */
+- char *sys_dev_drm_dir;
+- nfasprintf(&sys_dev_drm_dir,
+- "/sys/dev/char/%d:%d/device/drm",
+- DRM_MAJOR, render_node_minor);
+- if (strcmp(path, sys_dev_drm_dir) == 0) {
+- free(sys_dev_drm_dir);
+- return 0;
+- }
+- free(sys_dev_drm_dir);
+-
+- if (strcmp(path, render_node_path) != 0)
+- return real___xstat64(ver, path, st);
+-
+- memset(st, 0, sizeof(*st));
+- st->st_rdev = makedev(DRM_MAJOR, render_node_minor);
+- st->st_mode = S_IFCHR;
+-
+- return 0;
+-}
+-
+ /* Fakes fstat to return character device stuff for our fake render node. */
+ PUBLIC int __fxstat(int ver, int fd, struct stat *st)
+ {
+@@ -485,22 +443,6 @@
+ return 0;
+ }
+
+-PUBLIC int __fxstat64(int ver, int fd, struct stat64 *st)
+-{
+- init_shim();
+-
+- struct shim_fd *shim_fd = drm_shim_fd_lookup(fd);
+-
+- if (!shim_fd)
+- return real___fxstat64(ver, fd, st);
+-
+- memset(st, 0, sizeof(*st));
+- st->st_rdev = makedev(DRM_MAJOR, render_node_minor);
+- st->st_mode = S_IFCHR;
+-
+- return 0;
+-}
+-
+ #else
+
+ PUBLIC int stat(const char* path, struct stat* stat_buf)
+@@ -541,44 +483,6 @@
+ return 0;
+ }
+
+-PUBLIC int stat64(const char* path, struct stat64* stat_buf)
+-{
+- init_shim();
+-
+- /* Note: call real stat if we're in the process of probing for a free
+- * render node!
+- */
+- if (render_node_minor == -1)
+- return real_stat64(path, stat_buf);
+-
+- if (hide_drm_device_path(path)) {
+- errno = ENOENT;
+- return -1;
+- }
+-
+- /* Fool libdrm's probe of whether the /sys dir for this char dev is
+- * there.
+- */
+- char *sys_dev_drm_dir;
+- nfasprintf(&sys_dev_drm_dir,
+- "/sys/dev/char/%d:%d/device/drm",
+- DRM_MAJOR, render_node_minor);
+- if (strcmp(path, sys_dev_drm_dir) == 0) {
+- free(sys_dev_drm_dir);
+- return 0;
+- }
+- free(sys_dev_drm_dir);
+-
+- if (strcmp(path, render_node_path) != 0)
+- return real_stat64(path, stat_buf);
+-
+- memset(stat_buf, 0, sizeof(*stat_buf));
+- stat_buf->st_rdev = makedev(DRM_MAJOR, render_node_minor);
+- stat_buf->st_mode = S_IFCHR;
+-
+- return 0;
+-}
+-
+ PUBLIC int fstat(int fd, struct stat* stat_buf)
+ {
+ init_shim();
+@@ -594,22 +498,6 @@
+
+ return 0;
+ }
+-
+-PUBLIC int fstat64(int fd, struct stat64* stat_buf)
+-{
+- init_shim();
+-
+- struct shim_fd *shim_fd = drm_shim_fd_lookup(fd);
+-
+- if (!shim_fd)
+- return real_fstat64(fd, stat_buf);
+-
+- memset(stat_buf, 0, sizeof(*stat_buf));
+- stat_buf->st_rdev = makedev(DRM_MAJOR, render_node_minor);
+- stat_buf->st_mode = S_IFCHR;
+-
+- return 0;
+-}
+ #endif
+
+ /* Tracks if the opendir was on /dev/dri. */
+@@ -664,34 +552,6 @@
+ return ent;
+ }
+
+-/* If we're looking at /dev/dri, add our render node to the list
+- * before the real entries in the directory.
+- */
+-PUBLIC struct dirent64 *
+-readdir64(DIR *dir)
+-{
+- init_shim();
+-
+- struct dirent64 *ent = NULL;
+-
+- static struct dirent64 render_node_dirent = { 0 };
+-
+- simple_mtx_lock(&shim_lock);
+- if (_mesa_set_search(opendir_set, dir)) {
+- strcpy(render_node_dirent.d_name,
+- render_node_dirent_name);
+- render_node_dirent.d_type = DT_CHR;
+- ent = &render_node_dirent;
+- _mesa_set_remove_key(opendir_set, dir);
+- }
+- simple_mtx_unlock(&shim_lock);
+-
+- if (!ent && dir != fake_dev_dri)
+- ent = real_readdir64(dir);
+-
+- return ent;
+-}
+-
+ /* Cleans up tracking of opendir("/dev/dri") */
+ PUBLIC int
+ closedir(DIR *dir)
+@@ -774,7 +634,7 @@
+ * our DRM fd to drm_shim_ioctl().
+ */
+ PUBLIC int
+-ioctl(int fd, unsigned long request, ...)
++ioctl(int fd, int request, ...)
+ {
+ init_shim();
+
+@@ -810,8 +670,6 @@
+
+ return ret;
+ }
+-PUBLIC int fcntl64(int, int, ...)
+- __attribute__((alias("fcntl")));
+
+ /* I wrote this when trying to fix gallium screen creation, leaving it around
+ * since it's probably good to have.
+@@ -841,15 +699,3 @@
+
+ return real_mmap(addr, length, prot, flags, fd, offset);
+ }
+-
+-PUBLIC void *
+-mmap64(void* addr, size_t length, int prot, int flags, int fd, off64_t offset)
+-{
+- init_shim();
+-
+- struct shim_fd *shim_fd = drm_shim_fd_lookup(fd);
+- if (shim_fd)
+- return drm_shim_mmap(shim_fd, length, prot, flags, fd, offset);
+-
+- return real_mmap64(addr, length, prot, flags, fd, offset);
+-}