On Fri, Nov 6, 2020 at 3:22 PM Jeff Law <l...@redhat.com> wrote:
>
>
> On 11/5/20 7:34 AM, H.J. Lu via Gcc-patches wrote:
> > On Thu, Nov 5, 2020 at 3:37 AM Jozef Lawrynowicz
> > <joze...@mittosystems.com> wrote:
> >> On Thu, Nov 05, 2020 at 06:21:21AM -0500, Hans-Peter Nilsson wrote:
> >>> On Wed, 4 Nov 2020, H.J. Lu wrote:
> >>>> .retain is ill-defined.   For example,
> >>>>
> >>>> [hjl@gnu-cfl-2 gcc]$ cat /tmp/x.c
> >>>> static int xyzzy __attribute__((__used__));
> >>>> [hjl@gnu-cfl-2 gcc]$ ./xgcc -B./ -S /tmp/x.c -fcommon
> >>>> [hjl@gnu-cfl-2 gcc]$ cat x.s
> >>>> .file "x.c"
> >>>> .text
> >>>> .retain xyzzy  <<<<<<<<< What does it do?
> >>>> .local xyzzy
> >>>> .comm xyzzy,4,4
> >>>> .ident "GCC: (GNU) 11.0.0 20201103 (experimental)"
> >>>> .section .note.GNU-stack,"",@progbits
> >>>> [hjl@gnu-cfl-2 gcc]$
> >>> To answer that question: it's up to the assembler, but for ELF
> >>> and SHF_GNU_RETAIN, it seems obvious it'd tell the assembler to
> >>> set SHF_GNU_RETAIN for the section where the symbol ends up.
> >>> We both know this isn't rocket science with binutils.
> >> Indeed, and my patch handles it trivially:
> >> https://sourceware.org/pipermail/binutils/2020-November/113993.html
> >>
> >>   +void
> >>   +obj_elf_retain (int arg ATTRIBUTE_UNUSED)
> >>   .... snip ....
> >>   +  sym = get_sym_from_input_line_and_check ();
> >>   +  symbol_get_obj (sym)->retain = 1;
> >>
> >>   @@ -2624,6 +2704,9 @@ elf_frob_symbol (symbolS *symp, int *puntp)
> >>     }
> >>        }
> >>
> >>   +  if (symbol_get_obj (symp)->retain)
> >>   +    elf_section_flags (S_GET_SEGMENT (symp)) |= SHF_GNU_RETAIN;
> >>   +
> >>      /* Double check weak symbols.  */
> >>      if (S_IS_WEAK (symp))
> >>        {
> >>
> >> We could check that the symbol named in the .retain directive has
> >> already been defined, however this isn't compatible with GCC
> >> mark_decl_preserved handling, since mark_decl_preserved is called
> >> emitted before the local symbols are defined in the assembly output
> >> file.
> >>
> >> GAS should at least validate that the symbol named in the .retain
> >> directive does end up as a symbol though.
> >>
> > Don't add .retain.
>
> Why?  I don't see why you find it so objectionable.
>

An ELF symbol directive should operate on symbol table:

http://www.sco.com/developers/gabi/latest/ch4.symtab.html

not the section flags where the symbol is defined.

-- 
H.J.

Reply via email to