From: Adrian Bunk <bunk@stusta.de>
To: linux-kernel@vger.kernel.org
Cc: Roman Zippel <zippel@linux-m68k.org>, Andi Kleen <ak@suse.de>
Subject: [2.6 patch] re-add -ffreestanding
Date: Mon, 21 Aug 2006 23:21:54 +0200 [thread overview]
Message-ID: <20060821212154.GO11651@stusta.de> (raw)
I got the following compile error with gcc 4.1.1 when trying to compile
kernel 2.6.18-rc4-mm2 for m68k:
<-- snip -->
...
LD .tmp_vmlinux1
arch/m68k/amiga/built-in.o: In function `amiga_get_hardware_list':
config.c:(.text+0x882): undefined reference to `strcpy'
kernel/built-in.o: In function `prof_cpu_mask_read_proc':
profile.c:(.text+0x41ac): undefined reference to `strcpy'
kernel/built-in.o: In function `sysfs_show_available_clocksources':
clocksource.c:(.text+0x1434e): undefined reference to `strcpy'
kernel/built-in.o: In function `sysfs_show_current_clocksources':
clocksource.c:(.text+0x143a4): undefined reference to `strcpy'
fs/built-in.o: In function `lock_get_status':
locks.c:(.text+0x1198a): undefined reference to `strcpy'
fs/built-in.o:locks.c:(.text+0x119ae): more undefined references to `strcpy' follow
make[1]: *** [.tmp_vmlinux1] Error 1
<-- snip -->
The Linux kernel is a freestanding environment, not a hosted one
providing a full standard C library gcc can consider being present.
The fact that -ffreestanding had already been re-added on three
architectures also reflects this fact.
If we want to use a all or subset of the gcc builtins on some or all
architectures, we should make this explicitely through #define's.
This patch therefore reverts commit
6edfba1b33c701108717f4e036320fc39abe1912 and re-adds -ffreestanding to
the CFLAGS.
Signed-off-by: Adrian Bunk <bunk@stusta.de>
---
Makefile | 3 ++-
arch/i386/Makefile | 3 ---
arch/mips/Makefile | 2 --
arch/um/Makefile-i386 | 4 ----
include/asm-x86_64/string.h | 17 ++++++++++++++---
5 files changed, 16 insertions(+), 13 deletions(-)
--- linux-2.6.18-rc4-mm2/Makefile.old 2006-08-21 20:28:30.000000000 +0200
+++ linux-2.6.18-rc4-mm2/Makefile 2006-08-21 20:40:15.000000000 +0200
@@ -308,7 +308,8 @@
CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
- -fno-strict-aliasing -fno-common
+ -fno-strict-aliasing -fno-common \
+ -ffreestanding
# Force gcc to behave correct even for buggy distributions
CFLAGS += $(call cc-option, -fno-stack-protector)
--- linux-2.6.18-rc4-mm2/arch/i386/Makefile.old 2006-08-21 20:40:26.000000000 +0200
+++ linux-2.6.18-rc4-mm2/arch/i386/Makefile 2006-08-21 20:40:33.000000000 +0200
@@ -39,9 +39,6 @@
cflags-$(CONFIG_REGPARM) += -mregparm=3
-# temporary until string.h is fixed
-cflags-y += -ffreestanding
-
# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
# a lot more stack due to the lack of sharing of stacklots:
CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
--- linux-2.6.18-rc4-mm2/arch/mips/Makefile.old 2006-08-21 20:40:40.000000000 +0200
+++ linux-2.6.18-rc4-mm2/arch/mips/Makefile 2006-08-21 20:40:48.000000000 +0200
@@ -83,8 +83,6 @@
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
MODFLAGS += -mlong-calls
-cflags-y += -ffreestanding
-
#
# We explicitly add the endianness specifier if needed, this allows
# to compile kernels with a toolchain for the other endianness. We
--- linux-2.6.18-rc4-mm2/arch/um/Makefile-i386.old 2006-08-21 20:40:56.000000000 +0200
+++ linux-2.6.18-rc4-mm2/arch/um/Makefile-i386 2006-08-21 20:41:09.000000000 +0200
@@ -33,9 +33,5 @@
# prevent gcc from keeping the stack 16 byte aligned. Taken from i386.
cflags-y += $(call cc-option,-mpreferred-stack-boundary=2)
-# Prevent sprintf in nfsd from being converted to strcpy and resulting in
-# an unresolved reference.
-cflags-y += -ffreestanding
-
CFLAGS += $(cflags-y)
USER_CFLAGS += $(cflags-y)
--- linux-2.6.18-rc4-mm2/include/asm-x86_64/string.h.old 2006-08-21 20:49:07.000000000 +0200
+++ linux-2.6.18-rc4-mm2/include/asm-x86_64/string.h 2006-08-21 20:49:22.000000000 +0200
@@ -41,15 +41,26 @@
#define __HAVE_ARCH_MEMSET
-void *memset(void *s, int c, size_t n);
+#define memset __builtin_memset
#define __HAVE_ARCH_MEMMOVE
void * memmove(void * dest,const void *src,size_t count);
+/* Use C out of line version for memcmp */
+#define memcmp __builtin_memcmp
int memcmp(const void * cs,const void * ct,size_t count);
+
+/* out of line string functions use always C versions */
+#define strlen __builtin_strlen
size_t strlen(const char * s);
-char *strcpy(char * dest,const char *src);
-char *strcat(char * dest, const char * src);
+
+#define strcpy __builtin_strcpy
+char * strcpy(char * dest,const char *src);
+
+#define strcat __builtin_strcat
+char * strcat(char * dest, const char * src);
+
+#define strcmp __builtin_strcmp
int strcmp(const char * cs,const char * ct);
#endif /* __KERNEL__ */
next reply other threads:[~2006-08-21 21:21 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-21 21:21 Adrian Bunk [this message]
2006-08-21 21:24 ` [2.6 patch] re-add -ffreestanding Andi Kleen
2006-08-21 21:46 ` Adrian Bunk
2006-08-21 22:09 ` Andi Kleen
2006-08-21 22:24 ` Adrian Bunk
2006-08-21 22:27 ` Andi Kleen
2006-08-21 22:58 ` Adrian Bunk
2006-08-21 23:13 ` Andi Kleen
2006-08-22 3:37 ` Kyle Moffett
2006-08-22 10:37 ` Andi Kleen
2006-08-22 11:18 ` Adrian Bunk
2006-08-21 23:33 ` Roman Zippel
-- strict thread matches above, loose matches on Subject: below --
2006-08-30 17:57 Adrian Bunk
2006-08-30 18:13 ` Andi Kleen
2006-08-30 18:39 ` Russell King
2006-09-06 22:37 ` Adrian Bunk
2006-09-06 23:38 ` Roman Zippel
2006-09-06 23:50 ` Adrian Bunk
2006-09-07 0:05 ` Roman Zippel
2006-09-07 0:37 ` Adrian Bunk
2006-09-07 0:47 ` Roman Zippel
2006-09-07 1:02 ` Adrian Bunk
2006-09-07 1:23 ` Roman Zippel
2006-09-07 2:23 ` Adrian Bunk
2006-09-07 10:25 ` Roman Zippel
2006-09-07 6:30 ` Russell King
2006-09-07 10:27 ` Adrian Bunk
2006-09-07 11:40 ` Roman Zippel
2006-09-07 11:43 ` Russell King
2006-09-07 14:03 ` Kyle Moffett
2006-09-07 14:25 ` Russell King
2006-09-07 14:29 ` Roman Zippel
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=20060821212154.GO11651@stusta.de \
--to=bunk@stusta.de \
--cc=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=zippel@linux-m68k.org \
/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.