Linux-Development-Sys Digest #965, Volume #7     Wed, 21 Jun 00 13:13:14 EDT

Contents:
  Multi-threading debugging (Samuel Kortas)
  Re: UNIX upgrading (Waldek Hebisch)
  Re: Why so many collisioins ? ([EMAIL PROTECTED])
  Re: Howto debug kernel deadlock ? (Kaz Kylheku)
  read(2) error EINTR (Alex Hooker)
  Re: Thread Specific Memory (Kaz Kylheku)
  Re: Multi-threading debugging (James Cownie)
  Re: kernel books (John Gluck)
  Re: Multi-threading debugging (denis martinez)
  Re: can I not get the value of a global variable in an interrupt handler? (denis 
martinez)
  Re: read(2) error EINTR (Alan Donovan)
  Re: UNIX upgrading (Alan Donovan)
  wm creation ("Bill")
  Re: read(2) error EINTR (Mathias Waack)
  How to inform glibc of  new syscall ? ("Roland de Gilead")
  bootlogos ("Gordon Morison")
  Re: Multi-threading debugging (Fabrice Peix)
  Re: How to inform glibc of  new syscall ? (Kaz Kylheku)
  Re: Add 4inches in length to your penis now!!! 4950 (bgeer)

----------------------------------------------------------------------------

From: Samuel Kortas <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.m68k,comp.os.linux.development.apps,comp.os.linux.portable,comp.os.questions
Subject: Multi-threading debugging
Date: Wed, 21 Jun 2000 15:09:41 +0200

Hi Guys!

I am looking for a convenient environnement to debug a multithreaded
program under
linux.

Could anyone tell me if he/she is using such a tool and with what kernel
and on
which machine?


In advance, thank you for any clue
--
Samuel KORTAS

------------------------------

From: [EMAIL PROTECTED] (Waldek Hebisch)
Subject: Re: UNIX upgrading
Date: 21 Jun 2000 13:20:38 GMT

[EMAIL PROTECTED] wrote:
: Hey all,
:      I'm new to the Linux world, so this might be a very naive question.  
: But here we go....
:      After suffering through the wasteland of DOS/Windows for a long time, 
: how often will it be necessary to upgrade my Redhat Linux?  In other 
: words, if I still had Windows 3.1 on my system, I would be out of luck as 
: far as new software is concerned.  Yet if I keep RH 6.1 on my system for a 
: while, will it always be able to run newer software with its regular 
: kernal?  As far as older kernals, are they still viable for running new 
: software?  Thanks for your help!

I think that you are expecting too much. You are talking about 8 years 
timescale. In last 8 years Linux went to two big shocks:
- change from a.out to ELF binary format
- change from libc5 to glibc
In both cases the old systems were unable to run new binaries. There 
were also smaller changes which could force you to upgrade large 
part of the system to get new functionality. 
Looking forward into next 8 years I see at least two big reasons 
for new shocks:
- 64bit computing
- wide adoption of Unicode (UTF-8)
I HOPE that in 8 years dominant platform will be 64-bit, and of 
course binaries for such a platform will not run on 32-bit 
processors. And since currently there is no good alternative 
to Intel archtecture we will see in next few years a bunch of 
ougly patches to cope with bigger memories and drives. Those 
changes are likly to make some programs incompatible with 
old systems. 

For Unicode -- to get full benefits the whole system should 
work with Unicode, and while most programs should work just fine, 
I may be much simpler to upgrade the whole system then to try 
isolate guilty parts. 

To put things into perspective: 
- if you install from sources you should be able to substantially 
  extend life of your system
- main pressure to upgrade comes from hardware, new programs just 
  need much more resources then old ones, but you need new system 
  to handle new hardware
- it is possible to do upgrade incrementally -- if you install 
  new versions systematically you may end up with new version
  of the system
- upgrading kernel is easy, changes that break old programs 
  are rare (in fact, as long as I know in recent kernels only changes 
  in firewalling broke programs outside kernel). 
So you may expect to be able to drop random binaris during 2-3 years, 
and if you either replace large parts, or use sources the you may 
count for 5 year system life, but more is just unreasonable.

: --
: Posted via CNET Help.com
: http://www.help.com/

