Index | Thread | Search

From:
Miod Vallat <miod@online.fr>
Subject:
out with a.out
To:
tech@openbsd.org
Date:
Thu, 3 Oct 2024 07:11:29 +0000

Download raw body.

Thread
The world is ELF, OpenBSD has removed the ability to run a.out binaries
(even static ones) quite many years ago now, the a.out format defines
only matter for boot-related code on older hardware.

The following diff moves all the a.out-related defines, but the MID_xxx
constants, from <sys/exec.h> to <a.out.h>, and explicitly include the
latter instead of the former in code which deals with a.out bit.

(Also don't look at distrib/special/more/more.c around line 480 or you
might get tempted to edit this code with a chainsaw)

Index: distrib/special/more/more.c
===================================================================
RCS file: /OpenBSD/src/distrib/special/more/more.c,v
retrieving revision 1.41
diff -u -p -u -p -r1.41 more.c
--- distrib/special/more/more.c	28 Jun 2019 13:32:52 -0000	1.41
+++ distrib/special/more/more.c	3 Oct 2024 07:05:54 -0000
@@ -63,10 +63,10 @@
  */
 
 #include <sys/types.h>
-#include <sys/exec.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 
+#include <a.out.h>
 #include <ctype.h>
 #include <curses.h>
 #include <errno.h>
Index: include/a.out.h
===================================================================
RCS file: /OpenBSD/src/include/a.out.h,v
retrieving revision 1.3
diff -u -p -u -p -r1.3 a.out.h
--- include/a.out.h	2 Jun 2003 19:34:12 -0000	1.3
+++ include/a.out.h	3 Oct 2024 07:05:54 -0000
@@ -36,6 +36,118 @@
 #ifndef	_AOUT_H_
 #define	_AOUT_H_
 
+/*
+ * Legacy a.out structures and defines.
+ */
+
+/*
+ * Header prepended to each a.out file.
+ * only manipulate the a_midmag field via the
+ * N_SETMAGIC/N_GET{MAGIC,MID,FLAG} macros below.
+ */
+struct exec {
+	u_int32_t	a_midmag;	/* htonl(flags<<26|mid<<16|magic) */
+	u_int32_t	a_text;		/* text segment size */
+	u_int32_t	a_data;		/* initialized data size */
+	u_int32_t	a_bss;		/* uninitialized data size */
+	u_int32_t	a_syms;		/* symbol table size */
+	u_int32_t	a_entry;	/* entry point */
+	u_int32_t	a_trsize;	/* text relocation size */
+	u_int32_t	a_drsize;	/* data relocation size */
+};
+
+/* a_magic */
+#define	OMAGIC		0407	/* old impure format */
+#define	NMAGIC		0410	/* read-only text */
+#define	ZMAGIC		0413	/* demand load format */
+#define	QMAGIC		0314	/* "compact" demand load format; deprecated */
+
+/*
+ * a_flags
+ */
+#define EX_DYNAMIC	0x20
+#define EX_PIC		0x10
+#define EX_DPMASK	0x30
+/*
+ * Interpretation of the (a_flags & EX_DPMASK) bits:
+ *
+ *	00		traditional executable or object file
+ *	01		object file contains PIC code (set by `as -k')
+ *	10		dynamic executable
+ *	11		position independent executable image
+ * 			(eg. a shared library)
+ *
+ */
+
+/*
+ * The a.out structure's a_midmag field is a network-byteorder encoding
+ * of this int
+ *	FFFFFFmmmmmmmmmmMMMMMMMMMMMMMMMM
+ * Where `F' is 6 bits of flag like EX_DYNAMIC,
+ *       `m' is 10 bits of machine-id like MID_I386, and
+ *       `M' is 16 bits worth of magic number, ie. ZMAGIC.
+ * The macros below will set/get the needed fields.
+ */
+#define	N_GETMAGIC(ex) \
+    ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : ((ex).a_midmag))
+#define	N_GETMAGIC2(ex) \
+    ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : \
+    (((ex).a_midmag) | 0x10000) )
+#define	N_GETMID(ex) \
+    ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>16)&0x03ff) : MID_ZERO )
+#define	N_GETFLAG(ex) \
+    ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>26)&0x3f) : 0 )
+#define	N_SETMAGIC(ex,mag,mid,flag) \
+    ( (ex).a_midmag = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \
+    (((mag)&0xffff)) ) )
+
+#define	N_ALIGN(ex,x) \
+	(N_GETMAGIC(ex) == ZMAGIC || N_GETMAGIC(ex) == QMAGIC ? \
+	((x) + __LDPGSZ - 1) & ~(__LDPGSZ - 1) : (x))
+
+/* Valid magic number check. */
+#define	N_BADMAG(ex) \
+	(N_GETMAGIC(ex) != NMAGIC && N_GETMAGIC(ex) != OMAGIC && \
+	N_GETMAGIC(ex) != ZMAGIC && N_GETMAGIC(ex) != QMAGIC)
+
+/* Address of the bottom of the text segment. */
+#define	N_TXTADDR(ex)	(N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : __LDPGSZ)
+
+/* Address of the bottom of the data segment. */
+#define	N_DATADDR(ex) \
+	(N_GETMAGIC(ex) == OMAGIC ? N_TXTADDR(ex) + (ex).a_text : \
+	(N_TXTADDR(ex) + (ex).a_text + __LDPGSZ - 1) & ~(__LDPGSZ - 1))
+
+/* Address of the bottom of the bss segment. */
+#define	N_BSSADDR(ex) \
+	(N_DATADDR(ex) + (ex).a_data)
+
+/* Text segment offset. */
+#define	N_TXTOFF(ex) \
+	( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \
+	0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? __LDPGSZ : \
+	sizeof(struct exec)) )
+
+/* Data segment offset. */
+#define	N_DATOFF(ex) \
+	N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text)
+
+/* Text relocation table offset. */
+#define	N_TRELOFF(ex) \
+	(N_DATOFF(ex) + (ex).a_data)
+
+/* Data relocation table offset. */
+#define	N_DRELOFF(ex) \
+	(N_TRELOFF(ex) + (ex).a_trsize)
+
+/* Symbol table offset. */
+#define	N_SYMOFF(ex) \
+	(N_DRELOFF(ex) + (ex).a_drsize)
+
+/* String table offset. */
+#define	N_STROFF(ex) \
+	(N_SYMOFF(ex) + (ex).a_syms)
+
 #include <sys/exec.h>
 
 #define	_AOUT_INCLUDE_
