All of lore.kernel.org
 help / color / mirror / Atom feed
From: "H. Nikolaus Schaller" <hns@goldelico.com>
To: Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, Jessica Yu <jeyu@kernel.org>,
	Miroslav Benes <mbenes@suse.cz>,
	Emil Velikov <emil.l.velikov@gmail.com>,
	Nick Desaulniers <ndesaulniers@google.com>
Cc: letux-kernel@openphoenux.org, "H. Peter Anvin" <hpa@zytor.com>,
	linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel@pyra-handheld.com,
	"H. Nikolaus Schaller" <hns@goldelico.com>
Subject: [PATCH 0/2] Regex fixes for mips and x86 cross-compile
Date: Thu,  8 Jul 2021 10:57:08 +0200	[thread overview]
Message-ID: <cover.1625734629.git.hns@goldelico.com> (raw)

Trying to run the x86 relocs tool on a BSD based HOSTCC (cross
compilation environment) leads to errors like

  VOFFSET arch/x86/boot/compressed/../voffset.h - due to: vmlinux
  CC      arch/x86/boot/compressed/misc.o - due to: arch/x86/boot/compressed/../voffset.h
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin - due to: vmlinux
  RELOCS  arch/x86/boot/compressed/vmlinux.relocs - due to: vmlinux
empty (sub)expressionarch/x86/boot/compressed/Makefile:118: recipe for target 'arch/x86/boot/compressed/vmlinux.relocs' failed
make[3]: *** [arch/x86/boot/compressed/vmlinux.relocs] Error 1

and when cross compiling a MIPS kernel on a BSD based HOSTCC
we get errors like

  SYNC    include/config/auto.conf.cmd - due to: .config
egrep: empty (sub)expression
  UPD     include/config/kernel.release
  HOSTCC  scripts/dtc/dtc.o - due to target missing

It turns out that relocs.c on x86 uses patterns like

	"something(|_end)"

while MIPS uses egrep with

	(|MINOR_|PATCHLEVEL_)

In both cases it is not valid syntax or gives undefined results
according to POSIX 9.5.3 ERE Grammar

	https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html

It seems to be silently accepted by the Linux regcmp() or egrep
implementation while a BSD host complains.

Such patterns can be replaced by a transformation like

	"(|p1|p2)" -> "(p1|p2)?"

Test Linux:

root@letux:~# echo foo | egrep '^(|foo)$'
foo
root@letux:~# echo fool | egrep '^(foo)?$'
root@letux:~# echo fun | egrep '^(|foo)$'
root@letux:~# echo f | egrep '^(|foo)$'
root@letux:~# echo | egrep '^(|foo)$'

root@letux:~# echo foo | egrep '^(foo)?$'
foo
root@letux:~# echo fool | egrep '^(foo)?$'
root@letux:~# echo fun | egrep '^(foo)?$'
root@letux:~# echo f | egrep '^(foo)?$'
root@letux:~# echo | egrep '^(foo)?$'

root@letux:~# 

Test BSD:

iMac:master hns$ echo foo | egrep '^(|foo)$'
egrep: empty (sub)expression
iMac:master hns$ echo fool | egrep '^(foo)?$'
egrep: empty (sub)expression
iMac:master hns$ echo fun | egrep '^(|foo)$'
egrep: empty (sub)expression
iMac:master hns$ echo f | egrep '^(|foo)$'
egrep: empty (sub)expression
iMac:master hns$ echo | egrep '^(|foo)$'
egrep: empty (sub)expression
iMac:master hns$ echo foo | egrep '^(foo)?$'
foo
iMac:master hns$ echo fool | egrep '^(foo)?$'
iMac:master hns$ echo fun | egrep '^(foo)?$'
iMac:master hns$ echo f | egrep '^(foo)?$'
iMac:master hns$ echo | egrep '^(foo)?$'

iMac:master hns$ 


H. Nikolaus Schaller (2):
  x86/tools/relocs: Fix non-POSIX regexp
  arch: mips: Fix non-POSIX regexp

 arch/mips/Makefile      | 2 +-
 arch/x86/tools/relocs.c | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

-- 
2.31.1


             reply	other threads:[~2021-07-08  9:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-08  8:57 H. Nikolaus Schaller [this message]
2021-07-08  8:57 ` [PATCH 1/2] x86/tools/relocs: Fix non-POSIX regexp H. Nikolaus Schaller
2021-08-05 11:52   ` Masahiro Yamada
2021-07-08  8:57 ` [PATCH 2/2] arch: mips: " H. Nikolaus Schaller
2021-08-05 11:53   ` Masahiro Yamada
2021-07-19 19:04 ` [PATCH 0/2] Regex fixes for mips and x86 cross-compile H. Nikolaus Schaller
2021-07-19 20:37   ` Nick Desaulniers
2021-08-03 15:58     ` H. Nikolaus Schaller
2021-08-05 11:54       ` Masahiro Yamada

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=cover.1625734629.git.hns@goldelico.com \
    --to=hns@goldelico.com \
    --cc=bp@alien8.de \
    --cc=emil.l.velikov@gmail.com \
    --cc=hpa@zytor.com \
    --cc=jeyu@kernel.org \
    --cc=kernel@pyra-handheld.com \
    --cc=letux-kernel@openphoenux.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mingo@redhat.com \
    --cc=ndesaulniers@google.com \
    --cc=tglx@linutronix.de \
    --cc=tsbogend@alpha.franken.de \
    --cc=x86@kernel.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.