--
                              Waldek Hebisch
[EMAIL PROTECTED]    or [EMAIL PROTECTED] 

------------------------------

From: [EMAIL PROTECTED]
Crossposted-To: comp.os.linux.development.apps,comp.os.linux.networking
Subject: Re: Why so many collisioins ?
Date: Wed, 21 Jun 2000 13:28:56 GMT

In article <[EMAIL PROTECTED]>,
  Michael Powe <[EMAIL PROTECTED]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> >>>>> "Chuck" == Chuck Swiger <[EMAIL PROTECTED]> writes:
>
>     Chuck> In comp.os.linux.networking Cedric Blancher
>     Chuck> <[EMAIL PROTECTED]> wrote:
>
>     >> "Boris Pran" <[EMAIL PROTECTED]> a �crit dans le message news:
>     >>> It works but, an enormous amount of collisions are detected.
>     >>> Collision led on the hub is on almost all the time. It
>     >>> significantly slowes down the communication.
>
>     Chuck> You've probably got a cabling problem or else your 10/100
>     Chuck> card is not autonegotiating to 10Mbs/half-duplex properly.
>
>     >> If your HUB is a 10/100Mbps one, D-Link card is ten time faster
>     >> than the other. It has to slow down for the other card not to
>     >> get flooded.
>
>     Chuck> A hub either runs at 10 or 100; a device which can handle
>     Chuck> both speeds is a switch, not a hub (by definition).  The
>     Chuck> 10/100 card should simply run at 10Mbs; congestion control
>     Chuck> is not handled by the card per se, but by the TCP sliding
>     Chuck> window.
>
> A switch, by definition, is a "smart" hub that will figure out which
> machine is to receive a packet and send the packet to only that port,
> rather than, in typical ethernet fashion, spraying the packet to every
> port.  Switches are most often used to connect different segments of a
> network.
>
> I have a 10/100 hub and some machines on it are plugging in at 100,
> some at 10, depending on the card in the particular machine.
>

I think what they are referring to is a 10/100 autoswitching hub.
Typically these hubs have a built in 2 port switch.  Even though the hub
has 4, 8, 16, or however many ports, it still is only a 2 port switch.
It does this by having two internal segments.  Basically, you have 2
hubs in 1 package.  All of the devices connected at 10 are connected on
one segment and the devices that connect at 100 are on another.  The two
port switch handles propogating traffic from the segment to the other.



Sent via Deja.com http://www.deja.com/
Before you buy.

------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Howto debug kernel deadlock ?
Reply-To: [EMAIL PROTECTED]
Date: Wed, 21 Jun 2000 14:26:35 GMT

On 21 Jun 2000 11:15:39 +0200, Ulrich Leodolter <[EMAIL PROTECTED]>
wrote:
>
>Problem:
>
>Deadlock about once a month on a old Pentium 166
>SCSI System, always under heavy network load
>during ADSM backup (network card old NE2000)
>
>There are absolute NO error messages in /var/log/messages
>console is dead and SysRQ keys dont work.
>
>SystemInfo:
>
>RedHat 6.1
>linux-2.2.14 (+ raid & nfs patches)
>
>
>
>Any hints/suggestions how to debug/fix this problem?

Compile each your drivers with whatever debugging mode they have, then try to
reproduce the hang. If you are lucky, you may find an infinite loop that
spits out a debugging message somewhere in its body.

A hang could be anything; you can't rule out faulty hardware unless you
can reproduce it on other similarly configured systems.

-- 
#exclude <windows.h>

------------------------------

From: [EMAIL PROTECTED] (Alex Hooker)
Subject: read(2) error EINTR
Date: 21 Jun 2000 14:32:08 GMT

I am just doing some testing on linux system calls, 
and I just can't seem to get read to generate the
EINTR error. Ideally, on a blocking empty pipe read,
you would get this error - fork() child blocks on the 
read and the parent sends constant EINTR signals via
kill(). But the child does not terminate. I am using
signal() to catch... 

If you reply, test your suggestion first. I've tried
more than I've told... Thanks.

al


------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Thread Specific Memory
Reply-To: [EMAIL PROTECTED]
Date: Wed, 21 Jun 2000 14:33:37 GMT

