All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH u-boot 12/39] string: make memcpy() and memset() visible to fix LTO linking errors
Date: Mon, 8 Mar 2021 18:40:58 +0800	[thread overview]
Message-ID: <CAEUhbmWKGT=oT2LVuWkaxkeKf3nt3NZVRn_+qFxeGVnUR6sY-w@mail.gmail.com> (raw)
In-Reply-To: <20210308102334.tzfxbb3ubytkmq4o@pali>

On Mon, Mar 8, 2021 at 6:23 PM Pali Roh?r <pali@kernel.org> wrote:
>
> On Monday 08 March 2021 11:19:33 Marek Behun wrote:
> > On Mon, 8 Mar 2021 15:56:01 +0800
> > Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > > Hi Marek,
> > >
> > > On Sun, Mar 7, 2021 at 12:26 PM Marek Beh?n <marek.behun@nic.cz> wrote:
> > > >
> > > > It seems that sometimes (happening on ARM64, for example with
> > > > turris_mox_defconfig) GCC, when linking with LTO, changes the symbol
> > > > names of some functions, for example lib/string.c's memcpy() function to
> > > > memcpy.isra.0.
> > > >
> > > > This is a problem however when GCC for a code such as this:
> > > >         struct some_struct *info = get_some_struct();
> > > >         struct some struct tmpinfo;
> > > >         tmpinfo = *info;
> > > > emits a call to memcpy() by builtin behaviour, to copy *info to tmpinfo.
> > > > memset() can be generated sometimes as well.
> > > >
> > > > This then results in the following linking error:
> > > >   .../lz4.c:93: undefined reference to `memcpy'
> > > >   .../uuid.c:206: more undefined references to `memcpy' follow
> > > >
> > > > Make memcpy() and memset() visible by using the __used macro to avoid
> > > > this error.
> > >
> > > This sounds like a GCC bug of using -fno-builtin and -flto. Could you
> > > file a bugzilla to GCC people to get some comments?
> >
> > This is not LTO related. -fno-builtin still generates memcpy() call for
> > the following code:
> >
> > typedef struct {
> >       int a[40];
> >       char b[50];
> >       int c[60];
> > } a;
> >
> > void cp(a *d, const a *s) {
> >       *d = *s;
> > }
> >
> > when compiled with
> >   armv7a-hardfloat-linux-gnueabi-gcc -O2 -fno-builtin -ffreestanding \
> >    -nostdlib -S
> >
> > it produces code
> >
> >       push    {r4, lr}
> >       mov     ip, #4096
> >       sub     ip, sp, ip
> >       str     r0, [ip, #4088]
> >       mov     r2, #452
> >       bl      memcpy
> >       pop     {r4, pc}
> >       .size   cp, .-cp
> >
> > I don't think this is a bug. Or if it is, it is a wontfix. Just
> > implement memcpy into your code, so that gcc does not have to emit
> > shitstorms of instructions because of assignment operator :)
> >
> > Marek
>
> This is not a bug but rather a feature of gcc. Documentation for
> -nodefaultlibs and -nostdlib contains:
>
> The compiler may generate calls to "memcmp", "memset", "memcpy" and
> "memmove".  These entries are usually resolved by entries in libc.
> These entry points should be supplied through some other mechanism when
> this option is specified.

Yeah I know this. My question was why when LTO is enabled, we have to
explicitly mark these APIs as __used? I should have asked clearly, is
this a bug of LTO?

Regards,
Bin

  reply	other threads:[~2021-03-08 10:40 UTC|newest]

