public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [PATCH] Do not emit __gnu_lto_v1 symbol.
@ 2019-07-29 14:03 Georg-Johann Lay
  2019-07-30  8:07 ` Martin Liška
  0 siblings, 1 reply; 5+ messages in thread
From: Georg-Johann Lay @ 2019-07-29 14:03 UTC (permalink / raw)
  To: GCC Patches; +Cc: Martin Liska

Hi Martin.

In SVN r273662 you changed a comment in avr.c from __gnu_lto_v1 to 
__gnu_lto_slim without changing the relevant code:

   /* __gnu_lto_slim is just a marker for the linker injected by toplev.c.
      There is no need to trigger __do_clear_bss code for them.  */

   if (!STR_PREFIX_P (name, "__gnu_lto"))
     avr_need_clear_bss_p = true;

This means that just defining symbol __gnu_lto_slim will trigger code 
from libgcc (code to clear .bss, which is supposed to be conditional 
depending on whether .bss actually contains anything).

Would you also adjust that test?

Thanks,

Johann

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Do not emit __gnu_lto_v1 symbol.
  2019-07-29 14:03 [PATCH] Do not emit __gnu_lto_v1 symbol Georg-Johann Lay
@ 2019-07-30  8:07 ` Martin Liška
  2019-07-31 14:15   ` Georg-Johann Lay
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Liška @ 2019-07-30  8:07 UTC (permalink / raw)
  To: Georg-Johann Lay, GCC Patches

On 7/29/19 3:46 PM, Georg-Johann Lay wrote:
> Hi Martin.
> 
> In SVN r273662 you changed a comment in avr.c from __gnu_lto_v1 to __gnu_lto_slim without changing the relevant code:

Yes.

> 
>   /* __gnu_lto_slim is just a marker for the linker injected by toplev.c.
>      There is no need to trigger __do_clear_bss code for them.  */
> 
>   if (!STR_PREFIX_P (name, "__gnu_lto"))
>     avr_need_clear_bss_p = true;

Because now, the only symbol that starts with __gnu_lto is __gnu_lto_slim. That's why I adjusted
the comment only to reflect reality.

> 
> This means that just defining symbol __gnu_lto_slim will trigger code from libgcc (code to clear .bss, which is supposed to be conditional depending on whether .bss actually contains anything).
> 
> Would you also adjust that test?
> 
> Thanks,
> 
> Johann
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Do not emit __gnu_lto_v1 symbol.
  2019-07-30  8:07 ` Martin Liška
@ 2019-07-31 14:15   ` Georg-Johann Lay
  0 siblings, 0 replies; 5+ messages in thread
From: Georg-Johann Lay @ 2019-07-31 14:15 UTC (permalink / raw)
  To: Martin Liška; +Cc: GCC Patches

Martin Liška schrieb:
> On 7/29/19 3:46 PM, Georg-Johann Lay wrote:
>> Hi Martin.
>>
>> In SVN r273662 you changed a comment in avr.c from __gnu_lto_v1 to __gnu_lto_slim without changing the relevant code:
> 
> Yes.
> 
>>   /* __gnu_lto_slim is just a marker for the linker injected by toplev.c.
>>      There is no need to trigger __do_clear_bss code for them.  */
>>
>>   if (!STR_PREFIX_P (name, "__gnu_lto"))
>>     avr_need_clear_bss_p = true;
> 
> Because now, the only symbol that starts with __gnu_lto is __gnu_lto_slim. That's why I adjusted
> the comment only to reflect reality.

Oops, sorry for the noise.  Must have had a glitch in my eyes...

Johann

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Do not emit __gnu_lto_v1 symbol.
  2019-07-15 13:47 Martin Liška
@ 2019-07-21 20:06 ` Jeff Law
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff Law @ 2019-07-21 20:06 UTC (permalink / raw)
  To: Martin Liška, gcc-patches; +Cc: Richard Biener