On Wed, 21 Jun 2000 09:14:46 +0300, David Minor <[EMAIL PROTECTED]> wrote:
>Does thread specific memory provide protection for the blocks pointed to
>by keyed variables, or are only the keyed variables themselves safe?  I

No, only the void * values set with pthread_setspecific are squirreled away
into a hidden store managed by the threading library.  What they point to, if
anything, is in your control. Tranferring a pointer into a thread slot has no
effect on the object that pointer refers to.

-- 
#exclude <windows.h>

------------------------------

From: James Cownie <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.m68k,comp.os.linux.development.apps,comp.os.linux.portable,comp.os.questions
Subject: Re: Multi-threading debugging
Date: Wed, 21 Jun 2000 14:45:50 GMT

Samuel Kortas wrote:
> 
> Hi Guys!
> 
> I am looking for a convenient environnement to debug a multithreaded
> program under
> linux.
> 
> Could anyone tell me if he/she is using such a tool and with what kernel
> and on
> which machine?
> 
> In advance, thank you for any clue
> --
> Samuel KORTAS

Our totalview debugger supports thread debugging on Linux x86 and Alpha.
(As well as other Unix OSes such as AIX, HP/UX, Irix, Solaris, and Tru64
off the top of my head).

It is a commercial product, but you can download it and free demo licenses 
are available from our web site (http://www.etnus.com).

In case you can't tell, I work on it, so get paid from the revenue.

-- Jim 

James Cownie    <[EMAIL PROTECTED]>
Etnus, Inc.     +44 117 9071438
http://www.etnus.com

------------------------------

From: John Gluck <[EMAIL PROTECTED]>
Subject: Re: kernel books
Date: Wed, 21 Jun 2000 10:44:59 -0400

Philippe Peyre wrote:

>         I have found two books references on the Linux kernel.
>         Have you any information to help me to chose :
>
>              - "Linux Kernel Internals"  M. Beck

I have this one. It's very technical with a lot of details about
filesystems and architecture.
It's based on the 2.0 kernel but much ports to later kernels fairly
easily.

>
>
>              - "the Linux Kernel book" R. Card, E. Dumas and F. Mevel
>
>

There are a couple of web sites that help looking through the kernel
code...

http://metalab.unc.edu/linux-source/

http://lxr.linux.no/

--
John Gluck  (Passport Kernel Design Group)

(613) 765-8392  ESN 395-8392

Unless otherwise stated, any opinions expressed here are strictly my own
and do not reflect any official position of Nortel Networks.




------------------------------

From: denis martinez <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.m68k,comp.os.linux.development.apps,comp.os.linux.portable,comp.os.questions
Subject: Re: Multi-threading debugging
Date: Wed, 21 Jun 2000 16:52:53 +0200

Samuel Kortas wrote:

> Hi Guys!
>
> I am looking for a convenient environnement to debug a multithreaded
> program under
> linux.
>
> Could anyone tell me if he/she is using such a tool and with what kernel
> and on
> which machine?
>
> In advance, thank you for any clue
> --
> Samuel KORTAS

Hi,
I use standard gdb (ver 4.17.0.4, this version support threads debugging)
with frontal ddd (ver 3.2.1, with last version of lestiff) on both kernel
2.034 and 2.214
Very easy and powerfull to use !!!





--
=====================================================
Denis MARTINEZ ; e-mail [EMAIL PROTECTED]
R&D Engineer at Sofrel Telecontrol Business
Phone: +33(0)4 92 08 43 24   Fax: +33(0)4 92 08 43 19
=====================================================




------------------------------

From: denis martinez <[EMAIL PROTECTED]>
Subject: Re: can I not get the value of a global variable in an interrupt handler?
Date: Wed, 21 Jun 2000 17:05:18 +0200

Bangnan Xu wrote:

> Dear all,
>
> to test the interupt i need to have a initialized variable used in a
> interrupt
>  routing in linux kernel. But strange things have happen when i try to
> do so.
>
> unsigned int interruptvariable=5;
>
> unsigned int interupt_handler(unsigned int irq, struct pt_regs *regs)
> {
> clear_irq();
> interruptvariable=interruptvariable-1;
> if (interruptvariable==4)
> sound_routing();
> }
>
>
> in this case when an interrupt happens, sound_routing() will not be
> executed;
>
> But if i delete interruptvariable=interruptvariable-1; then
>
> unsigned int interruptvariable=5;
>
> unsigned int interupt_handler(unsigned int irq, struct pt_regs *regs)
> {
> clear_irq();
> if (interruptvariable==5)
> sound_routing();
> }
>
> at this case the sound_routing() will be executed when an interrupt
> happens.
>
> I have no idea to thint about this problem.
>
> --
> Gruesse
>
> Bangnan
> ------------------------------------------------------------------------------
> Bangnan Xu                                               |     C   O   M
> Communication Networks, Technical University of Aachen   |
> --v-^-v-^-v-^-v--
> Phone: +49-241-807925       Fax: +49-241-8888-242        |   N   E   T
> S
> Email: [EMAIL PROTECTED]                         | RWTH Aachen,
> Germany


what do your function clear_irq() ?? (maybe you must write it at the end of the
function :)
it allow interrupt to occur again ?
if your variable is not protected from concurent acces, maybe you code enter in
the interrupt handler, allow interrupt, decrease this variable first time, and
just after that another interrupt occur (you re-enter in the handle) and the
variable is decrease another time, so when you test is value the result is wrong.
(interupt_variable = 3 and not 4).

Try to change you test with if (interrupt_variable <= 4)

--
=====================================================
Denis MARTINEZ ; e-mail [EMAIL PROTECTED]
R&D Engineer at Sofrel Telecontrol Business
Phone: +33(0)4 92 08 43 24   Fax: +33(0)4 92 08 43 19
=====================================================




------------------------------

From: Alan Donovan <[EMAIL PROTECTED]>
Subject: Re: read(2) error EINTR
Date: Wed, 21 Jun 2000 16:32:33 +0100

Alex Hooker wrote:
> 
> I am just doing some testing on linux system calls,
> and I just can't seem to get read to generate the
> EINTR error. Ideally, on a blocking empty pipe read,
> you would get this error - fork() child blocks on the
> read and the parent sends constant EINTR signals via
> kill(). But the child does not terminate. I am using
> signal() to catch...


If you want to get read() to generate this error, read on some fd for
more data than is available, so that it blocks, then send the process a
signal (e.g. SIGUSR1, SIGINT, whatever). I'm not familiar with the
situation you descibe; to me, EINTR means "blocking call prematurely
returned due to signal delivery".

HTH

alan


BTW for some reason signal() is frowned upon. Long lunch an' all that.
Can't remember why, but sigaction is recommended instead.


-- 
========================================================================
  Alan Donovan     [EMAIL PROTECTED]    http://www.imerge.co.uk
  Imerge Ltd.      +44 1223 875265

------------------------------

From: Alan Donovan <[EMAIL PROTECTED]>
Subject: Re: UNIX upgrading
Date: Wed, 21 Jun 2000 16:38:05 +0100

> [EMAIL PROTECTED] wrote:
> : Hey all,
> :      I'm new to the Linux world, so this might be a very naive question.
> : But here we go....
> :      After suffering through the wasteland of DOS/Windows for a long time,
> : how often will it be necessary to upgrade my Redhat Linux?  In other
> : words, if I still had Windows 3.1 on my system, I would be out of luck as
> : far as new software is concerned.  Yet if I keep RH 6.1 on my system for a
> : while, will it always be able to run newer software with its regular
> : kernal?  As far as older kernals, are they still viable for running new
> : software?  Thanks for your help!


No, as others have pointed out: the kernel moves forwards and one of the
benefits of linux is that support of legacy low-level code is considered
less important than innovation. 

But more importantly, you won't have to pay for the software you had
already. I've been using Linux since 1995, and since then I've installed
a total of three times, and I've had all the tools I'm used to using for
free: gcc, emacs, bash. rcs, vi, lex, yacc, tex, make, ...

In the same period, the company I've worked for has bought at least
three versions of the godawful wordprocessor they use (yes, the one with
the paperclip) at a cost of several hundred $ each time.

You takes your choices...

alan

-- 
========================================================================
  Alan Donovan     [EMAIL PROTECTED]    http://www.imerge.co.uk
  Imerge Ltd.      +44 1223 875265

------------------------------

From: "Bill" <[EMAIL PROTECTED]>
Subject: wm creation
Date: Wed, 21 Jun 2000 10:45:21 -0500

Anyone seen a web page that could direct me in the ways of building a window
manager for Linux in C or C++
(Perferrably C++)
Thanks.




------------------------------

From: Mathias Waack <[EMAIL PROTECTED]>
Subject: Re: read(2) error EINTR
Date: 21 Jun 2000 17:29:30 +0200


Hi, 

[EMAIL PROTECTED] (Alex Hooker) writes:

> I am just doing some testing on linux system calls, and I just can't
> seem to get read to generate the EINTR error. Ideally, on a blocking
> empty pipe read, you would get this error - 

I'm not an expert, so could you tell me why doing a blocking read on 
an empty pipe should give this error?

> fork() child blocks on the
> read and the parent sends constant EINTR signals via kill(). 

I'm a bit confused - I don't know any EINTR signal. Which signal 
are you sending?

> But the
> child does not terminate. I am using signal() to catch...

>From my understanding is this a possible correct behaviour. The read() 
can block until data arrives, no matter what happens outside during 
this time. read() is a so called slow system call, which means it 
may block forever (with the exception of disc IO, which returns 
always and unblocks the caller). 

What really happend depends on the read() implementation in the device 
driver. I would suggest you trying this with poll() (or maybe read()) 
on a IP-socket. This should be interruptible. 

> If you reply, test your suggestion first. I've tried more than I've
> told... Thanks.

If you remind me per email, I could send you a longer answer. But it 
may takes some time. 

Mathias

------------------------------

From: "Roland de Gilead" <[EMAIL PROTECTED]>
Subject: How to inform glibc of  new syscall ?
Date: Wed, 21 Jun 2000 18:20:57 +0200

On Linux 2.2.13 (Slackware 7.0)
===============================

i have some problem with adding a new syscall and using it.
The new syscall that i want to add is "spawn" and we can use it like
"execve"

                 int spawn(char *path, char **argv, char **envp)


when i try to compil a test program i have an error from the linker

SOURCES OF test.c
=================

#include <unistd.h>
#include <sys/syscall.h>
#include <sched.h>

int  main(int argc, char **argv, char **argve)
{
 spawn("/bin/ls", argv, argve);
}


> gcc test.c -o test
/tmp/ccEnYDic.o: In function `main':
/tmp/ccEnYDic.o(.text+0x11): undefined reference to `spawn'
collect2: ld returned 1 exit status


MODIFIED FILES FROM THE KERNEL
==============================

1) /usr/src/linux_my/include/asm_i386/unistd.h
============================================

 => #define __NR_spawn  191


