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]

Re: PATCH: Pass section name to elf_backend_section_flags


On Mon, Apr 26, 2004 at 09:22:42PM +0930, Alan Modra wrote:
> On Fri, Apr 23, 2004 at 12:14:55PM -0700, H. J. Lu wrote:
> > This patch removes one FIXME in ELF linker.
> 
> Thanks for looking at FIXMEs :)
> 
> > 	* 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.
> 
> I suggest instead that you move the assignment to hdr->bfd_section like
> this:
> 

How about this patch?


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

	* 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.

2004-04-26  Alan Modra  <amodra@bigpond.net.au>

	* elf.c (_bfd_elf_make_section_from_shdr): Set the bfd_section
	field before calling elf_backend_section_flags.

--- bfd/elf.c.section	2004-04-26 08:02:32.000000000 -0700
+++ bfd/elf.c	2004-04-26 08:02:56.000000000 -0700
@@ -652,6 +652,9 @@ _bfd_elf_make_section_from_shdr (bfd *ab
   if (newsect == NULL)
     return FALSE;
 
+  hdr->bfd_section = newsect;
+  elf_section_data (newsect)->this_hdr = *hdr;
+
   /* Always use the real type/flags.  */
   elf_section_type (newsect) = hdr->sh_type;
   elf_section_flags (newsect) = hdr->sh_flags;
@@ -798,9 +801,6 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	}
     }
 
-  hdr->bfd_section = newsect;
-  elf_section_data (newsect)->this_hdr = *hdr;
-
   return TRUE;
 }
 
--- bfd/elf32-sh64.c.flags	2004-03-26 08:36:25.000000000 -0800
+++ bfd/elf32-sh64.c	2004-04-26 08:12:09.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,18 +164,19 @@ 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 TRUE;
+}
+
+static bfd_boolean
+sh64_elf_section_flags (flagword *flags,
+			Elf_Internal_Shdr *hdr)
+{
+  if (hdr->bfd_section == NULL)
     return FALSE;
 
+  if (strcmp (hdr->bfd_section->name, SH64_CRANGES_SECTION_NAME) == 0)
+    *flags |= SEC_DEBUGGING;
+
   return TRUE;
 }
 


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