arch/loongarch/Makefile | 1 - 1 file changed, 1 deletion(-)
From: WANG Xuerui <git@xen0n.name>
As explained by Nick in the original issue: the kernel usually does a
good job of providing library helpers that have similar semantics as
their ordinary userspace libc equivalents, but -ffreestanding disables
such libcall optimization and other related features in the compiler,
which can lead to unexpected things such as CONFIG_FORTIFY_SOURCE not
working (!).
As it turns out to be the case, removing the flag does not impact the
LoongArch kernel's normal operation at all; so just remove it to
restore expected libcall semantics globally on this architecture.
Closes: https://github.com/ClangBuiltLinux/linux/issues/1897
Reported-by: Nathan Chancellor <nathan@kernel.org>
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: WANG Xuerui <git@xen0n.name>
---
arch/loongarch/Makefile | 1 -
1 file changed, 1 deletion(-)
diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index b1e5db51b61c..db0d7210272d 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -83,7 +83,6 @@ KBUILD_CFLAGS_KERNEL += -fPIE
LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext
endif
-cflags-y += -ffreestanding
cflags-y += $(call cc-option, -mno-check-zero-division)
load-y = 0x9000000000200000
--
2.40.0
Hi WANG,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.5-rc4]
[cannot apply to next-20230804]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/WANG-Xuerui/LoongArch-Drop-ffreestanding-from-CFLAGS/20230804-205642
base: linus/master
patch link: https://lore.kernel.org/r/20230804125609.2054719-1-kernel%40xen0n.name
patch subject: [PATCH] LoongArch: Drop -ffreestanding from CFLAGS
config: loongarch-allmodconfig (https://download.01.org/0day-ci/archive/20230805/202308050433.0KAmYqQ2-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230805/202308050433.0KAmYqQ2-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308050433.0KAmYqQ2-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from include/linux/irqflags.h:18,
from include/linux/spinlock.h:59,
from include/linux/debugobjects.h:6,
from include/linux/timer.h:8,
from include/linux/workqueue.h:9,
from drivers/media/usb/em28xx/em28xx.h:21,
from drivers/media/usb/em28xx/em28xx-audio.c:14:
arch/loongarch/include/asm/percpu.h:20:4: error: #error compiler support for the model attribute is necessary when a recent assembler is used
20 | # error compiler support for the model attribute is necessary when a recent assembler is used
| ^~~~~
drivers/media/usb/em28xx/em28xx-audio.c: In function 'em28xx_audio_init':
>> drivers/media/usb/em28xx/em28xx-audio.c:808:29: warning: variable 'devnr' set but not used [-Wunused-but-set-variable]
808 | static int devnr;
| ^~~~~
drivers/media/usb/em28xx/em28xx-audio.c: At top level:
drivers/media/usb/em28xx/em28xx-audio.c:47:12: warning: 'index' defined but not used [-Wunused-variable]
47 | static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
| ^~~~~
vim +/devnr +808 drivers/media/usb/em28xx/em28xx-audio.c
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 801
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 802 static int em28xx_audio_init(struct em28xx *dev)
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 803 {
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 804 struct em28xx_audio *adev = &dev->adev;
c6d48134cb2682 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 805 struct usb_device *udev = interface_to_usbdev(dev->intf);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 806 struct snd_pcm *pcm;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 807 struct snd_card *card;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 @808 static int devnr;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 809 int err;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 810
c5874208ff78a5 drivers/media/usb/em28xx/em28xx-audio.c Frank Schaefer 2014-09-13 811 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) {
9f90f5371f52b4 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-03-03 812 /*
9f90f5371f52b4 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-03-03 813 * This device does not support the extension (in this case
9f90f5371f52b4 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-03-03 814 * the device is expecting the snd-usb-audio module or
9f90f5371f52b4 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-03-03 815 * doesn't have analog audio support at all)
9f90f5371f52b4 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-03-03 816 */
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 817 return 0;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 818 }
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 819
29b05e22f5c68c drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 820 dev_info(&dev->intf->dev, "Binding audio extension\n");
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 821
47677e51e2a404 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-03-05 822 kref_get(&dev->ref);
47677e51e2a404 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-03-05 823
29b05e22f5c68c drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 824 dev_info(&dev->intf->dev,
ce8591ff023ef8 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-10-20 825 "em28xx-audio.c: Copyright (C) 2006 Markus Rechberger\n");
29b05e22f5c68c drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 826 dev_info(&dev->intf->dev,
ce8591ff023ef8 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-10-20 827 "em28xx-audio.c: Copyright (C) 2007-2016 Mauro Carvalho Chehab\n");
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 828
29b05e22f5c68c drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 829 err = snd_card_new(&dev->intf->dev, index[devnr], "Em28xx Audio",
e735688875208f drivers/media/usb/em28xx/em28xx-audio.c Takashi Iwai 2014-01-29 830 THIS_MODULE, 0, &card);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 831 if (err < 0)
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 832 return err;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 833
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 834 spin_lock_init(&adev->slock);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 835 adev->sndcard = card;
c6d48134cb2682 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 836 adev->udev = udev;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 837
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 838 err = snd_pcm_new(card, "Em28xx Audio", 0, 0, 1, &pcm);
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 839 if (err < 0)
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 840 goto card_free;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 841
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 842 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_em28xx_pcm_capture);
2abb1b2daf88ee drivers/media/usb/em28xx/em28xx-audio.c Takashi Iwai 2019-12-10 843 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 844 pcm->info_flags = 0;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 845 pcm->private_data = dev;
cc1e6315e83db0 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-09-10 846 strscpy(pcm->name, "Empia 28xx Capture", sizeof(pcm->name));
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 847
cc1e6315e83db0 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-09-10 848 strscpy(card->driver, "Em28xx-Audio", sizeof(card->driver));
cc1e6315e83db0 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-09-10 849 strscpy(card->shortname, "Em28xx Audio", sizeof(card->shortname));
cc1e6315e83db0 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2018-09-10 850 strscpy(card->longname, "Empia Em28xx Audio", sizeof(card->longname));
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 851
a5c075cfd2386a drivers/media/usb/em28xx/em28xx-audio.c Frank Schaefer 2014-03-24 852 INIT_WORK(&adev->wq_trigger, audio_trigger);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 853
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 854 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 855 em28xx_cvol_new(card, dev, "Video", AC97_VIDEO);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 856 em28xx_cvol_new(card, dev, "Line In", AC97_LINE);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 857 em28xx_cvol_new(card, dev, "Phone", AC97_PHONE);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 858 em28xx_cvol_new(card, dev, "Microphone", AC97_MIC);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 859 em28xx_cvol_new(card, dev, "CD", AC97_CD);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 860 em28xx_cvol_new(card, dev, "AUX", AC97_AUX);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 861 em28xx_cvol_new(card, dev, "PCM", AC97_PCM);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 862
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 863 em28xx_cvol_new(card, dev, "Master", AC97_MASTER);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 864 em28xx_cvol_new(card, dev, "Line", AC97_HEADPHONE);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 865 em28xx_cvol_new(card, dev, "Mono", AC97_MASTER_MONO);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 866 em28xx_cvol_new(card, dev, "LFE", AC97_CENTER_LFE_MASTER);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 867 em28xx_cvol_new(card, dev, "Surround", AC97_SURROUND_MASTER);
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 868 }
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 869
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 870 err = em28xx_audio_urb_init(dev);
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 871 if (err)
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 872 goto card_free;
966f4163751b45 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 873
6d79468dd85375 drivers/media/video/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2008-01-05 874 err = snd_card_register(card);
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 875 if (err < 0)
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 876 goto urb_free;
6d79468dd85375 drivers/media/video/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2008-01-05 877
29b05e22f5c68c drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2016-12-07 878 dev_info(&dev->intf->dev, "Audio extension successfully initialized\n");
a52932b405f230 drivers/media/video/em28xx/em28xx-audio.c Markus Rechberger 2008-01-05 879 return 0;
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 880
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 881 urb_free:
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 882 em28xx_audio_free_urb(dev);
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 883
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 884 card_free:
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 885 snd_card_free(card);
452f236fcf845b drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-14 886 adev->sndcard = NULL;
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 887
0cd03a0cb20c75 drivers/media/usb/em28xx/em28xx-audio.c Mauro Carvalho Chehab 2014-01-12 888 return err;
a52932b405f230 drivers/media/video/em28xx/em28xx-audio.c Markus Rechberger 2008-01-05 889 }
a52932b405f230 drivers/media/video/em28xx/em28xx-audio.c Markus Rechberger 2008-01-05 890
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi, Xuerui, On Fri, Aug 4, 2023 at 8:56 PM WANG Xuerui <kernel@xen0n.name> wrote: > > From: WANG Xuerui <git@xen0n.name> > > As explained by Nick in the original issue: the kernel usually does a > good job of providing library helpers that have similar semantics as > their ordinary userspace libc equivalents, but -ffreestanding disables > such libcall optimization and other related features in the compiler, > which can lead to unexpected things such as CONFIG_FORTIFY_SOURCE not > working (!). > > As it turns out to be the case, removing the flag does not impact the > LoongArch kernel's normal operation at all; so just remove it to > restore expected libcall semantics globally on this architecture. > Not all processors support unaligned access, so we need the alternative mechanism to select memset/memcpy/memmove implementations. If remove -ffreestanding, the builtin implementation cannot be used on all hardware. Huacai > Closes: https://github.com/ClangBuiltLinux/linux/issues/1897 > Reported-by: Nathan Chancellor <nathan@kernel.org> > Suggested-by: Nick Desaulniers <ndesaulniers@google.com> > Signed-off-by: WANG Xuerui <git@xen0n.name> > --- > arch/loongarch/Makefile | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile > index b1e5db51b61c..db0d7210272d 100644 > --- a/arch/loongarch/Makefile > +++ b/arch/loongarch/Makefile > @@ -83,7 +83,6 @@ KBUILD_CFLAGS_KERNEL += -fPIE > LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext > endif > > -cflags-y += -ffreestanding > cflags-y += $(call cc-option, -mno-check-zero-division) > > load-y = 0x9000000000200000 > -- > 2.40.0 >
On Fri, Aug 4, 2023 at 8:26 AM Huacai Chen <chenhuacai@kernel.org> wrote: > > Hi, Xuerui, > > On Fri, Aug 4, 2023 at 8:56 PM WANG Xuerui <kernel@xen0n.name> wrote: > > > > From: WANG Xuerui <git@xen0n.name> > > > > As explained by Nick in the original issue: the kernel usually does a > > good job of providing library helpers that have similar semantics as > > their ordinary userspace libc equivalents, but -ffreestanding disables > > such libcall optimization and other related features in the compiler, > > which can lead to unexpected things such as CONFIG_FORTIFY_SOURCE not > > working (!). > > > > As it turns out to be the case, removing the flag does not impact the > > LoongArch kernel's normal operation at all; so just remove it to > > restore expected libcall semantics globally on this architecture. > > > Not all processors support unaligned access, so we need the > alternative mechanism to select memset/memcpy/memmove implementations. > If remove -ffreestanding, the builtin implementation cannot be used on > all hardware. That sounds like a compiler bug in that compiler's implementation of string.h builtins then; it should default to the safest implementation (aligned accesses) until instructed otherwise. Have you filed a bug against your compiler vendor for which compiler you observe that behavior from? At the very least, there should be a comment above the addition of -ffreestanding justifying why it's being used, probably with a link to the above bug report. I would expect either -mcpu or perhaps some other -m flag to guide the compiler when it is safe to emit memcpy (and friends) in terms of unaligned access or not. > > Huacai > > > Closes: https://github.com/ClangBuiltLinux/linux/issues/1897 > > Reported-by: Nathan Chancellor <nathan@kernel.org> > > Suggested-by: Nick Desaulniers <ndesaulniers@google.com> > > Signed-off-by: WANG Xuerui <git@xen0n.name> > > --- > > arch/loongarch/Makefile | 1 - > > 1 file changed, 1 deletion(-) > > > > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile > > index b1e5db51b61c..db0d7210272d 100644 > > --- a/arch/loongarch/Makefile > > +++ b/arch/loongarch/Makefile > > @@ -83,7 +83,6 @@ KBUILD_CFLAGS_KERNEL += -fPIE > > LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext > > endif > > > > -cflags-y += -ffreestanding > > cflags-y += $(call cc-option, -mno-check-zero-division) > > > > load-y = 0x9000000000200000 > > -- > > 2.40.0 > > > -- Thanks, ~Nick Desaulniers
On Fri, 2023-08-04 at 08:46 -0700, Nick Desaulniers wrote:
> > Not all processors support unaligned access, so we need the
> > alternative mechanism to select memset/memcpy/memmove implementations.
> > If remove -ffreestanding, the builtin implementation cannot be used on
> > all hardware.
>
> That sounds like a compiler bug in that compiler's implementation of
> string.h builtins then; it should default to the safest implementation
> (aligned accesses) until instructed otherwise. Have you filed a bug
> against your compiler vendor for which compiler you observe that
> behavior from?
AFAIK there is no such bug in GCC.
But GCC indeed has a bug about builtin expansion: it generates really
stupid code for __builtin_memcpy and friends. See
https://gcc.gnu.org/PR109465. The bug is fixed for GCC 14, but GCC 14
won't be released soon.
> At the very least, there should be a comment above the addition of
> -ffreestanding justifying why it's being used, probably with a link to
> the above bug report.
>
> I would expect either -mcpu or perhaps some other -m flag to guide the
> compiler when it is safe to emit memcpy (and friends) in terms of
> unaligned access or not.
It's controlled by -m{no-,}strict-align. LoongArch kernel defaults to -
mstrict-align, with this the compiler should not generate unaligned
access. -mno-strict-align is hidden behind CONFIG_EXPERT (FWIW I
personally dislike the decision to hide it).
--
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University
On Fri, Aug 4, 2023 at 8:56 AM Xi Ruoyao <xry111@xry111.site> wrote:
>
> On Fri, 2023-08-04 at 08:46 -0700, Nick Desaulniers wrote:
> > > Not all processors support unaligned access, so we need the
> > > alternative mechanism to select memset/memcpy/memmove implementations.
> > > If remove -ffreestanding, the builtin implementation cannot be used on
> > > all hardware.
> >
> > That sounds like a compiler bug in that compiler's implementation of
> > string.h builtins then; it should default to the safest implementation
> > (aligned accesses) until instructed otherwise. Have you filed a bug
> > against your compiler vendor for which compiler you observe that
> > behavior from?
>
> AFAIK there is no such bug in GCC.
>
> But GCC indeed has a bug about builtin expansion: it generates really
> stupid code for __builtin_memcpy and friends. See
> https://gcc.gnu.org/PR109465. The bug is fixed for GCC 14, but GCC 14
> won't be released soon.
Perhaps -fno-builtin-* flags may be of help here, and more precise an
incision than the blunt -ffreestanding.
>
> > At the very least, there should be a comment above the addition of
> > -ffreestanding justifying why it's being used, probably with a link to
> > the above bug report.
> >
> > I would expect either -mcpu or perhaps some other -m flag to guide the
> > compiler when it is safe to emit memcpy (and friends) in terms of
> > unaligned access or not.
>
> It's controlled by -m{no-,}strict-align. LoongArch kernel defaults to -
> mstrict-align, with this the compiler should not generate unaligned
> access. -mno-strict-align is hidden behind CONFIG_EXPERT (FWIW I
> personally dislike the decision to hide it).
If GCC generates unaligned accesses in its implementation of
__builtin_memcpy when -mstrict-align is set, then that is a bug in GCC
and should be reported.
Clang users should not have to pay for such mistakes.
>
> --
> Xi Ruoyao <xry111@xry111.site>
> School of Aerospace Science and Technology, Xidian University
--
Thanks,
~Nick Desaulniers
© 2016 - 2026 Red Hat, Inc.