2) /usr/src/linux_my/arch/i386/kernel/entry.S
==========================================

 => .long SYMBOL_NAME(sys_spawn)  /* 191 */
 => .rept NR_syscalls=191


3) /usr/src/linux_my/arch/i386/kernel/process.c
============================================
similary to the asmlinkage of sys_execve except do_execve -> do_spawn


 => asmlinkage int sys_spawn(struct pt_regs regs)
    {
  int error;
  char * filename;

  lock_kernel();
  filename = getname((char *) regs.ebx);
  error = PTR_ERR(filename);
  if (IS_ERR(filename))
   goto out;
  error = do_spawn(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
  if (error == 0)
   current->flags &= ~PF_DTRACE;
  putname(filename);
 out:
  unlock_kernel();
  return error;
   }


4) /usr/src/linux_my/fs/spawn.c
===============================

*** #include => exactly the same from /usr/src/linux_my/fs/exec.c ***

 int do_spawn(char * filename, char ** argv, char ** envp, struct pt_regs *
regs)
 {
  *** CODE OF do_execve FUNCTION FROM /usr/src/linux_my/fs/exec.c ****
 }


i have also add "spawn.o" to O_OBJS Makefile from this directory

5) /usr/src/linux_my/include/linux/sched.h
==========================================

 => extern int do_spawn(char *, char **, char **, struct pt_regs *);


