Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Feb 2001 08:58:49 -0600
From:      Jonathan Lemon <jlemon@flugsvamp.com>
To:        Marcel Moolenaar <marcel@cup.hp.com>
Cc:        arch@FreeBSD.ORG
Subject:   Re: sysctl kern.fallback_elf_brand
Message-ID:  <20010223085849.I5714@prism.flugsvamp.com>
In-Reply-To: <3A960EF8.75C3FC53@cup.hp.com>
References:  <3A960EF8.75C3FC53@cup.hp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Feb 22, 2001 at 11:19:20PM -0800, Marcel Moolenaar wrote:
> 
> I think we need to disable the fallback ELF branding when no ABI
> compatibility module is loaded. Otherwise we can set the fallback to the
> one ABI module, or when multiple are loaded, the first. In the latter
> case, the first may not be the preferred one, so we probably need to
> have a bit more tuning than simply selecting the first.

I like this; I think that we should just turn off the default elf
branding for now, since we've been branding our (FreeBSD) binaries
since the 3.x days.  How about the following patch?
--
Jonathan


Index: kern/imgact_elf.c
===================================================================
RCS file: /ncvs/src/sys/kern/imgact_elf.c,v
retrieving revision 1.89
diff -u -r1.89 imgact_elf.c
--- kern/imgact_elf.c	2001/02/09 06:09:48	1.89
+++ kern/imgact_elf.c	2001/02/23 15:06:56
@@ -32,6 +32,7 @@
 #include "opt_rlimit.h"
 
 #include <sys/param.h>
+#include <sys/systm.h>
 #include <sys/exec.h>
 #include <sys/fcntl.h>
 #include <sys/imgact.h>
@@ -436,9 +437,12 @@
 	return error;
 }
 
-static int fallback_elf_brand = ELFOSABI_FREEBSD;
+/*
+ * non static, as it can be overridden by start_init()
+ */
+int fallback_elf_brand = ELFOSABI_NONE;
 SYSCTL_INT(_kern, OID_AUTO, fallback_elf_brand, CTLFLAG_RW,
-		&fallback_elf_brand, ELFOSABI_FREEBSD,
+		&fallback_elf_brand, ELFOSABI_NONE,
 		"ELF brand of last resort");
 
 static int
@@ -607,10 +611,6 @@
 			}
 		}
 	}
-
-	/* XXX - Assume FreeBSD after the branding method change. */
-	if (brand_info == NULL)
-		brand_info = &freebsd_brand_info;
 
 	if (brand_info == NULL) {
 		uprintf("ELF binary type \"%u\" not known.\n",
Index: kern/init_main.c
===================================================================
RCS file: /ncvs/src/sys/kern/init_main.c,v
retrieving revision 1.157
diff -u -r1.157 init_main.c
--- kern/init_main.c	2001/02/21 06:39:54	1.157
+++ kern/init_main.c	2001/02/22 21:54:37
@@ -93,6 +93,7 @@
 
 int cmask = CMASK;
 extern	struct user *proc0paddr;
+extern int fallback_elf_brand;
 
 struct	vnode *rootvp;
 int	boothowto = 0;		/* initialized so that it can be patched */
@@ -479,6 +480,8 @@
 		strncpy(init_path, var, sizeof init_path);
 		init_path[sizeof init_path - 1] = 0;
 	}
+	if ((var = getenv("kern.fallback_elf_brand")) != NULL)
+		fallback_elf_brand = strtol(var, NULL, 0);
 	
 	for (path = init_path; *path != '\0'; path = next) {
 		while (*path == ':')
Index: sys/elf_common.h
===================================================================
RCS file: /ncvs/src/sys/sys/elf_common.h,v
retrieving revision 1.8
diff -u -r1.8 elf_common.h
--- sys/elf_common.h	2001/01/01 21:56:57	1.8
+++ sys/elf_common.h	2001/02/23 15:08:27
@@ -100,6 +100,10 @@
 #define ELFOSABI_ARM		97	/* ARM */
 #define ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */
 
+/* magic marker for fallback elf brand, not for e_ident[EI_OSABI] */
+#define ELFOSABI_NONE		(-1)	/* No OSABI defined */
+
+
 /* e_ident */
 #define IS_ELF(ehdr)	((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
 			 (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010223085849.I5714>