Disable symbol hack in libc_nonshared.a

Message ID 20210924164131.2326532-1-hjl.tools@gmail.com
State Committed
Commit b0a33dc967f98cca4b480434d1eec9cf41c61154
Headers
Series Disable symbol hack in libc_nonshared.a |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

H.J. Lu Sept. 24, 2021, 4:41 p.m. UTC
  Don't reference __GI_memmove, __GI_memset, __GI_memcpy, __divdi3_internal,
__udivdi3_internal and __moddi3_internal in libc_nonshared.a.
---
 sysdeps/generic/symbol-hacks.h            | 3 ++-
 sysdeps/wordsize-32/divdi3-symbol-hacks.h | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)
  

Comments

Florian Weimer Sept. 27, 2021, 1:30 p.m. UTC | #1
* H. J. Lu via Libc-alpha:

> Don't reference __GI_memmove, __GI_memset, __GI_memcpy, __divdi3_internal,
> __udivdi3_internal and __moddi3_internal in libc_nonshared.a.

Patch looks correct me.  Commit subject should say “lib*_nonshared.a”
(it's not restricted to libc, despite the macro name).

Thanks,
Florian
  
H.J. Lu Sept. 27, 2021, 2:44 p.m. UTC | #2
On Mon, Sep 27, 2021 at 6:30 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * H. J. Lu via Libc-alpha:
>
> > Don't reference __GI_memmove, __GI_memset, __GI_memcpy, __divdi3_internal,
> > __udivdi3_internal and __moddi3_internal in libc_nonshared.a.
>
> Patch looks correct me.  Commit subject should say “lib*_nonshared.a”
> (it's not restricted to libc, despite the macro name).

The symbol hack only applies to libc:

diff --git a/sysdeps/generic/symbol-hacks.h b/sysdeps/generic/symbol-hacks.h
index 3586e6ed38..1115e4c0a7 100644
--- a/sysdeps/generic/symbol-hacks.h
+++ b/sysdeps/generic/symbol-hacks.h
@@ -1,6 +1,7 @@
 /* Some compiler optimizations may transform loops into memset/memmove
    calls and without proper declaration it may generate PLT calls.  */
-#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED
                                                         ^^^^^^^^^^^
+#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED \
+    && !defined LIBC_NONSHARED
 asm ("memmove = __GI_memmove");
 asm ("memset = __GI_memset");
 asm ("memcpy = __GI_memcpy");

and

diff --git a/sysdeps/wordsize-32/divdi3-symbol-hacks.h
b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
index 3e7c54bd0c..efbb0cce8b 100644
--- a/sysdeps/wordsize-32/divdi3-symbol-hacks.h
+++ b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
@@ -23,7 +23,8 @@
    assembler.
    Note: in_divdi3_c is only used to avoid symbol alias on divdi3
    build itself.  */
-#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) &&
defined SHARED

                        ^^^^^^^^^^^
+#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) \
+    && defined SHARED && !defined LIBC_NONSHARED

I am checking in my patch ASIS.

Thanks.
  
Florian Weimer Sept. 27, 2021, 2:48 p.m. UTC | #3
* H. J. Lu:

> On Mon, Sep 27, 2021 at 6:30 AM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * H. J. Lu via Libc-alpha:
>>
>> > Don't reference __GI_memmove, __GI_memset, __GI_memcpy, __divdi3_internal,
>> > __udivdi3_internal and __moddi3_internal in libc_nonshared.a.
>>
>> Patch looks correct me.  Commit subject should say “lib*_nonshared.a”
>> (it's not restricted to libc, despite the macro name).
>
> The symbol hack only applies to libc:

> I am checking in my patch ASIS.

Yes, you are right.  Thanks.

Florian
  

Patch

diff --git a/sysdeps/generic/symbol-hacks.h b/sysdeps/generic/symbol-hacks.h
index 3586e6ed38..1115e4c0a7 100644
--- a/sysdeps/generic/symbol-hacks.h
+++ b/sysdeps/generic/symbol-hacks.h
@@ -1,6 +1,7 @@ 
 /* Some compiler optimizations may transform loops into memset/memmove
    calls and without proper declaration it may generate PLT calls.  */
-#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED
+#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED \
+    && !defined LIBC_NONSHARED
 asm ("memmove = __GI_memmove");
 asm ("memset = __GI_memset");
 asm ("memcpy = __GI_memcpy");
diff --git a/sysdeps/wordsize-32/divdi3-symbol-hacks.h b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
index 3e7c54bd0c..efbb0cce8b 100644
--- a/sysdeps/wordsize-32/divdi3-symbol-hacks.h
+++ b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
@@ -23,7 +23,8 @@ 
    assembler.
    Note: in_divdi3_c is only used to avoid symbol alias on divdi3
    build itself.  */
-#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
+#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) \
+    && defined SHARED && !defined LIBC_NONSHARED
 asm ("__divdi3 = __divdi3_internal");
 asm ("__udivdi3 = __udivdi3_internal");
 asm ("__moddi3 = __moddi3_internal");