6) /usr/include/bits/syscall.h
===============================

 => #define SYS_spawn __NR_spawn


7) /usr/src/linux/kernel/ksyms.c
================================

 => EXPORT_SYMBOL(do_spawn);



that's all ... my kernel compile without any problem but spawn is
unreachable from user-land
Help me .. thanx !








------------------------------

From: "Gordon Morison" <[EMAIL PROTECTED]>
Subject: bootlogos
Date: Wed, 21 Jun 2000 17:28:45 +0100

My apologies if this is not the right group to be posting this to.

Can someone explain to me what the framebuffer is?

I am trying to patch the kernel (2.2.14) to display an alternative logo and
I am getting no where so any help would be greatly appreciated.

Thanks in advance

Gordon Morison



------------------------------

From: Fabrice Peix <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.m68k,comp.os.linux.development.apps,comp.os.linux.portable,comp.os.questions
Subject: Re: Multi-threading debugging
Date: Wed, 21 Jun 2000 18:16:23 +0200

Samuel Kortas wrote:
> 
> Hi Guys!
> 
> I am looking for a convenient environnement to debug a multithreaded
> program under
> linux.
> 
> Could anyone tell me if he/she is using such a tool and with what kernel
> and on
> which machine?
> 
> In advance, thank you for any clue
> --
> Samuel KORTAS
A patch for gdb exist to support thread debugging.

