From: Rob Landley <rob@landley.net>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Leon Woestenberg <leon.woestenberg@gmail.com>,
Embedded Linux mailing list <linux-embedded@vger.kernel.org>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Sam Ravnborg <sam@ravnborg.org>
Subject: Re: PATCH [0/3]: Simplify the kernel build by removing perl.
Date: Sun, 4 Jan 2009 00:29:02 -0600 [thread overview]
Message-ID: <200901040029.03396.rob@landley.net> (raw)
In-Reply-To: <49601B94.3060408@zytor.com>
On Saturday 03 January 2009 20:14:44 H. Peter Anvin wrote:
> Rob Landley wrote:
> >> The new patches have *more* environmental
> >> dependencies than that ever did.
> >
> > Could you please be a little more specific?
>
> In this case, you're assuming that every version of every shell this is
> going to get involved with is going to do math correctly with the
> requisite precision, which is nowhere guaranteed, I'm pretty sure.
Well, SUSv3 requires that the shell support signed long arithmetic:
http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
And the LP64 standard says that on 64 bit systems, long must be 64 bit:
http://www.unix.org/whitepapers/64bit.html
Now the potential weakness there is that on 32 bit systems, shells might only
support 32 bit math instead of 64 bit math. (You'll notice I have a test for
that.) However, bash has supported 64 bit math on 32 bit systems since at
least 2003. (I keep a Red Hat 9 test image around because it had 50% market
share when it shipped, so the majority of "old" Linux systems still in use
_are_ RH9 or similar. It also has the oldest gcc version the kernel still
claims to build under.) Busybox ash can also support 64 bit math on 32 bit
hosts, and I just confirmed that the dash in the 32 bit xubuntu 8.10 supports
64 bit math as well.
(It would also be possible to do a similar overflow avoiding trick to do the
lot entirely in 32 bit math, but given that the three main shells in use on
Linux _do_ support 64 bit math on 32 bit hosts and are _required_ to support
it on 64 bit hosts according to SUSv3, the extra complexity really doesn't
seem worth it.)
> >> Third, if someone actually cares to do it right, I have a smallish
> >> bignum library at http://git.zytor.com/?p=lib/pbn.git;a=summary that
> >> might be a starting point.
> >
> > This doesn't _need_ bignum support. It maxes out around 72 bits and the
> > _result_ can't use more than about $SHIFT bits because you're dividing by
> > the amount you shifted, so just chop off the bottom 32 bits, do a normal
> > 64 bit division on the top (it has to fit), and then do the same division
> > on the appropriate shifted remainder, and combine the results. This is
> > easy because when the shift _is_ 32 bits or more, the bottom 32 bits all
> > have to be zeroes so you don't even have to mask and add, just shift the
> > remainder left 32 bits so you can continue the divide.
> >
> > Pulling out perl isn't always a good alternative to thinking about the
> > problem.
>
> Neither is open-coding a bignum operation instead of relying on an
> existing, validated implementation.
Implementing something by hand isn't _always_ a good alternative, sure. That
would be the "thinking about the problem" part. In this instance, avoiding
overflow is trivial. (If 1<<-1 didn't wrap around, it wouldn't even need the
if statement.)
I'm curious, would the "existing, validated implementation" in this instance
be the perl implementation, or the library you wrote and pointed me to above
as a potential replacement for it?
I suppose there's a certain amount of style in accusing me of reinventing the
wheel while pointing me at your reinvention of the wheel. (Are you aiming to
replace Gnu's gmplib.org, the perhaps the BSD licensed one in openssh?
Dropbear uses Libtommath. A quick google for C open source big number
libraries also found Libimath, MPI, NTL, BigDigits, decNumber, and MPI. The
last time I personally wrote my own arbitrary precision math package from
scratch was in 1998, and that was in Java, so I'm a little rusty...) But I
don't personally consider avoiding the need for an arbitrary precision math
library to be the same as reimplementing one.
> -hpa
Rob
next prev parent reply other threads:[~2009-01-04 6:29 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-02 8:07 PATCH [0/3]: Simplify the kernel build by removing perl Rob Landley
2009-01-02 8:13 ` [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh Rob Landley
2009-01-02 9:04 ` Sam Ravnborg
2009-01-02 12:00 ` Rob Landley
2009-01-02 19:33 ` H. Peter Anvin
2009-01-04 1:32 ` Rob Landley
2009-01-04 1:35 ` H. Peter Anvin
2009-01-04 12:07 ` Alan Cox
2009-01-04 18:36 ` H. Peter Anvin
2009-01-04 19:03 ` Rob Landley
2009-01-04 20:39 ` H. Peter Anvin
2009-01-05 0:59 ` Rob Landley
2009-01-03 6:28 ` Harvey Harrison
2009-01-03 12:28 ` Ingo Oeser
2009-01-04 1:36 ` Rob Landley
2009-01-04 5:07 ` Valdis.Kletnieks
2009-01-04 6:43 ` Rob Landley
2009-01-04 22:13 ` Jamie Lokier
2009-01-05 0:15 ` Bernd Petrovitsch
2009-01-05 2:23 ` Jamie Lokier
2009-01-05 10:46 ` Bernd Petrovitsch
2009-01-05 15:01 ` Jamie Lokier
2009-01-05 16:18 ` Bernd Petrovitsch
2009-01-06 0:06 ` Rob Landley
2009-01-05 21:07 ` Rob Landley
2009-01-05 4:50 ` Rob Landley
2009-01-05 12:29 ` Bernd Petrovitsch
2009-01-04 21:51 ` Alejandro Mery
2009-01-04 7:15 ` Michal Jaegermann
2009-01-05 0:41 ` Ray Lee
2009-01-05 5:08 ` Rob Landley
2009-01-02 8:14 ` [PATCH 2/3]: Remove perl from make headers_install Rob Landley
2009-01-02 9:09 ` Sam Ravnborg
2009-01-02 8:15 ` [PATCH 3/3]: Convert mkcapflags.pl to mkcapflags.sh Rob Landley
2009-01-02 9:12 ` Sam Ravnborg
2009-01-02 9:26 ` PATCH [0/3]: Simplify the kernel build by removing perl Arkadiusz Miskiewicz
2009-01-02 9:49 ` Christoph Hellwig
2009-01-02 10:16 ` Alejandro Mery
2009-01-02 10:30 ` Mark Miller
2009-01-02 11:18 ` Matt Keenan
2009-01-02 10:41 ` Måns Rullgård
2009-01-15 12:59 ` Pádraig Brady
2009-01-15 18:52 ` Jamie Lokier
2009-01-15 19:45 ` Måns Rullgård
2009-01-02 11:15 ` Rob Landley
2009-01-02 11:44 ` Sam Ravnborg
2009-01-02 12:56 ` Rob Landley
2009-01-02 14:04 ` Theodore Tso
2009-01-03 3:22 ` Jamie Lokier
2009-01-04 2:23 ` Rob Landley
2009-01-02 10:02 ` Mark Miller
2009-01-02 10:03 ` Mark Miller
2009-01-02 11:13 ` Rob Landley
2009-01-02 16:04 ` Matthieu CASTET
2009-01-03 19:46 ` Rob Landley
2009-01-03 20:10 ` Sam Ravnborg
2009-01-03 20:50 ` H. Peter Anvin
2009-01-04 1:47 ` Rob Landley
2009-01-04 1:45 ` Rob Landley
2009-01-04 8:09 ` Sam Ravnborg
2009-01-04 20:19 ` Rob Landley
2009-01-04 0:44 ` Robert Hancock
2009-01-04 1:39 ` David Brownell
2009-01-04 3:05 ` Rob Landley
2009-01-04 1:32 ` Rob Landley
2009-01-02 9:50 ` Paul Mundt
2009-01-02 10:32 ` Mark Miller
2009-01-02 10:57 ` Paul Mundt
2009-01-02 12:11 ` Mark Miller
2009-01-02 12:44 ` Rob Landley
2009-01-02 17:25 ` Wookey
2009-01-02 18:01 ` Sam Ravnborg
2009-01-02 19:27 ` H. Peter Anvin
2009-01-04 1:35 ` Rob Landley
2009-01-03 19:48 ` Rob Landley
2009-01-03 14:59 ` Wolfgang Denk
2009-01-03 22:54 ` Leon Woestenberg
2009-01-03 23:03 ` H. Peter Anvin
2009-01-04 0:37 ` Leon Woestenberg
2009-01-04 2:53 ` Rob Landley
2009-01-04 3:38 ` Markus Heidelberg
2009-01-04 4:57 ` Rob Landley
2009-01-04 2:06 ` Rob Landley
2009-01-04 2:14 ` H. Peter Anvin
2009-01-04 6:29 ` Rob Landley [this message]
2009-01-15 14:32 ` Pádraig Brady
2009-01-04 2:36 ` Jamie Lokier
2009-01-04 2:39 ` H. Peter Anvin
2009-01-04 2:43 ` H. Peter Anvin
2009-01-04 3:06 ` Paul Mundt
2009-01-04 10:23 ` Leon Woestenberg
2009-01-08 13:29 ` Mike Frysinger
2009-01-11 12:45 ` Bernd Petrovitsch
2009-01-12 3:36 ` Mark A. Miller
2009-01-12 5:11 ` H. Peter Anvin
2009-01-12 5:23 ` Mark A. Miller
2009-01-12 8:20 ` Paul Mundt
2009-01-12 9:18 ` Mark A. Miller
2009-01-12 9:41 ` Paul Mundt
2009-01-12 10:03 ` Mark A. Miller
2009-01-12 10:34 ` Paul Mundt
2009-01-12 17:56 ` Rob Landley
2009-01-12 18:04 ` Alan Cox
2009-01-12 8:27 ` Peter Korsgaard
2009-01-12 17:45 ` Rob Landley
[not found] ` <31014a580901111928u586e2246uccf370ff941c8a01@mail.gmail.com>
2009-01-12 5:35 ` Sam Ravnborg
2009-01-12 5:50 ` Mark A. Miller
2009-01-12 10:18 ` Sam Ravnborg
2009-01-12 10:22 ` Mark A. Miller
2009-01-12 10:38 ` Paul Mundt
2009-01-14 2:51 ` Jamie Lokier
2009-01-16 6:11 ` Rob Landley
2009-01-16 14:54 ` Valdis.Kletnieks
2009-01-16 21:54 ` Rob Landley
2009-01-17 9:51 ` Jamie Lokier
2009-01-18 1:44 ` Rob Landley
2009-01-04 16:22 ` Vladimir Dronnikov
2009-01-04 1:24 ` PATCH [0/3]: Simplify the kernel build by removing perl v2 Rob Landley
2009-01-04 1:27 ` PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Rob Landley
2009-01-04 2:48 ` David Vrabel
2009-01-04 20:21 ` Rob Landley
2009-01-04 1:28 ` PATCH [2/3]: Remove perl from make headers_install Rob Landley
2009-01-04 1:29 ` PATCH [3/3]: Convert kernel/cpu/mkcapflags.pl to kernel/cpu/mkcapflags.sh Rob Landley
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=200901040029.03396.rob@landley.net \
--to=rob@landley.net \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=leon.woestenberg@gmail.com \
--cc=linux-embedded@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sam@ravnborg.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