Index: sys/arch/hppa/stand/mkboot/mkboot.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/hppa/stand/mkboot/mkboot.c,v
retrieving revision 1.21
diff -u -p -u -p -r1.21 mkboot.c
--- sys/arch/hppa/stand/mkboot/mkboot.c	30 Dec 2017 23:08:29 -0000	1.21
+++ sys/arch/hppa/stand/mkboot/mkboot.c	3 Oct 2024 07:05:54 -0000
@@ -32,11 +32,11 @@
  */
 
 #include <sys/param.h>
-#include <sys/exec.h>
-#include <sys/exec_elf.h>
 #include <sys/stat.h>
 
+#include <a.out.h>
 #include <ctype.h>
+#include <elf.h>
 #include <err.h>
 #include <fcntl.h>
 #include <stdlib.h>
Index: sys/sys/exec.h
===================================================================
RCS file: /OpenBSD/src/sys/sys/exec.h,v
retrieving revision 1.54
diff -u -p -u -p -r1.54 exec.h
--- sys/sys/exec.h	2 Apr 2024 08:39:16 -0000	1.54
+++ sys/sys/exec.h	3 Oct 2024 07:05:54 -0000
@@ -222,38 +222,6 @@ extern int	stackgap_random;
 
 #endif /* _KERNEL */
 
-#ifndef N_PAGSIZ
-#define	N_PAGSIZ(ex)	(__LDPGSZ)
-#endif
-
-/*
- * Legacy a.out structures and defines; start deleting these when
- * external use no longer exist.
- */
-
-
-/*
- * Header prepended to each a.out file.
- * only manipulate the a_midmag field via the
- * N_SETMAGIC/N_GET{MAGIC,MID,FLAG} macros below.
- */
-struct exec {
-	u_int32_t	a_midmag;	/* htonl(flags<<26|mid<<16|magic) */
-	u_int32_t	a_text;		/* text segment size */
-	u_int32_t	a_data;		/* initialized data size */
-	u_int32_t	a_bss;		/* uninitialized data size */
-	u_int32_t	a_syms;		/* symbol table size */
-	u_int32_t	a_entry;	/* entry point */
-	u_int32_t	a_trsize;	/* text relocation size */
-	u_int32_t	a_drsize;	/* data relocation size */
-};
-
-/* a_magic */
-#define	OMAGIC		0407	/* old impure format */
-#define	NMAGIC		0410	/* read-only text */
-#define	ZMAGIC		0413	/* demand load format */
-#define	QMAGIC		0314	/* "compact" demand load format; deprecated */
-
 /*
  * a_mid - keep sorted in numerical order for sanity's sake
  * ensure that: 0 < mid < 0x3ff
@@ -291,92 +259,6 @@ struct exec {
 #define	MID_HPUX800	0x20B	/* hp800 HP-UX binary pa1.0 */
 #define	MID_HPPA11	0x210	/* hp700 HP-UX binary pa1.1 */
 #define	MID_HPPA20	0x214	/* hp700 HP-UX binary pa2.0 */