On 7/15/19 7:30 AM, Martin Liška wrote:
> Hi.
> 
> The patch is about removal of the emission of __gnu_lto_v1.
> The symbol should not be needed any longer for GCC driver.
> 
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> 
> Ready to be installed?
> Thanks,
> Martin
> 
> gcc/ChangeLog:
> 
> 2019-07-15  Martin Liska  <mliska@suse.cz>
> 
> 	* config/avr/avr.c (avr_asm_output_aligned_decl_common): Update
> 	comment.
> 	* toplev.c (compile_file): Do not emit __gnu_lto_v1 symbol.
> 
> libgcc/ChangeLog:
> 
> 2019-07-15  Martin Liska  <mliska@suse.cz>
> 
> 	* config/pa/stublib.c: Remove stub symbol __gnu_lto_v1.
> 	* config/pa/t-stublib: Likewise.
> 
> libiberty/ChangeLog:
> 
> 2019-07-15  Martin Liska  <mliska@suse.cz>
> 
> 	* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
> 	Do not search for gnu_lto_v1, but search for first '\0'.
OK.
jeff

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] Do not emit __gnu_lto_v1 symbol.
@ 2019-07-15 13:47 Martin Liška
  2019-07-21 20:06 ` Jeff Law
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Liška @ 2019-07-15 13:47 UTC (permalink / raw)
  To: gcc-patches; +Cc: Richard Biener

[-- Attachment #1: Type: text/plain, Size: 1079 bytes --]

Hi.

The patch is about removal of the emission of __gnu_lto_v1.
The symbol should not be needed any longer for GCC driver.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2019-07-15  Martin Liska  <mliska@suse.cz>

	* config/avr/avr.c (avr_asm_output_aligned_decl_common): Update
	comment.
	* toplev.c (compile_file): Do not emit __gnu_lto_v1 symbol.

libgcc/ChangeLog:

2019-07-15  Martin Liska  <mliska@suse.cz>

	* config/pa/stublib.c: Remove stub symbol __gnu_lto_v1.
	* config/pa/t-stublib: Likewise.

libiberty/ChangeLog:

2019-07-15  Martin Liska  <mliska@suse.cz>

	* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
	Do not search for gnu_lto_v1, but search for first '\0'.
---
 gcc/config/avr/avr.c          |  2 +-
 gcc/toplev.c                  | 21 ---------------------
 libgcc/config/pa/stublib.c    |  4 ----
 libgcc/config/pa/t-stublib    |  6 +-----
 libiberty/simple-object-elf.c | 23 ++++++++---------------
 5 files changed, 10 insertions(+), 46 deletions(-)



[-- Attachment #2: 0001-Do-not-emit-__gnu_lto_v1-symbol.patch --]
[-- Type: text/x-patch, Size: 4783 bytes --]

diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index b97faafdc3b..760e9371a01 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -10163,7 +10163,7 @@ avr_asm_output_aligned_decl_common (FILE * stream,
       return;
     }
 
-  /* __gnu_lto_v1 etc. are just markers for the linker injected by toplev.c.
+  /* __gnu_lto_slim is just a marker for the linker injected by toplev.c.
      There is no need to trigger __do_clear_bss code for them.  */
 
   if (!STR_PREFIX_P (name, "__gnu_lto"))
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 2567fe2e697..56ef63e5adb 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -543,27 +543,6 @@ compile_file (void)
       process_pending_assemble_externals ();
    }
 
-  /* Emit LTO marker if LTO info has been previously emitted.  This is
-     used by collect2 to determine whether an object file contains IL.
-     We used to emit an undefined reference here, but this produces
-     link errors if an object file with IL is stored into a shared
-     library without invoking lto1.  */
-  if (flag_generate_lto || flag_generate_offload)
-    {
-#if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
-      ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE,
-				      "__gnu_lto_v1",
-				      HOST_WIDE_INT_1U, 8);
-#elif defined ASM_OUTPUT_ALIGNED_COMMON
-      ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_v1",
-				 HOST_WIDE_INT_1U, 8);
-#else
-      ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_v1",
-			 HOST_WIDE_INT_1U,
-			 HOST_WIDE_INT_1U);
-#endif
-    }
-
   /* Let linker plugin know that this is a slim object and must be LTOed
      even when user did not ask for it.  */
   if (flag_generate_lto && !flag_fat_lto_objects)
diff --git a/libgcc/config/pa/stublib.c b/libgcc/config/pa/stublib.c
index b47afe15511..7e79dbfd6c9 100644
--- a/libgcc/config/pa/stublib.c
+++ b/libgcc/config/pa/stublib.c
@@ -115,7 +115,3 @@ pthread_once (void)
   return 0;
 }
 #endif
-
-#ifdef L_gnu_lto_v1
-char gnu_lto_v1;
-#endif
diff --git a/libgcc/config/pa/t-stublib b/libgcc/config/pa/t-stublib
index 0a6223d952e..8004c1e46a7 100644
--- a/libgcc/config/pa/t-stublib
+++ b/libgcc/config/pa/t-stublib
@@ -3,8 +3,7 @@ LIBGCCSTUB_OBJS = rfi-stub.o dfi-stub.o ritm-stub.o ditm-stub.o \
 	pthread_default_stacksize_np-stub.o \
 	pthread_mutex_lock-stub.o \
 	pthread_mutex_unlock-stub.o \
-	pthread_once-stub.o \
-	gnu_lto_v1-stub.o
+	pthread_once-stub.o
 
 rfi-stub.o: $(srcdir)/config/pa/stublib.c
 	$(gcc_compile) -c -O2 -DL_register_frame_info $<
@@ -36,9 +35,6 @@ pthread_mutex_unlock-stub.o: $(srcdir)/config/pa/stublib.c
 pthread_once-stub.o: $(srcdir)/config/pa/stublib.c
 	$(gcc_compile) -c -O2 -DL_pthread_once $<
 
-gnu_lto_v1-stub.o: $(srcdir)/config/pa/stublib.c
-	$(gcc_compile) -c -O2 -DL_gnu_lto_v1 $<
-
 libgcc_stub.a: $(LIBGCCSTUB_OBJS)
 	-rm -rf $@
 	$(AR) rc $@ $(LIBGCCSTUB_OBJS)
diff --git a/libiberty/simple-object-elf.c b/libiberty/simple-object-elf.c
index 22c9ae7ed2d..502388991a0 100644
--- a/libiberty/simple-object-elf.c
+++ b/libiberty/simple-object-elf.c
@@ -1358,9 +1358,8 @@ simple_object_elf_copy_lto_debug_sections (simple_object_read *sobj,
 	  return errmsg;
 	}
 
-      /* If we are processing .symtab purge __gnu_lto_v1 and
-	 __gnu_lto_slim symbols from it and any symbols in discarded
-	 sections.  */
+      /* If we are processing .symtab purge __gnu_lto_slim symbol
+	 from it and any symbols in discarded sections.  */
       if (sh_type == SHT_SYMTAB)
 	{
 	  unsigned entsize = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
@@ -1380,14 +1379,9 @@ simple_object_elf_copy_lto_debug_sections (simple_object_read *sobj,
 				       sobj->offset + stroff,
 				       (unsigned char *)strings,
 				       strsz, &errmsg, err);
-	  /* Find gnu_lto_ in strings.  */
-	  while ((gnu_lto = (char *) memchr (gnu_lto, 'g',
-					     strings + strsz - gnu_lto)))
-	    if (strncmp (gnu_lto, "gnu_lto_v1",
-			 strings + strsz - gnu_lto) == 0)
-	      break;
-	    else
-	      gnu_lto++;
+	  /* Find first '\0' in strings.  */
+	  gnu_lto = (char *) memchr (gnu_lto, '\0',
+				     strings + strsz - gnu_lto + 1);
 	  /* Read the section index table if present.  */
 	  if (symtab_indices_shndx[i - 1] != 0)
 	    {
@@ -1461,10 +1455,9 @@ simple_object_elf_copy_lto_debug_sections (simple_object_read *sobj,
 			 undefined and sharing the gnu_lto_ name.  */
 		      bind = STB_WEAK;
 		      other = STV_HIDDEN;
-		      if (gnu_lto)
-			ELF_SET_FIELD (type_functions, ei_class, Sym,
-				       ent, st_name, Elf_Word,
-				       gnu_lto - strings);
+		      ELF_SET_FIELD (type_functions, ei_class, Sym,
+				     ent, st_name, Elf_Word,
+				     gnu_lto - strings);
 		      ELF_SET_FIELD (type_functions, ei_class, Sym,
 				     ent, st_shndx, Elf_Half, SHN_UNDEF);
 		    }


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-07-31 13:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29 14:03 [PATCH] Do not emit __gnu_lto_v1 symbol Georg-Johann Lay
2019-07-30  8:07 ` Martin Liška
2019-07-31 14:15   ` Georg-Johann Lay
  -- strict thread matches above, loose matches on Subject: below --
2019-07-15 13:47 Martin Liška
2019-07-21 20:06 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).