summaryrefslogtreecommitdiff
path: root/libexec/ld.so/powerpc
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2021-12-23 18:50:34 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2021-12-23 18:50:34 +0000
commit5d8c8d969184612e68d66305dcfb6301593fd5a6 (patch)
tree2d2f27ca6a453314dc3f8f60804609bd242bf088 /libexec/ld.so/powerpc
parent400f5fa45fbb01e26f1de58370473241bef85589 (diff)
Roll the syscalls that have an off_t argument to remove the explicit padding.
Switch libc and ld.so to the generic stubs for these calls. WARNING: reboot to updated kernel before installing libc or ld.so! Time for a story... When gcc (back in 1.x days) first implemented long long, it didn't (always) pass 64bit arguments in 'aligned' registers/stack slots, with the result that argument offsets didn't match structure offsets. This affected the nine system calls that pass off_t arguments: ftruncate lseek mmap mquery pread preadv pwrite pwritev truncate To avoid having to do custom ASM wrappers for those, BSD put an explicit pad argument in so that the off_t argument would always start on a even slot and thus be naturally aligned. Thus those odd wrappers in lib/libc/sys/ that use __syscall() and pass an extra '0' argument. The ABIs for different CPUs eventually settled how things should be passed on each and gcc 2.x followed them. The only arch now where it helps is landisk, which needs to skip the last argument register if it would be the first half of a 64bit argument. So: add new syscalls without the pad argument and on landisk do that skipping directly in the syscall handler in the kernel. Keep compat support for the existing syscalls long enough for the transition. ok deraadt@
Diffstat (limited to 'libexec/ld.so/powerpc')
-rw-r--r--libexec/ld.so/powerpc/syscall.h70
1 files changed, 0 insertions, 70 deletions
diff --git a/libexec/ld.so/powerpc/syscall.h b/libexec/ld.so/powerpc/syscall.h
deleted file mode 100644
index ab8811f0615..00000000000
--- a/libexec/ld.so/powerpc/syscall.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $OpenBSD: syscall.h,v 1.48 2019/11/29 06:34:45 deraadt Exp $ */
-
-/*
- * Copyright (c) 1998 Per Fogelstrom, Opsycon AB
- *
- * 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 ``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 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.
- *
- */
-
-#ifndef __DL_SYSCALL_H__
-#define __DL_SYSCALL_H__
-
-#include <sys/syscall.h>
-#include <sys/stat.h>
-
-#ifndef _dl_MAX_ERRNO
-#define _dl_MAX_ERRNO 512L
-#endif
-#define _dl_mmap_error(__res) \
- ((long)__res < 0 && (long)__res >= -_dl_MAX_ERRNO)
-
-int _dl_close(int);
-__dead
-void _dl_exit(int);
-int _dl_fstat(int, struct stat *);
-ssize_t _dl_getdents(int, char *, size_t);
-int _dl_issetugid(void);
-int _dl_getthrid(void);
-int _dl_mprotect(const void *, size_t, int);
-int _dl_munmap(const void *, size_t);
-int _dl_open(const char *, int);
-int _dl_msyscall(void *addr, size_t len);
-ssize_t _dl_read(int, const char *, size_t);
-int _dl_pledge(const char *, const char **);
-long _dl___syscall(quad_t, ...);
-int _dl_sysctl(const int *, u_int, void *, size_t *, void *, size_t);
-int _dl_utrace(const char *, const void *, size_t);
-int _dl_getentropy(char *, size_t);
-int _dl_sendsyslog(const char *, size_t, int);
-void _dl___set_tcb(void *);
-__dead
-void _dl_thrkill(pid_t, int, void *);
-
-static inline void *
-_dl_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
-{
- return (void *)_dl___syscall(SYS_mmap, addr, len, prot,
- flags, fd, 0, offset);
-}
-
-#endif /*__DL_SYSCALL_H__*/