From: Finn Thain <fthain@telegraphics.com.au>
To: Randy Dunlap <rdunlap@infradead.org>
Cc: Andreas Schwab <schwab@linux-m68k.org>,
LKML <linux-kernel@vger.kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
linux-m68k@lists.linux-m68k.org
Subject: Re: m68k allmodconfig build errors
Date: Tue, 24 Jul 2018 14:49:23 +1000 (AEST) [thread overview]
Message-ID: <alpine.LNX.2.21.1807241423000.8@nippy.intranet> (raw)
In-Reply-To: <94dc0357-10d4-c3dc-ef2a-9643f08d2a09@infradead.org>
On Mon, 23 Jul 2018, Randy Dunlap wrote:
> On 07/20/2018 12:20 AM, Andreas Schwab wrote:
> > On Jul 19 2018, Randy Dunlap <rdunlap@infradead.org> wrote:
> >
> >> block/partitions/ldm.o: In function `ldm_partition':
> >> ldm.c:(.text+0x1900): undefined reference to `strcmp'
> >> ldm.c:(.text+0x1964): undefined reference to `strcmp'
> >> drivers/rtc/rtc-proc.o: In function `is_rtc_hctosys':
> >> rtc-proc.c:(.text+0x290): undefined reference to `strcmp'
> >> drivers/watchdog/watchdog_pretimeout.o: In function `watchdog_register_governor':
> >> (.text+0x142): undefined reference to `strcmp'
> >
> > GCC has optimized strncmp to strcmp, but at a stage where macros are no
> > longer available. I think the right fix is to use strcmp directly,
> > since strncmp doesn't make sense here.
>
> Hi Andreas,
>
> I don't see that all of these string compare fields are null-terminated.
>
Some of the strncmp calls in ldm.c are null-terminated, some are not.
That would imply that the compiler will emit both strcmp and strncmp
calls.
A strncmp call isn't a problem, because m68k doesn't define
__HAVE_ARCH_STRNCMP and so the one from lib/string.c gets built.
> How does one convert strncmp() users to strcmp()?
>
> thanks,
>
The untested patch below may work. It seems that it may be relevant to
both arc and m68k:
$ diff -u <(egrep -rlw __HAVE_ARCH_STRCMP *) <(egrep -rlw __HAVE_ARCH_STRNCMP *)
--- /dev/fd/63 2018-07-24 14:22:56.180014584 +1000
+++ /dev/fd/62 2018-07-24 14:22:56.180014584 +1000
@@ -1,11 +1,12 @@
arch/mips/include/asm/string.h
arch/x86/lib/string_32.c
arch/x86/include/asm/string_32.h
-arch/m68k/include/asm/string.h
arch/xtensa/include/asm/string.h
arch/sh/include/asm/string_32.h
+arch/powerpc/include/asm/string.h
arch/s390/include/asm/string.h
arch/arm64/include/asm/string.h
-arch/arc/include/asm/string.h
+arch/sparc/include/asm/string.h
+drivers/firmware/efi/libstub/string.c
include/linux/string.h
lib/string.c
How can all those __HAVE_ARCH_FOO feature macros work properly if the
compiler makes assumptions about libc availability? Isn't that assumption
invalidated by -ffreestanding?
Surely the strcmp optimization is only valid when there is a
__builtin_strcmp?
--
diff --git a/block/partitions/ldm.c b/block/partitions/ldm.c
index 0417937dfe99..4b9927344593 100644
--- a/block/partitions/ldm.c
+++ b/block/partitions/ldm.c
@@ -150,8 +150,7 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc)
toc->bitmap1_start = get_unaligned_be64(data + 0x2E);
toc->bitmap1_size = get_unaligned_be64(data + 0x36);
- if (strncmp (toc->bitmap1_name, TOC_BITMAP1,
- sizeof (toc->bitmap1_name)) != 0) {
+ if (strcmp(toc->bitmap1_name, TOC_BITMAP1) != 0) {
ldm_crit ("TOCBLOCK's first bitmap is '%s', should be '%s'.",
TOC_BITMAP1, toc->bitmap1_name);
return false;
@@ -160,8 +159,7 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc)
toc->bitmap2_name[sizeof (toc->bitmap2_name) - 1] = 0;
toc->bitmap2_start = get_unaligned_be64(data + 0x50);
toc->bitmap2_size = get_unaligned_be64(data + 0x58);
- if (strncmp (toc->bitmap2_name, TOC_BITMAP2,
- sizeof (toc->bitmap2_name)) != 0) {
+ if (strcmp(toc->bitmap2_name, TOC_BITMAP2) != 0) {
ldm_crit ("TOCBLOCK's second bitmap is '%s', should be '%s'.",
TOC_BITMAP2, toc->bitmap2_name);
return false;
diff --git a/drivers/rtc/rtc-proc.c b/drivers/rtc/rtc-proc.c
index a9dd9218fae2..5f9a5a720b4d 100644
--- a/drivers/rtc/rtc-proc.c
+++ b/drivers/rtc/rtc-proc.c
@@ -30,7 +30,7 @@ static bool is_rtc_hctosys(struct rtc_device *rtc)
if (size > NAME_SIZE)
return false;
- return !strncmp(name, CONFIG_RTC_HCTOSYS_DEVICE, NAME_SIZE);
+ return !strcmp(name, CONFIG_RTC_HCTOSYS_DEVICE);
}
#else
static bool is_rtc_hctosys(struct rtc_device *rtc)
diff --git a/drivers/watchdog/watchdog_pretimeout.c b/drivers/watchdog/watchdog_pretimeout.c
index 9db07bfb4334..d4797452b011 100644
--- a/drivers/watchdog/watchdog_pretimeout.c
+++ b/drivers/watchdog/watchdog_pretimeout.c
@@ -136,8 +136,7 @@ int watchdog_register_governor(struct watchdog_governor *gov)
priv->gov = gov;
list_add(&priv->entry, &governor_list);
- if (!strncmp(gov->name, WATCHDOG_PRETIMEOUT_DEFAULT_GOV,
- WATCHDOG_GOV_NAME_MAXLEN)) {
+ if (!strcmp(gov->name, WATCHDOG_PRETIMEOUT_DEFAULT_GOV)) {
spin_lock_irq(&pretimeout_lock);
default_gov = gov;
next prev parent reply other threads:[~2018-07-24 4:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-19 22:39 m68k allmodconfig build errors Randy Dunlap
2018-07-20 5:17 ` Finn Thain
2018-07-24 1:49 ` Randy Dunlap
2018-07-20 7:20 ` Andreas Schwab
2018-07-24 1:52 ` Randy Dunlap
2018-07-24 4:49 ` Finn Thain [this message]
2018-07-26 19:29 ` Randy Dunlap
2018-07-27 4:44 ` Finn Thain
2018-07-27 8:40 ` Andreas Schwab
2018-07-27 12:51 ` Finn Thain
2018-07-24 17:35 ` Andreas Schwab
2018-09-26 7:44 ` Geert Uytterhoeven
2018-09-26 16:09 ` Andreas Schwab
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=alpine.LNX.2.21.1807241423000.8@nippy.intranet \
--to=fthain@telegraphics.com.au \
--cc=geert@linux-m68k.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=rdunlap@infradead.org \
--cc=schwab@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).