From ce1663765cab19cd8cdad9053f5fa026adcdfba9 Mon Sep 17 00:00:00 2001 From: miod Date: Wed, 16 Oct 2024 18:47:47 +0000 Subject: [PATCH] a.out is no longer the commonly encountered binary file format, the world has moved to ELF. Move the a.out specific defines and macros, but the MID_xxx values, from to , and update the few userland binaries which really need these defines (i.e. boot-related tools for old architectures) to explicitly include when needed. "Fine" deraadt@ --- distrib/special/more/more.c | 4 +- include/a.out.h | 114 +++++++++++++++++++++++++- sys/arch/hppa/stand/mkboot/mkboot.c | 6 +- sys/sys/exec.h | 120 +--------------------------- usr.sbin/mopd/common/file.c | 4 +- usr.sbin/mopd/mopa.out/mopa.out.c | 4 +- 6 files changed, 123 insertions(+), 129 deletions(-) diff --git a/distrib/special/more/more.c b/distrib/special/more/more.c index cd95e25eb0d..9178e888960 100644 --- a/distrib/special/more/more.c +++ b/distrib/special/more/more.c @@ -1,4 +1,4 @@ -/* $OpenBSD: more.c,v 1.41 2019/06/28 13:32:52 deraadt Exp $ */ +/* $OpenBSD: more.c,v 1.42 2024/10/16 18:47:47 miod Exp $ */ /* * Copyright (c) 2003 Todd C. Miller @@ -63,10 +63,10 @@ */ #include -#include #include #include +#include #include #include #include diff --git a/include/a.out.h b/include/a.out.h index 8191d174d4f..3e6b584b15c 100644 --- a/include/a.out.h +++ b/include/a.out.h @@ -1,4 +1,4 @@ -/* $OpenBSD: a.out.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */ +/* $OpenBSD: a.out.h,v 1.4 2024/10/16 18:47:48 miod Exp $ */ /* $NetBSD: a.out.h,v 1.15 1994/10/26 00:55:42 cgd Exp $ */ /*- @@ -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 #define _AOUT_INCLUDE_ diff --git a/sys/arch/hppa/stand/mkboot/mkboot.c b/sys/arch/hppa/stand/mkboot/mkboot.c index 88d71da067b..b56c4c51388 100644 --- a/sys/arch/hppa/stand/mkboot/mkboot.c +++ b/sys/arch/hppa/stand/mkboot/mkboot.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mkboot.c,v 1.21 2017/12/30 23:08:29 guenther Exp $ */ +/* $OpenBSD: mkboot.c,v 1.22 2024/10/16 18:47:48 miod Exp $ */ /* * Copyright (c) 1990, 1993 @@ -32,11 +32,11 @@ */ #include -#include -#include #include +#include #include +#include #include #include #include diff --git a/sys/sys/exec.h b/sys/sys/exec.h index 801181f2c98..687ccb3ec6f 100644 --- a/sys/sys/exec.h +++ b/sys/sys/exec.h @@ -1,4 +1,4 @@ -/* $OpenBSD: exec.h,v 1.54 2024/04/02 08:39:16 deraadt Exp $ */ +/* $OpenBSD: exec.h,v 1.55 2024/10/16 18:47:48 miod Exp $ */ /* $NetBSD: exec.h,v 1.59 1996/02/09 18:25:09 christos Exp $ */ /*- @@ -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 @@ -292,92 +260,6 @@ struct exec { #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 #endif /* !_SYS_EXEC_H_ */ diff --git a/usr.sbin/mopd/common/file.c b/usr.sbin/mopd/common/file.c index c4f5d02b520..12a928549fb 100644 --- a/usr.sbin/mopd/common/file.c +++ b/usr.sbin/mopd/common/file.c @@ -1,4 +1,4 @@ -/* $OpenBSD: file.c,v 1.19 2017/10/29 08:45:53 mpi Exp $ */ +/* $OpenBSD: file.c,v 1.20 2024/10/16 18:47:48 miod Exp $ */ /* * Copyright (c) 1995-96 Mats O Jansson. All rights reserved. @@ -32,7 +32,7 @@ #ifndef NOAOUT #if defined(__OpenBSD__) -#include +#include #endif #if defined(__bsdi__) #define NOAOUT diff --git a/usr.sbin/mopd/mopa.out/mopa.out.c b/usr.sbin/mopd/mopa.out/mopa.out.c index 3ecb923fe33..35ed44cb5a0 100644 --- a/usr.sbin/mopd/mopa.out/mopa.out.c +++ b/usr.sbin/mopd/mopa.out/mopa.out.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mopa.out.c,v 1.18 2022/12/28 21:30:17 jmc Exp $ */ +/* $OpenBSD: mopa.out.c,v 1.19 2024/10/16 18:47:48 miod Exp $ */ /* * mopa.out - Convert a Unix format kernel into something that @@ -53,7 +53,7 @@ #include "common/mopdef.h" #include "common/file.h" #if defined(__OpenBSD__) -#include +#include #endif #if defined(__FreeBSD__) #include -- 2.20.1