[PATCH] gas: Allow SHF_GNU_RETAIN on SHT_NOTE section

Alan Modra amodra@gmail.com
Mon Feb 15 23:28:52 GMT 2021


On Mon, Feb 15, 2021 at 07:43:39AM -0800, H.J. Lu wrote:
> On Sat, Feb 13, 2021 at 7:25 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > Since SHF_GNU_RETAIN is allowed on SHT_NOTE section, strip SHF_GNU_RETAIN
> > when checking incorrect section attributes on SHT_NOTE section.
> >
> >         PR gas/27412
> >         * config/obj-elf.c (obj_elf_change_section): Strip SHF_GNU_RETAIN.
> >         * testsuite/gas/elf/elf.exp: Run section28.
> >         * testsuite/gas/elf/section28.d: New file.
> >         * testsuite/gas/elf/section28.s: Likewise.
> > ---
> >  gas/config/obj-elf.c              |  8 +++++++-
> >  gas/testsuite/gas/elf/elf.exp     |  1 +
> >  gas/testsuite/gas/elf/section28.d | 15 +++++++++++++++
> >  gas/testsuite/gas/elf/section28.s | 11 +++++++++++
> >  4 files changed, 34 insertions(+), 1 deletion(-)
> >  create mode 100644 gas/testsuite/gas/elf/section28.d
> >  create mode 100644 gas/testsuite/gas/elf/section28.s
> >
> > diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
> > index f52dc69f0c3..13f54b10857 100644
> > --- a/gas/config/obj-elf.c
> > +++ b/gas/config/obj-elf.c
> > @@ -667,12 +667,18 @@ obj_elf_change_section (const char *name,
> >                                         | SHF_MASKPROC))
> >                               & ~ssect->attr) != 0)
> >         {
> > +         /* Strip SHF_GNU_RETAIN.  */
> > +         bfd_vma generic_attr = attr;
> > +         if (elf_tdata (stdoutput)->has_gnu_osabi)
> > +           generic_attr &= ~SHF_GNU_RETAIN;
> > +
> >           /* As a GNU extension, we permit a .note section to be
> >              allocatable.  If the linker sees an allocatable .note
> >              section, it will create a PT_NOTE segment in the output
> >              file.  We also allow "x" for .note.GNU-stack.  */
> >           if (ssect->type == SHT_NOTE
> > -             && (attr == SHF_ALLOC || attr == SHF_EXECINSTR))
> > +             && (generic_attr == SHF_ALLOC
> > +                 || generic_attr == SHF_EXECINSTR))
> >             ;
> >           /* Allow different SHF_MERGE and SHF_STRINGS if we have
> >              something like .rodata.str.  */

Should you be using generic_attr in later tests in this block?  If we
allow .rodata.str with a differing SHF_MERGE flag then it seems
reasonable to also allow SHF_GNU_RETAIN to differ.

> > diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
> > index 2917ea9fe5b..1fd92f31ab6 100644
> > --- a/gas/testsuite/gas/elf/elf.exp
> > +++ b/gas/testsuite/gas/elf/elf.exp
> > @@ -273,6 +273,7 @@ if { [is_elf_format] } then {
> >      run_dump_test "section25"
> >      run_dump_test "section26"
> >      run_dump_test "section27"
> > +    run_dump_test "section28"
> >      run_dump_test "sh-link-zero"
> >      run_dump_test "dwarf2-1" $dump_opts
> >      run_dump_test "dwarf2-2" $dump_opts
> > diff --git a/gas/testsuite/gas/elf/section28.d b/gas/testsuite/gas/elf/section28.d
> > new file mode 100644
> > index 00000000000..a1fd65b0a65
> > --- /dev/null
> > +++ b/gas/testsuite/gas/elf/section28.d
> > @@ -0,0 +1,15 @@
> > +#readelf: -h -S --wide
> > +#name: SHF_GNU_RETAIN sections 28
> > +#notarget: ![supports_gnu_osabi]
> > +
> > +#...
> > + +OS/ABI: +UNIX - (GNU|FreeBSD)
> > +#...
> > +  \[..\] \.note\.Linux +NOTE +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0.*
> > +#...
> > +  \[..\] \.note\.Linux +NOTE +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AR +0.*
> > +#...
> > +  \[..\] \.note\.foo +NOTE +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +0 +.*
> > +#...
> > +  \[..\] \.note\.foo +NOTE +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +R +0 +.*
> > +#pass
> > diff --git a/gas/testsuite/gas/elf/section28.s b/gas/testsuite/gas/elf/section28.s
> > new file mode 100644
> > index 00000000000..ebcf42c2e24
> > --- /dev/null
> > +++ b/gas/testsuite/gas/elf/section28.s
> > @@ -0,0 +1,11 @@
> > +       .section        .note.Linux,"a"
> > +       .word   1
> > +
> > +       .section        .note.Linux,"aR"
> > +       .word   1
> > +
> > +       .section        .note.foo
> > +       .word   1
> > +
> > +       .section        .note.foo,"R"
> > +       .word   1
> > --
> > 2.29.2
> >
> 
> Nick, Alan,
> 
> Any comments on this patch?
> 
> -- 
> H.J.

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list