V2 [PATCH] gas: Generate a new section for SHF_GNU_RETAIN
H.J. Lu
hjl.tools@gmail.com
Fri Dec 4 16:43:13 GMT 2020
On Fri, Dec 4, 2020 at 7:29 AM Jozef Lawrynowicz
<jozef.l@mittosystems.com> wrote:
>
> On Fri, Dec 04, 2020 at 05:52:54AM -0800, H.J. Lu wrote:
> > For
> > .globl foo2
> > .section .data.foo,"aR"
> > .align 4
> > .type foo2, @object
> > .size foo2, 4
> > foo2:
> > .long 2
> > .globl foo1
> > .section .data.foo
> > .align 4
> > .type foo1, @object
> > .size foo1, 4
> > foo1:
> > .long 1
> >
> > generate a new section if the SHF_GNU_RETAIN bit doesn't match.
> >
> > * config/obj-elf.c (SEC_ASSEMBLER_SHF_MASK): New.
> > (get_section_by_match): Also check if SEC_ASSEMBLER_SHF_MASK of
> > sh_flags matches. Rename info to sh_info.
> > (obj_elf_change_section): Rename info to sh_info.
> > (obj_elf_section): Rename info to sh_info. Set sh_flags for
> > SHF_GNU_RETAIN.
> > * config/obj-elf.h (elf_section_match): Rename info to sh_info.
> > Add sh_flags.
> > * testsuite/gas/elf/elf.exp: Run section27.
> > * testsuite/gas/elf/section24b.d: Updated.
> > * testsuite/gas/elf/section27.d: New file.
> > * testsuite/gas/elf/section27.s: Likewise.
> > ---
> > gas/config/obj-elf.c | 21 ++++++++++++------
> > gas/config/obj-elf.h | 3 ++-
> > gas/testsuite/gas/elf/elf.exp | 1 +
> > gas/testsuite/gas/elf/section24b.d | 10 ++++++---
> > gas/testsuite/gas/elf/section27.d | 14 ++++++++++++
> > gas/testsuite/gas/elf/section27.s | 34 ++++++++++++++++++++++++++++++
> > 6 files changed, 73 insertions(+), 10 deletions(-)
> > create mode 100644 gas/testsuite/gas/elf/section27.d
> > create mode 100644 gas/testsuite/gas/elf/section27.s
>
> I just want to check that we are OK with the fact that a .section
> directive without any flags will always use the default flags, even if
> the section previously had the 'R' flag set. I suppose this is just
> standard behavior and how the .section directive has always behaved.
Correct.
> $ cat asm-tester.s
> .section .data.foo,"awR"
> .word 0
> .section .data.foo
> .word 0
> $ as asm-tester.s -o tester.o
> $ readelf --wide -S tester.o
> ...
> [ 4] .data.foo PROGBITS 0000000000000000 000040 000002 00 WAR 0 0 1
> [ 5] .data.foo PROGBITS 0000000000000000 000042 000002 00 WA 0 0 1
> ...
>
> Also, I think the following change should be added, since the OR'ing of
> SHF_GNU_RETAIN flag between sections, from the original patch, is now
> redundant.
>
> diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
> index 54d42d9ecb..9ac53e4d0e 100644
> --- a/gas/config/obj-elf.c
> +++ b/gas/config/obj-elf.c
> @@ -806,17 +806,9 @@ obj_elf_change_section (const char *name,
> as_bad (_("changed section attributes for %s"), name);
> }
> else
> - {
> - /* Don't overwrite a previously set SHF_GNU_RETAIN flag for the
> - section. The entire section must be marked retained. */
> - if ((elf_tdata (stdoutput)->has_gnu_osabi & elf_gnu_osabi_retain)
> - && ((elf_section_flags (old_sec) & SHF_GNU_RETAIN)))
> - attr |= SHF_GNU_RETAIN;
> -
> - /* FIXME: Maybe we should consider removing a previously set
> - processor or application specific attribute as suspicious ? */
> - elf_section_flags (sec) = attr;
> - }
> + /* FIXME: Maybe we should consider removing a previously set
> + processor or application specific attribute as suspicious ? */
> + elf_section_flags (sec) = attr;
>
> if ((flags & SEC_MERGE) && old_sec->entsize != (unsigned) entsize)
> as_bad (_("changed section entity size for %s"), name);
>
Fixed.
Here is the updated patch. OK for master?
Thanks.
--
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-gas-Generate-a-new-section-for-SHF_GNU_RETAIN.patch
Type: text/x-patch
Size: 7927 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20201204/708cbb3f/attachment-0001.bin>
More information about the Binutils
mailing list