Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Jun 1999 23:54:06 +0800
From:      Peter Wemm <peter@netplex.com.au>
To:        Doug Rabson <dfr@nlsystems.com>, alpha@freebsd.org
Subject:   Re: Hmm!! 
Message-ID:  <19990627155406.CCF9181@overcee.netplex.com.au>
In-Reply-To: Your message of "Sun, 27 Jun 1999 22:11:24 %2B0800." <19990627141124.710CA81@overcee.netplex.com.au> 

next in thread | previous in thread | raw e-mail | index | archive | help
Peter Wemm wrote:
> Doug Rabson wrote:
> > On Sun, 27 Jun 1999, Peter Wemm wrote:
> [..]
> > > Anybody got any bright ideas about this?  (apart from run the memory test
    er
> > > in SRM that is..)
> > 
> > Maybe the kernel doesn't fit in its memory region? You could try enabling
> > the debug printfs in alpha_init() where it reads the memory cluster
> > information.
> 
> Another datapoint:
> 
> # /bin/cat
> Jun 27 22:01:19 ashburton /kernel: pid 23490 (cat), uid 0: exited on signal 1
    1 (core dumped)
> Segmentation fault - core dumped
> # /bin/cat
> foo
> foo
> # 
> 
> The interesting thing is that according to the coredumps, it consistantly
> appears to die in the first getenv() inside setlocale() when walking the
> environ list.  It's being a damn nuisance to check because the slightest
> change makes it work.. ie: under truss or ktrace, gdb, etc, it works fine.
> Multiple different cat binaries all do this - including one I compiled with
> -g - but they only misbehave under /bin/sh.   Something funny about the
> environment passing perhaps?
> 
> This is on the small kernel BTW, so the size of the kernel seems to affect
> things, but not eliminate the problems.
> 
> Cheers,
> -Peter

This is getting stranger by the minute...

If I do this to cat.c:
main() {
  ...
  write(1, "A", 1);
  setlocale(LC_CTYPE, "");
  write(1, "A", 1);
...
Then it works.  If I take away either added write() syscall, it fails.
If I change it to this, it works too:
        setlocale(LC_CTYPE, "");
	write(1, "A", 1);

        while ((ch = getopt(argc, argv, "benstuv")) != -1) {
	write(1, "A", 1);
                switch (ch) {
.. even though the second write() is never executed.

If I compile without optimization, cat seems to work always.  This is
bizzare.  Why cat?  Why with the different kernels does it pick mount_nfs
or sysctl to screw up, and only then when called from /bin/sh.

I have saved a copy of the (-O) assembler code from a working and non-working
version of cat.c.  (reminder: it only fails when run from sh, eg in /etc/rc
or under make.)

Oh, also, according to the console:
pal                     VMS PALcode V1.20-5, OSF PALcode V1.22-6
version                 V5.1-4 Feb 12 1998 15:40:06

If I look at the firmware updates directory, the current 5_4 release is
labelled:

         +++++++++++++++++++++++++++++++++++++++           April 1999
         +         AlphaPC 164SX Firmware      +
         +            README-FIRST             +
         +++++++++++++++++++++++++++++++++++++++
1. Latest Firmware Update Revisions
      SRM            V5.4-1
      VMS PALcode    V1.20-6
      Unix PALcode   V1.22-6

The Unix palcode is the same version, but the SRM release is a newer.  Does
it seem worthwhile to try to update SRM?

Cheers,
-Peter



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990627155406.CCF9181>