This is the mail archive of the binutils@sourceware.cygnus.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Advice on the prefered way to brand ELF binaries as needed on FreeBSD


FreeBSD brands all ELF files so the image loader knows what type of
binary it is and use the proper compatibility layer if the binary is not
a native FreeBSD one.  Current we do it using the 1st patch below.  I
have taken a slightly more general approach with the second patch below.
Is this patch OK, or is there another prefered way to do this?

-- 
-- David    (obrien@NUXI.com)


Index: elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.27
diff -u -r1.27 elf.c
--- elf.c	2000/03/27 08:39:12	1.27
+++ elf.c	2000/04/12 03:31:51
@@ -3211,6 +3211,14 @@
   for (count = EI_PAD; count < EI_NIDENT; count++)
     i_ehdrp->e_ident[count] = 0;
 
+#ifdef __FreeBSD__
+#define EI_BRAND_OFFSET 8
+  /* FreeBSD brands all ELF binaries so the image loader knows what system
+	 call set, etc. to use.  */
+  strncpy((char *) &i_ehdrp->e_ident[EI_BRAND_OFFSET], "FreeBSD", 
+		  EI_NIDENT-EI_BRAND_OFFSET);
+#endif
+
   if ((abfd->flags & DYNAMIC) != 0)
     i_ehdrp->e_type = ET_DYN;
   else if ((abfd->flags & EXEC_P) != 0)



Index: elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.27
diff -u -r1.27 elf.c
--- elf.c	2000/03/27 08:39:12	1.27
+++ elf.c	2000/04/12 03:34:17
@@ -38,6 +38,13 @@
 #define ARCH_SIZE 0
 #include "elf-bfd.h"
 
+#define EI_BRAND_OFFSET 8
+#if defined(__FreeBSD__)
+#define BRANDING	"FreeBSD"
+#else
+#define BRANDING	""
+#endif
+
 static INLINE struct elf_segment_map *make_mapping
   PARAMS ((bfd *, asection **, unsigned int, unsigned int, boolean));
 static boolean map_sections_to_segments PARAMS ((bfd *));
@@ -3210,6 +3217,11 @@
 
   for (count = EI_PAD; count < EI_NIDENT; count++)
     i_ehdrp->e_ident[count] = 0;
+
+  /* Some OS's brands all ELF binaries so the image loader knows what system
+	 call set, etc. to use.  */
+  strncpy((char *) &i_ehdrp->e_ident[EI_BRAND_OFFSET], BRANDING,
+		  EI_NIDENT-EI_BRAND_OFFSET);
 
   if ((abfd->flags & DYNAMIC) != 0)
     i_ehdrp->e_type = ET_DYN;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]