[patch] 2.3.40: improved register_binfmt

From: Chris Sears (cbsears@ix.netcom.com)
Date: Mon Jan 24 2000 - 14:02:46 EST


This patch contains an improved fs/exec.c/register_binfmt().

Recently, binfmt support has undergone several changes.
Handlers are registered either statically with __initcall
or, as before, dynamically as loadable modules.

"formats" is a singly linked list of binfmt handlers with
new entries placed at the front. The ordering of BINFMTS
handlers in the fs/Makefile apparently takes this into account,
and has binfmt_elf as the last entry and thus at the front
of the list. But when a loadable binfmt module is registered,
it is added to the front of the list. Not good.

Instead, the patched register_binfmt() appends new entries
to the end of the formats list and reverses the order of
BINFMTS in the fs/Makefile. A preferred binfmt_elf
will always be at the front of the list.

The new code is also a bit smaller.

Chris Sears
cbsears@ix.netcom.com

--- exec.c.orig Sun Jan 23 22:44:57 2000
+++ exec.c Sun Jan 23 23:12:47 2000
@@ -57,8 +57,7 @@
                        return -EBUSY;
                tmp = &(*tmp)->next;
        }
- fmt->next = formats;
- formats = fmt;
+ *tmp = fmt;
        return 0;
 }

--- Makefile.orig Sun Jan 23 23:13:35 2000
+++ Makefile Sun Jan 23 23:14:19 2000
@@ -277,21 +277,16 @@
   endif
 endif

-ifeq ($(CONFIG_BINFMT_AOUT),y)
-BINFMTS += binfmt_aout.o
+ifeq ($(CONFIG_BINFMT_ELF),y)
+BINFMTS += binfmt_elf.o
 else
- ifeq ($(CONFIG_BINFMT_AOUT),m)
- M_OBJS += binfmt_aout.o
+ ifeq ($(CONFIG_BINFMT_ELF),m)
+ M_OBJS += binfmt_elf.o
   endif
 endif

-ifeq ($(CONFIG_BINFMT_EM86),y)
-BINFMTS += binfmt_em86.o
-else
- ifeq ($(CONFIG_BINFMT_EM86),m)
- M_OBJS += binfmt_em86.o
- endif
-endif
+# binfmt_script is always there
+BINFMTS += binfmt_script.o

 ifeq ($(CONFIG_BINFMT_MISC),y)
 BINFMTS += binfmt_misc.o
@@ -301,14 +296,19 @@
   endif
 endif

-# binfmt_script is always there
-BINFMTS += binfmt_script.o
+ifeq ($(CONFIG_BINFMT_EM86),y)
+BINFMTS += binfmt_em86.o
+else
+ ifeq ($(CONFIG_BINFMT_EM86),m)
+ M_OBJS += binfmt_em86.o
+ endif
+endif

-ifeq ($(CONFIG_BINFMT_ELF),y)
-BINFMTS += binfmt_elf.o
+ifeq ($(CONFIG_BINFMT_AOUT),y)
+BINFMTS += binfmt_aout.o
 else
- ifeq ($(CONFIG_BINFMT_ELF),m)
- M_OBJS += binfmt_elf.o
+ ifeq ($(CONFIG_BINFMT_AOUT),m)
+ M_OBJS += binfmt_aout.o
   endif
 endif

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jan 31 2000 - 21:00:12 EST