summaryrefslogtreecommitdiffstats
path: root/sys/i386/linux
diff options
context:
space:
mode:
authoralex <alex@FreeBSD.org>1998-10-11 21:08:02 +0000
committeralex <alex@FreeBSD.org>1998-10-11 21:08:02 +0000
commit772482444a64ad99994f0be272a835430a555237 (patch)
treea52003872eefb70f586ec367bb1902854e138b4c /sys/i386/linux
parent329eb7ae8e5c06bbefd21bcded42eff3cdb63769 (diff)
downloadFreeBSD-src-772482444a64ad99994f0be272a835430a555237.zip
FreeBSD-src-772482444a64ad99994f0be272a835430a555237.tar.gz
Unregister the glibc2 brand at module unload time.
Change the ELF registration/unregistration scheme to be less error prone. Adding a new brand requires a single addition to linux_brandlist instead of modifying linux_load(), linux_unload(), and linux_elf_init(). Approved by: jkh Reviewed by: msmith
Diffstat (limited to 'sys/i386/linux')
-rw-r--r--sys/i386/linux/linux_sysvec.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c
index b2ba2da..5600111 100644
--- a/sys/i386/linux/linux_sysvec.c
+++ b/sys/i386/linux/linux_sysvec.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_sysvec.c,v 1.34 1998/09/17 22:08:29 msmith Exp $
+ * $Id: linux_sysvec.c,v 1.35 1998/10/05 16:37:36 jfieber Exp $
*/
/* XXX we use functions that might not exist. */
@@ -427,20 +427,26 @@ struct sysentvec elf_linux_sysvec = {
/*
* Installed either via SYSINIT() or via LKM stubs.
*/
-Elf32_Brandinfo linux_brand = {
+static Elf32_Brandinfo linux_brand = {
"Linux",
"/compat/linux",
"/lib/ld-linux.so.1",
&elf_linux_sysvec
};
-Elf32_Brandinfo linux_glibc2brand = {
+static Elf32_Brandinfo linux_glibc2brand = {
"Linux",
"/compat/linux",
"/lib/ld-linux.so.2",
&elf_linux_sysvec
};
+Elf32_Brandinfo *linux_brandlist[] = {
+ &linux_brand,
+ &linux_glibc2brand,
+ NULL
+ };
+
#ifndef LKM
/*
* XXX: this is WRONG, it needs to be SI_SUB_EXEC, but this is just at the
@@ -452,8 +458,16 @@ static void
linux_elf_init(dummy)
void *dummy;
{
- if ((elf_insert_brand_entry(&linux_brand) < 0) ||
- (elf_insert_brand_entry(&linux_glibc2brand) < 0))
+ Elf32_Brandinfo **brandinfo;
+ int error;
+
+ error = 0;
+
+ for (brandinfo = &linux_brandlist[0]; *brandinfo != NULL; ++brandinfo)
+ if (elf_insert_brand_entry(*brandinfo) < 0)
+ error = 1;
+
+ if (error)
printf("cannot insert Linux elf brand handler\n");
else if (bootverbose)
printf("Linux-ELF exec handler installed\n");
OpenPOWER on IntegriCloud