Thread overview: 139+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-07  4:24 [PATCH u-boot 00/39] U-Boot LTO (Sandbox + Some ARM boards) Marek Behún
2021-03-07  4:25 ` [PATCH u-boot-marvell 01/39] ddr: marvell: axp: align signature of mv_xor_mem_init() with a38x Marek Behún
2021-03-08  6:50   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot-marvell 02/39] ddr: marvell: axp: fix array types have different bounds warning Marek Behún
2021-03-08  6:41   ` Stefan Roese
2021-03-08  6:45     ` Marek Behun
2021-03-08  6:50       ` Stefan Roese
2021-03-09 13:54         ` Tom Rini
2021-03-12  8:54           ` Stefan Roese
2021-03-08  6:46     ` Marek Behun
2021-03-08  6:58       ` Stefan Roese
2021-03-08  7:04         ` Marek Behun
2021-03-08  6:50   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot-dm 03/39] regmap: fix a serious pointer casting bug Marek Behún
2021-03-08  7:10   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 04/39] api: fix a potential serious bug caused by undef CONFIG_SYS_64BIT_LBA Marek Behún
2021-03-08  7:09   ` Bin Meng
2021-03-08  7:21     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 05/39] checkpatch: require quotes around section name in the __section() macro Marek Behún
2021-03-07  4:47   ` Marek Vasut
2021-03-07  4:55     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 06/39] treewide: Convert macro and uses of __section(foo) to __section("foo") Marek Behún
2021-03-08  7:27   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 07/39] compiler.h: align the __ADDRESSABLE macro with Linux' version Marek Behún
2021-03-08  7:27   ` Bin Meng
2021-03-08  9:23     ` Marek Behun
2021-03-08 10:29       ` Bin Meng
2021-03-08 11:04         ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 08/39] linker_lists: prepare macros to avoid code repetition Marek Behún
2021-03-08  7:44   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 09/39] test/py: improve regular expression for ut subtest symbol matcher Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 10/39] linker_lists: declare lists and entries as __ADDRESSABLE for LTO Marek Behún
2021-03-08  7:44   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 11/39] binman: declare symbols externally visible Marek Behún
2021-03-07  4:59   ` Marek Behun
2021-03-08  7:47     ` Bin Meng
2021-03-08  9:26       ` Marek Behun
2021-03-08 10:31         ` Bin Meng
2021-03-08 11:07           ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 12/39] string: make memcpy() and memset() visible to fix LTO linking errors Marek Behún
2021-03-08  7:56   ` Bin Meng
2021-03-08 10:19     ` Marek Behun
2021-03-08 10:23       ` Pali Rohár
2021-03-08 10:40         ` Bin Meng [this message]
2021-03-08 10:55           ` Pali Rohár
2021-03-08 11:31             ` Marek Behun
2021-03-08 11:36             ` Marek Behun
2021-03-12 10:09             ` Marek Behun
2021-03-12 11:11               ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 13/39] efi_loader: fix warning when linking with LTO Marek Behún
2021-03-08  7:56   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 14/39] lib: crc32: make the crc_table variable non-const Marek Behún
2021-03-07  4:46   ` Marek Vasut
2021-03-07  4:58     ` Marek Behun
2021-03-07  5:02       ` Marek Vasut
2021-03-07 12:26         ` Marek Behun
2021-03-07 12:31           ` Pali Rohár
2021-03-07 12:42             ` Marek Behun
2021-03-07 12:52             ` [PATCH u-boot 14/39] lib: crc32: put the crc_table variable into efi_runtime_rodata section Marek Behún
2021-03-07 13:04               ` Marek Behun
2021-03-07 20:49                 ` Marek Behun
2021-03-08  7:01                 ` [PATCH u-boot v1.1 14.1/39] efi_loader: add macro for const EFI runtime data Marek Behún
2021-03-08  7:36                   ` Heinrich Schuchardt
2021-03-08  9:54                     ` [PATCH u-boot v1.2 14.1/39] efi_loader: add Sphinx doc for __efi_runtime and __efi_runtime_data Marek Behún
2021-03-08  9:54                     ` [PATCH u-boot v1.2 14.2/39] efi_loader: add macro for const EFI runtime data Marek Behún
2021-03-08  9:54                     ` [PATCH u-boot v1.2 14.3/39] lib: crc32: put the crc_table variable into efi_runtime_rodata section Marek Behún
2021-03-08  7:01                 ` [PATCH u-boot v1.1 14.2/39] " Marek Behún
2021-03-08  8:43                   ` Marek Vasut
2021-03-07  4:25 ` [PATCH u-boot 15/39] Makefile, Makefile.spl: cosmetic change Marek Behún
2021-03-08  9:11   ` Bin Meng
2021-03-08 10:12     ` [PATCH u-boot v1.1 " Marek Behún
2021-03-08 10:42       ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 16/39] build: use thin archives instead of incremental linking Marek Behún
2021-03-08  9:16   ` Bin Meng
2021-03-08 10:11     ` Marek Behun
2021-03-08 10:44       ` Bin Meng
2021-03-08 11:00         ` Pali Rohár
2021-03-08 11:41           ` Bin Meng
2021-03-08 11:18         ` Marek Behun
2021-03-08 11:32           ` Bin Meng
2021-03-08 11:52             ` Marek Behun
2021-03-08 13:24             ` Marek Behún
2021-03-08 14:30               ` Bin Meng
2021-03-08 15:22                 ` Marek Behún
2021-03-09  1:24                   ` Bin Meng
2021-03-09  3:42                     ` Bin Meng
2021-03-09 10:36                       ` Marek Behun
2021-03-09 13:00   ` Bin Meng
2021-03-11 12:42     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 17/39] build: support building with Link Time Optimizations Marek Behún
2021-03-09 13:30   ` Bin Meng
2021-03-11 12:45     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 18/39] build: LTO: move platform libs into --start-group list Marek Behún
2021-03-09 15:24   ` Bin Meng
2021-03-11 19:41     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 19/39] sandbox: errno: avoid conflict with libc's errno Marek Behún
2021-03-09 15:28   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 20/39] sandbox: use sections instead of symbols for getopt array boundaries Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 21/39] sandbox: make LTO available Marek Behún
2021-03-10  5:36   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 22/39] sandbox: enable LTO by default Marek Behún
2021-03-10  5:33   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 23/39] ARM: global_data: make set_gd() work for armv5 and armv6 Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 24/39] ARM: make gd a function call for LTO and set via set_gd() Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 25/39] ARM: fix LTO build for some thumb-interwork cases Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 26/39] ARM: fix LTO for imx28_xea Marek Behún
2021-03-10  5:31   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 27/39] ARM: fix LTO for apf27 Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 28/39] ARM: fix LTO for keystone Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 29/39] ARM: kona: fix clk_bsc_enable() type mismatch for LTO Marek Behún
2021-03-10  5:29   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 30/39] ARM: imx6m: fix imx_eqos_txclk_set_rate() " Marek Behún
2021-03-07  5:33   ` Sean Anderson
2021-03-07 12:13     ` Marek Behun
2021-03-10  5:27   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 31/39] ARM: fix LTO for seaboard Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 32/39] ARM: fix LTO for rockchip and samsung Marek Behún
2021-03-10  5:25   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 33/39] ARM: omap3: fix LTO for DM3730 (and possibly other omap3 boards) Marek Behún
2021-03-07 10:40   ` Adam Ford
2021-03-07  4:25 ` [PATCH u-boot 34/39] armv8: SPL: discard relocation information Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 35/39] ata: ahci: fix ahci_link_up() type mismatch for LTO Marek Behún
2021-03-10  5:23   ` Bin Meng
2021-03-07  4:25 ` [PATCH u-boot 36/39] ARM: make LTO available Marek Behún
2021-03-07  4:25 ` [PATCH u-boot 37/39] ARM: don't use -ffunction-sections/-fdata-sections with LTO build Marek Behún
2021-03-10  3:40   ` Bin Meng
2021-03-12  6:45     ` Marek Behun
2021-03-12  6:48       ` Bin Meng
2021-03-12  7:00         ` Marek Behun
2021-03-12  7:11         ` Marek Behun
2021-03-12  7:19           ` Bin Meng
2021-03-12  7:29             ` Marek Behun
2021-03-12 13:18               ` Tom Rini
2021-03-12 13:44                 ` Marek Behun
2021-03-12 13:52                   ` Tom Rini
2021-03-07  4:25 ` [PATCH u-boot 38/39] ARM: enable LTO for some boards Marek Behún
2021-03-07 16:14   ` Adam Ford
2021-03-07 20:49     ` Marek Behun
2021-03-07  4:25 ` [PATCH u-boot 39/39] DO NOT MERGE! ARM: enable LTO by default Marek Behún

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEUhbmWKGT=oT2LVuWkaxkeKf3nt3NZVRn_+qFxeGVnUR6sY-w@mail.gmail.com' \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.