This is the mail archive of the binutils@sources.redhat.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]
Other format: [Raw text]

PATCH: Pass section name to elf_backend_section_flags


This patch removes one FIXME in ELF linker.


H.J.
-----
2004-04-23  H.J. Lu  <hongjiu.lu@intel.com>

	* elf-bfd.h (elf_backend_section_flags): Also take section
	name.
	* elf64-alpha.c (elf64_alpha_section_flags): Updated.
	* elfxx-ia64.c (elfNN_ia64_section_flags): Likewise.

	* elf.c (_bfd_elf_make_section_from_shdr): Pass section name
	to elf_backend_section_flags.

	* elf32-sh64.c (elf_backend_section_flags): New. Defined.
	(sh64_elf_set_mach_from_flags): Remove the kludge for .cranges
	section.
	(sh64_elf_section_flags): New. Set SEC_DEBUGGING for
	.cranges section.

--- bfd/elf-bfd.h.flags	2004-04-22 11:06:31.000000000 -0700
+++ bfd/elf-bfd.h	2004-04-23 11:32:09.000000000 -0700
@@ -597,7 +597,7 @@ struct elf_backend_data
   /* A function to convert machine dependent section header flags to
      BFD internal section header flags.  */
   bfd_boolean (*elf_backend_section_flags)
-    (flagword *, Elf_Internal_Shdr *);
+    (flagword *, Elf_Internal_Shdr *, const char *name);
 
   /* A function to handle unusual program segment types when creating BFD
      sections from ELF program segments.  */
--- bfd/elf.c.flags	2004-04-22 16:25:06.000000000 -0700
+++ bfd/elf.c	2004-04-23 11:34:43.000000000 -0700
@@ -726,7 +726,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 
   bed = get_elf_backend_data (abfd);
   if (bed->elf_backend_section_flags)
-    if (! bed->elf_backend_section_flags (&flags, hdr))
+    if (! bed->elf_backend_section_flags (&flags, hdr, name))
       return FALSE;
 
   if (! bfd_set_section_flags (abfd, newsect, flags))
--- bfd/elf32-sh64.c.flags	2004-03-26 08:36:25.000000000 -0800
+++ bfd/elf32-sh64.c	2004-04-23 12:11:05.000000000 -0700
@@ -89,6 +89,7 @@ static void sh64_find_section_for_addres
 #define elf_backend_final_write_processing 	sh64_elf_final_write_processing
 #define elf_backend_section_from_shdr		sh64_backend_section_from_shdr
 #define elf_backend_special_sections		sh64_elf_special_sections
+#define elf_backend_section_flags		sh64_elf_section_flags
 
 #define bfd_elf32_new_section_hook		sh64_elf_new_section_hook
 
@@ -149,7 +150,6 @@ static bfd_boolean
 sh64_elf_set_mach_from_flags (bfd *abfd)
 {
   flagword flags = elf_elfheader (abfd)->e_flags;
-  asection *cranges;
 
   switch (flags & EF_SH_MACH_MASK)
     {
@@ -164,17 +164,16 @@ sh64_elf_set_mach_from_flags (bfd *abfd)
       return FALSE;
     }
 
-  /* We also need to set SEC_DEBUGGING on an incoming .cranges section.
-     We could have used elf_backend_section_flags if it had given us the
-     section name; the bfd_section member in the header argument is not
-     set at the point of the call.  FIXME: Find out whether that is by
-     undocumented design or a bug.  */
-  cranges = bfd_get_section_by_name (abfd, SH64_CRANGES_SECTION_NAME);
-  if (cranges != NULL
-      && ! bfd_set_section_flags (abfd, cranges,
-				  bfd_get_section_flags (abfd, cranges)
-				  | SEC_DEBUGGING))
-    return FALSE;
+  return TRUE;
+}
+
+static bfd_boolean
+sh64_elf_section_flags (flagword *flags,
+			Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED,
+			const char *name)
+{
+  if (strcmp (name, SH64_CRANGES_SECTION_NAME) == 0)
+    *flags |= SEC_DEBUGGING;
 
   return TRUE;
 }
--- bfd/elf64-alpha.c.flags	2004-03-27 17:39:09.000000000 -0800
+++ bfd/elf64-alpha.c	2004-04-23 11:49:05.000000000 -0700
@@ -74,8 +74,6 @@ static bfd_boolean elf64_alpha_object_p
   PARAMS ((bfd *));
 static bfd_boolean elf64_alpha_section_from_shdr
   PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
-static bfd_boolean elf64_alpha_section_flags
-  PARAMS ((flagword *, Elf_Internal_Shdr *));
 static bfd_boolean elf64_alpha_fake_sections
   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
 static bfd_boolean elf64_alpha_create_got_section
@@ -2313,9 +2311,8 @@ elf64_alpha_section_from_shdr (abfd, hdr
 /* Convert Alpha specific section flags to bfd internal section flags.  */
 
 static bfd_boolean
-elf64_alpha_section_flags (flags, hdr)
-     flagword *flags;
-     Elf_Internal_Shdr *hdr;
+elf64_alpha_section_flags (flagword *flags, Elf_Internal_Shdr *hdr,
+			   const char *name ATTRIBUTE_UNUSED)
 {
   if (hdr->sh_flags & SHF_ALPHA_GPREL)
     *flags |= SEC_SMALL_DATA;
--- bfd/elfxx-ia64.c.flags	2004-04-22 09:59:17.000000000 -0700
+++ bfd/elfxx-ia64.c	2004-04-23 11:46:50.000000000 -0700
@@ -195,8 +195,6 @@ static bfd_boolean is_unwind_section_nam
   PARAMS ((bfd *abfd, const char *));
 static bfd_boolean elfNN_ia64_section_from_shdr
   PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
-static bfd_boolean elfNN_ia64_section_flags
-  PARAMS ((flagword *, Elf_Internal_Shdr *));
 static bfd_boolean elfNN_ia64_fake_sections
   PARAMS ((bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec));
 static void elfNN_ia64_final_write_processing
@@ -1279,9 +1277,8 @@ elfNN_ia64_section_from_shdr (abfd, hdr,
    flag.  */
 
 static bfd_boolean
-elfNN_ia64_section_flags (flags, hdr)
-     flagword *flags;
-     Elf_Internal_Shdr *hdr;
+elfNN_ia64_section_flags (flagword *flags, Elf_Internal_Shdr *hdr,
+			  const char *name ATTRIBUTE_UNUSED)
 {
   if (hdr->sh_flags & SHF_IA_64_SHORT)
     *flags |= SEC_SMALL_DATA;


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