This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
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;
}