-
-/*
- * a_flags
- */
-#define EX_DYNAMIC	0x20
-#define EX_PIC		0x10
-#define EX_DPMASK	0x30
-/*
- * Interpretation of the (a_flags & EX_DPMASK) bits:
- *
- *	00		traditional executable or object file
- *	01		object file contains PIC code (set by `as -k')
- *	10		dynamic executable
- *	11		position independent executable image
- * 			(eg. a shared library)
- *
- */
-
-/*
- * The a.out structure's a_midmag field is a network-byteorder encoding
- * of this int
- *	FFFFFFmmmmmmmmmmMMMMMMMMMMMMMMMM
- * Where `F' is 6 bits of flag like EX_DYNAMIC,
- *       `m' is 10 bits of machine-id like MID_I386, and
- *       `M' is 16 bits worth of magic number, ie. ZMAGIC.
- * The macros below will set/get the needed fields.
- */
-#define	N_GETMAGIC(ex) \
-    ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : ((ex).a_midmag))
-#define	N_GETMAGIC2(ex) \
-    ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : \
-    (((ex).a_midmag) | 0x10000) )
-#define	N_GETMID(ex) \
-    ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>16)&0x03ff) : MID_ZERO )
-#define	N_GETFLAG(ex) \
-    ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>26)&0x3f) : 0 )
-#define	N_SETMAGIC(ex,mag,mid,flag) \
-    ( (ex).a_midmag = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \
-    (((mag)&0xffff)) ) )
-
-#define	N_ALIGN(ex,x) \
-	(N_GETMAGIC(ex) == ZMAGIC || N_GETMAGIC(ex) == QMAGIC ? \
-	((x) + __LDPGSZ - 1) & ~(__LDPGSZ - 1) : (x))
-
-/* Valid magic number check. */
-#define	N_BADMAG(ex) \
-	(N_GETMAGIC(ex) != NMAGIC && N_GETMAGIC(ex) != OMAGIC && \
-	N_GETMAGIC(ex) != ZMAGIC && N_GETMAGIC(ex) != QMAGIC)
-
-/* Address of the bottom of the text segment. */
-#define	N_TXTADDR(ex)	(N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : __LDPGSZ)
-
-/* Address of the bottom of the data segment. */
-#define	N_DATADDR(ex) \
-	(N_GETMAGIC(ex) == OMAGIC ? N_TXTADDR(ex) + (ex).a_text : \
-	(N_TXTADDR(ex) + (ex).a_text + __LDPGSZ - 1) & ~(__LDPGSZ - 1))
-
-/* Address of the bottom of the bss segment. */
-#define	N_BSSADDR(ex) \
-	(N_DATADDR(ex) + (ex).a_data)
-
-/* Text segment offset. */
-#define	N_TXTOFF(ex) \
-	( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \
-	0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? __LDPGSZ : \
-	sizeof(struct exec)) )
-
-/* Data segment offset. */
-#define	N_DATOFF(ex) \
-	N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text)
-
-/* Text relocation table offset. */
-#define	N_TRELOFF(ex) \
-	(N_DATOFF(ex) + (ex).a_data)
-
-/* Data relocation table offset. */
-#define	N_DRELOFF(ex) \
-	(N_TRELOFF(ex) + (ex).a_trsize)
-
-/* Symbol table offset. */
-#define	N_SYMOFF(ex) \
-	(N_DRELOFF(ex) + (ex).a_drsize)
-
-/* String table offset. */
-#define	N_STROFF(ex) \
-	(N_SYMOFF(ex) + (ex).a_syms)
 
 #include <machine/exec.h>
 
Index: usr.sbin/mopd/common/file.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/mopd/common/file.c,v
retrieving revision 1.19
diff -u -p -u -p -r1.19 file.c
--- usr.sbin/mopd/common/file.c	29 Oct 2017 08:45:53 -0000	1.19
+++ usr.sbin/mopd/common/file.c	3 Oct 2024 07:05:54 -0000
@@ -32,7 +32,7 @@
 
 #ifndef NOAOUT
 #if defined(__OpenBSD__)
-#include <sys/exec.h>
+#include <a.out.h>
 #endif
 #if defined(__bsdi__)
 #define NOAOUT
Index: usr.sbin/mopd/mopa.out/mopa.out.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/mopd/mopa.out/mopa.out.c,v
retrieving revision 1.18
diff -u -p -u -p -r1.18 mopa.out.c
--- usr.sbin/mopd/mopa.out/mopa.out.c	28 Dec 2022 21:30:17 -0000	1.18
+++ usr.sbin/mopd/mopa.out/mopa.out.c	3 Oct 2024 07:05:54 -0000
@@ -53,7 +53,7 @@
 #include "common/mopdef.h"
 #include "common/file.h"
 #if defined(__OpenBSD__)
-#include <sys/exec.h>
+#include <a.out.h>
 #endif
 #if defined(__FreeBSD__)
 #include <sys/imgact_aout.h>