Bug 29576 - librtld.os: in function `_dl_start_profile': (.text+0x9444): undefined reference to `strcpy'
Summary: librtld.os: in function `_dl_start_profile': (.text+0x9444): undefined refere...
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: build (show other bugs)
Version: 2.36
: P2 normal
Target Milestone: 2.37
Assignee: Adhemerval Zanella
URL:
Keywords:
: 29938 (view as bug list)
Depends on:
Blocks:
 
Reported: 2022-09-16 15:39 UTC by Tomas Kolda
Modified: 2022-12-29 13:00 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tomas Kolda 2022-09-16 15:39:46 UTC
When building glibc 2.36 I started to see "undefined reference to `strcpy'".

This was working for 2.36. I have found similar issue #29454 that have fixed one problem of strcpy. Second one is still there. I have tried very latest 2.36 commit in release branch with same result (I have seen patch was backborted there to fix one of strcpy issues).

I even replaced strcpy wiht stpccy in sprof.c (only place with strcpy withing elf directory), but did not help. Anyone any idea what can be done?


mv -f /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/rtld-libc.aT /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/rtld-libc.a
make[3]: Leaving directory '/home/abuild/aports/main/glibc/src/glibc-2.36/elf'
gcc -Wl,--as-needed,-O1,--sort-common  -nostdlib -nostartfiles -r -o /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/librtld.os '-Wl,-(' /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/dl-allobjs.os /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/rtld-libc.a -lgcc '-Wl,-)' \
          -Wl,-Map,/home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/librtld.os.map
gcc -Wl,--as-needed,-O1,--sort-common  -nostdlib -nostartfiles -shared -o /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/ld.so.new
\
          -Wl,-z,relro -Wl,-z,defs -Wl,-z,now   \
          -Wl,-z,pack-relative-relocs \
          /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/librtld.os -Wl,--version-script=/home/abuild/aports/main/glibc/src/glibc-2.36/build/ld.map
\
          -Wl,-soname=ld-linux-x86-64.so.2
/usr/lib/gcc/x86_64-alpine-linux-gnu/11.2.1/../../../../x86_64-alpine-linux-gnu/bin/ld: /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/librtld.os: in function `_dl_start_profile':
(.text+0x9444): undefined reference to `strcpy'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:1346: /home/abuild/aports/main/glibc/src/glibc-2.36/build/elf/ld.so] Error 1
make[2]: Leaving directory '/home/abuild/aports/main/glibc/src/glibc-2.36/elf'
make[1]: *** [Makefile:484: elf/subdir_lib] Error 2
make[1]: Leaving directory '/home/abuild/aports/main/glibc/src/glibc-2.36'
Comment 1 Tomas Kolda 2022-09-16 15:41:59 UTC
Sorry I meant to say "This was working for 2.35 ...."

GCC used is 11.2.1_git20220219
Comment 2 Carlos O'Donell 2022-09-17 15:35:29 UTC
(In reply to Tomas Kolda from comment #0)
> When building glibc 2.36 I started to see "undefined reference to `strcpy'".

How are you building this glibc?

It looks like you might be using -Os or other instead of -O2, which is required to build all of glibc and avoid external library calls in certain parts of the loader (where we can't have relocations or external library calls).
Comment 3 Tomas Kolda 2022-09-19 06:44:44 UTC
"-Os or other instead of -O2" - You are absolutely right. I am using Alpine abuild that has default "-Os". I am not sure why it worked for 2.35.

Anyway, thank you so much for the hint. It resolved the problem.
Comment 4 Tomas Kolda 2022-09-19 06:46:57 UTC
Not a bug. I have set CFLAGS, CPPFLAGS, CXXFLAGX to use -O2 instead of -Os.
Comment 5 Adhemerval Zanella 2022-09-19 14:07:51 UTC
(In reply to Tomas Kolda from comment #4)
> Not a bug. I have set CFLAGS, CPPFLAGS, CXXFLAGX to use -O2 instead of -Os.

Ideally, we should support -Os as well. I think we should add a patch similar to the one to avoid libcalls [1] also to fix the possible strcpy call.

[1] https://patchwork.sourceware.org/project/glibc/patch/20220811121909.4110665-1-adhemerval.zanella@linaro.org/
Comment 6 Carlos O'Donell 2022-09-19 18:09:10 UTC
(In reply to Adhemerval Zanella from comment #5)
> (In reply to Tomas Kolda from comment #4)
> > Not a bug. I have set CFLAGS, CPPFLAGS, CXXFLAGX to use -O2 instead of -Os.
> 
> Ideally, we should support -Os as well. I think we should add a patch
> similar to the one to avoid libcalls [1] also to fix the possible strcpy
> call.
> 
> [1]
> https://patchwork.sourceware.org/project/glibc/patch/20220811121909.4110665-
> 1-adhemerval.zanella@linaro.org/

I agree. If we get this clean I'll talk to DJ about cloning the CI builder and test with -Os for pre-commit CI.
Comment 7 romain.naour 2022-10-09 14:55:24 UTC
Hello,

(In reply to Adhemerval Zanella from comment #5)
> (In reply to Tomas Kolda from comment #4)
> > Not a bug. I have set CFLAGS, CPPFLAGS, CXXFLAGX to use -O2 instead of -Os.
> 
> Ideally, we should support -Os as well. I think we should add a patch
> similar to the one to avoid libcalls [1] also to fix the possible strcpy
> call.
> 
> [1]
> https://patchwork.sourceware.org/project/glibc/patch/20220811121909.4110665-
> 1-adhemerval.zanella@linaro.org/

We noticed this issue in the Buildroot gitlab-ci using glibc 2.36-44-g2628500f5dff1dd99c49a09b418b3b1ea3a6b5d3 [1].

Backporting the patch [2] allows to fix the issue.

[1] https://gitlab.com/buildroot.org/buildroot/-/jobs/3134229956
[2] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=9dc4e29f630c6ef8299120b275e503321dc0c8c7

Best regards,
Romain
Comment 8 Adhemerval Zanella 2022-12-29 13:00:26 UTC
*** Bug 29938 has been marked as a duplicate of this bug. ***