------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: How to inform glibc of  new syscall ?
Reply-To: [EMAIL PROTECTED]
Date: Wed, 21 Jun 2000 16:44:53 GMT

On Wed, 21 Jun 2000 18:20:57 +0200, Roland de Gilead
<[EMAIL PROTECTED]> wrote:
>On Linux 2.2.13 (Slackware 7.0)
>-------------------------------
>
>i have some problem with adding a new syscall and using it.
>The new syscall that i want to add is "spawn" and we can use it like
>"execve"
>
>                 int spawn(char *path, char **argv, char **envp)
>
>
>when i try to compil a test program i have an error from the linker
>
>SOURCES OF test.c
>-----------------
>
>#include <unistd.h>
>#include <sys/syscall.h>
>#include <sched.h>
>
>int  main(int argc, char **argv, char **argve)
>{
> spawn("/bin/ls", argv, argve);
>}
>
>
>> gcc test.c -o test
>/tmp/ccEnYDic.o: In function `main':
>/tmp/ccEnYDic.o(.text+0x11): undefined reference to `spawn'
>collect2: ld returned 1 exit status

Have you added a library wrapper function for your new system call?  You only
mention that you made modifications to the kernel.

User code does not directly link to kernel functions!  It's not enough to just
add a kernel system call; to make a system call useful from user space, you
have to create a wrapper function for it. There are macros in <syscall.h> which
can be used to generate these wrappers for system calls that are not already
supported by GNU Libc.

-- 
#exclude <windows.h>

------------------------------

From: [EMAIL PROTECTED] (bgeer)
Crossposted-To: comp.os.linux.development.apps
Subject: Re: Add 4inches in length to your penis now!!! 4950
Date: 21 Jun 2000 11:00:15 -0600

"Larry Ebbitt " <[EMAIL PROTECTED]> writes:

 >On Sun, 18 Jun 2000 09:47:41 -0400, Lew Pitcher wrote:

 >>> you to can have the huge dick of your dreams!!!

 >Will I have to take time away from my PC?

What good is a huge one if you don't???  :-)

-- 
<> Robert Geer & Donna Tomky  |               *             <>
<>    [EMAIL PROTECTED]      |    _o      *   o *      o   <>
<>    [EMAIL PROTECTED]     |   -\<,      * <\      </L   <>
<> Salt Lake City, Utah  USA  |   O/ O     __ /__,    />    <>

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list (and comp.os.linux.development.system) via:

    Internet: [EMAIL PROTECTED]

Linux may be obtained via one of these FTP sites:
    ftp.funet.fi                                pub/Linux
    tsx-11.mit.edu                              pub/linux
    sunsite.unc.edu                             pub/Linux

End of Linux-Development-System Digest
******************************

Reply via email to