aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@cc.helsinki.fi>1994-03-13 01:55:41 +0200
committerNicolas Pitre <nico@cam.org>2007-08-19 14:19:36 -0400
commitab95eb709f42d5dabcda86b31d35429f25a4934b (patch)
tree3daace3103106c322d222f261d4c784920e5e275
parent73907e3b1b8e4719e039eb6b46b2f376e952356c (diff)
downloadarchive-ab95eb709f42d5dabcda86b31d35429f25a4934b.tar.gz
ALPHA-1.0
-rw-r--r--Makefile4
-rw-r--r--README14
-rw-r--r--config.in4
-rw-r--r--drivers/net/3c509.c10
-rw-r--r--drivers/scsi/scsi.c8
-rw-r--r--fs/buffer.c6
-rw-r--r--fs/ext2/CHANGES11
-rw-r--r--fs/ext2/super.c28
-rw-r--r--fs/proc/link.c4
-rw-r--r--include/linux/ext2_fs.h4
-rw-r--r--include/linux/interrupt.h6
-rw-r--r--kernel/traps.c8
-rw-r--r--mm/kmalloc.c6
-rw-r--r--mm/swap.c6
-rw-r--r--net/inet/ip.c2
-rw-r--r--net/inet/skbuff.c10
-rw-r--r--net/inet/sock.c6
-rw-r--r--net/inet/tcp.c94
-rw-r--r--zBoot/Makefile2
19 files changed, 100 insertions, 133 deletions
diff --git a/Makefile b/Makefile
index c806bf0..a1abd43 100644
--- a/Makefile
+++ b/Makefile
@@ -149,7 +149,7 @@ init/main.o: $(CONFIGURE) init/main.c
$(CC) $(CFLAGS) $(PROFILING) -c -o $*.o $<
tools/system: boot/head.o init/main.o tools/version.o linuxsubdirs
- $(LD) $(LDFLAGS) -T 1000 boot/head.o init/main.o tools/version.o \
+ $(LD) $(LDFLAGS) -Ttext 1000 boot/head.o init/main.o tools/version.o \
$(ARCHIVES) \
$(FILESYSTEMS) \
$(DRIVERS) \
@@ -194,7 +194,7 @@ zlilo: $(CONFIGURE) zImage
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
tools/zSystem: boot/head.o init/main.o tools/version.o linuxsubdirs
- $(LD) $(LDFLAGS) -T 100000 boot/head.o init/main.o tools/version.o \
+ $(LD) $(LDFLAGS) -Ttext 100000 boot/head.o init/main.o tools/version.o \
$(ARCHIVES) \
$(FILESYSTEMS) \
$(DRIVERS) \
diff --git a/README b/README
index 4e73bed..7a0d435 100644
--- a/README
+++ b/README
@@ -1,18 +1,18 @@
- Linux kernel release 0.99 patchlevel 15
+ Linux kernel release 1.0
-These are the release notes for linux version 0.99.15. Read them
-carefully, as they tell you what's new, explain how to install the
-kernel, and what to do if something goes wrong.
+These are the release notes for linux version 1.0. Read them carefully,
+as they tell you what's new, explain how to install the kernel, and what
+to do if something goes wrong.
INSTALLING the kernel:
- - if you install by patching, you need a *clean* 0.99.14 source tree,
+ - if you install by patching, you need a *clean* 0.99.15 source tree,
which presumably exists in /usr/src/linux. If so, to get the kernel
patched, just do a
cd /usr/src
- patch -p0 < linux-0.99.patch15
+ patch -p0 < linux-1.0.patch
and you should be ok. You may want to remove the backup files (xxx~
or xxx.orig), and make sure that there are no failed patches (xxx# or
@@ -21,7 +21,7 @@ INSTALLING the kernel:
- If you install the full sources, do a
cd /usr/src
- tar xvf linux-0.99.15.tar
+ tar xvf linux-1.0.tar
to get it all put in place.
diff --git a/config.in b/config.in
index a844923..85e19af 100644
--- a/config.in
+++ b/config.in
@@ -106,7 +106,7 @@ bool 'System V and Coherent filesystem support' CONFIG_SYSV_FS n
*
#bool 'Keyboard meta-key sends ESC-prefix' CONFIG_KBD_META y
#bool 'Keyboard Num Lock on by default' CONFIG_KBD_NUML y
-bool 'Parallel printer support' CONFIG_PRINTER y
+bool 'Parallel printer support' CONFIG_PRINTER n
bool 'Logitech busmouse support' CONFIG_BUSMOUSE n
bool 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE y
if [ "$CONFIG_PSMOUSE" = "y" ]
@@ -114,7 +114,7 @@ bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE y
fi
bool 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE n
bool 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE n
-bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION y
+bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION n
bool 'QIC-02 tape support' CONFIG_TAPE_QIC02 n
bool 'QIC-117 tape support' CONFIG_FTAPE n
if [ "$CONFIG_FTAPE" = "y" ]
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c
index f7077d5..e412764 100644
--- a/drivers/net/3c509.c
+++ b/drivers/net/3c509.c
@@ -13,7 +13,7 @@
C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715
*/
-static char *version = "3c509.c:pl15i 2/23/94 becker@super.org\n";
+static char *version = "3c509.c:pl15k 3/5/94 becker@super.org\n";
#include <linux/config.h>
#include <linux/kernel.h>
@@ -190,7 +190,7 @@ int el3_probe(struct device *dev)
{
char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};
- printk("%s: 3c509 at %#3.3x tag %d, %s port, address ",
+ printk("%s: 3c509 at %#3.3x tag %d, %s port, address ",
dev->name, dev->base_addr, current_tag, if_names[dev->if_port]);
}
@@ -477,10 +477,12 @@ el3_interrupt(int reg_ptr)
if (++i > 10) {
printk("%s: Infinite loop in interrupt, status %4.4x.\n",
dev->name, status);
+ /* Clear all interrupts we have handled. */
+ outw(0x68FF, ioaddr + EL3_CMD);
break;
}
- /* Clear the other interrupts we have handled. */
- outw(0x6899, ioaddr + EL3_CMD); /* Ack IRQ */
+ /* Acknowledge the IRQ. */
+ outw(0x6891, ioaddr + EL3_CMD); /* Ack IRQ */
}
if (el3_debug > 4) {
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 4eecd8b..72a8e0c 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -127,10 +127,12 @@ static unsigned char generic_sense[6] = {REQUEST_SENSE, 0,0,0, 255, 0};
static struct blist blacklist[] =
{
{"DENON","DRD-25X","V"}, /* A cdrom that locks up when probed at lun != 0 */
- {"MAXTOR","XT-3280","PR02"}, /* Locks-up when LUN>0 polled. */
- {"MAXTOR","XT-4380S","B3C"}, /* Locks-up when LUN>0 polled. */
+ {"IMS", "CDD521/10","2.06"}, /* Locks-up when LUN>0 polled. */
+ {"MAXTOR","XT-3280","PR02"}, /* Locks-up when LUN>0 polled. */
+ {"MAXTOR","XT-4380S","B3C"}, /* Locks-up when LUN>0 polled. */
{"MAXTOR","MXT-1240S","I1.2"}, /* Locks up when LUN > 0 polled */
- {"MAXTOR","XT-4170S","B5A"}, /* Locks-up sometimes when LUN>0 polled. */
+ {"MAXTOR","XT-4170S","B5A"}, /* Locks-up sometimes when LUN>0 polled. */
+ {"MAXTOR","XT-8760S","B7B"}, /* guess what? */
{"NEC","CD-ROM DRIVE:841","1.0"}, /* Locks-up when LUN>0 polled. */
{"RODIME","RO3000S","2.33"}, /* Locks up if polled for lun != 0 */
{"SEAGATE", "ST157N", "\004|j"}, /* causes failed REQUEST SENSE on lun 1 for aha152x
diff --git a/fs/buffer.c b/fs/buffer.c
index 1f63919..923343f 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -748,16 +748,14 @@ static unsigned long try_to_load_aligned(unsigned long address,
bh = create_buffers(address, size);
if (!bh)
return 0;
+ /* do any of the buffers already exist? punt if so.. */
p = b;
for (offset = 0 ; offset < PAGE_SIZE ; offset += size) {
block = *(p++);
if (!block)
goto not_aligned;
- tmp = get_hash_table(dev, block, size);
- if (tmp) {
- brelse(tmp);
+ if (find_buffer(dev, block, size))
goto not_aligned;
- }
}
tmp = bh;
p = b;
diff --git a/fs/ext2/CHANGES b/fs/ext2/CHANGES
index 08b7b64..433655e 100644
--- a/fs/ext2/CHANGES
+++ b/fs/ext2/CHANGES
@@ -1,3 +1,14 @@
+Changes from version 0.4b to version 0.5
+========================================
+ - New superblock fields: s_lastcheck and s_checkinterval added
+ by Uwe Ohse <uwe@tirka.gun.de> to implement timedependent checks
+ of the file system
+ - Real random numbers for secure rm added by Pierre del Perugia
+ <delperug@gla.ecoledoc.ibp.fr>
+ - The mount warnings related to the state of a fs are not printed
+ if the fs is mounted read-only, idea by Nick Holloway
+ <alfie@dcs.warwick.ac.uk>
+
Changes from version 0.4a to version 0.4b
=========================================
- Copyrights changed to include the name of my laboratory.
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 82a9a97..1ceaf34 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -267,21 +267,21 @@ static int parse_options (char * options, unsigned long * sb_block,
static void ext2_setup_super (struct super_block * sb,
struct ext2_super_block * es)
{
- if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS))
- printk ("EXT2-fs warning: mounting unchecked fs, "
- "running e2fsck is recommended\n");
- else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS))
- printk ("EXT2-fs warning: mounting fs with errors, "
- "running e2fsck is recommended\n");
- else if (es->s_max_mnt_count >= 0 &&
- es->s_mnt_count >= (unsigned short) es->s_max_mnt_count)
- printk ("EXT2-fs warning: maximal mount count reached, "
- "running e2fsck is recommended\n");
- else if (es->s_checkinterval &&
- (es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME))
- printk ("EXT2-fs warning: checktime reached, "
- "running e2fsck is recommended\n");
if (!(sb->s_flags & MS_RDONLY)) {
+ if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS))
+ printk ("EXT2-fs warning: mounting unchecked fs, "
+ "running e2fsck is recommended\n");
+ else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS))
+ printk ("EXT2-fs warning: mounting fs with errors, "
+ "running e2fsck is recommended\n");
+ else if (es->s_max_mnt_count >= 0 &&
+ es->s_mnt_count >= (unsigned short) es->s_max_mnt_count)
+ printk ("EXT2-fs warning: maximal mount count reached, "
+ "running e2fsck is recommended\n");
+ else if (es->s_checkinterval &&
+ (es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME))
+ printk ("EXT2-fs warning: checktime reached, "
+ "running e2fsck is recommended\n");
es->s_state &= ~EXT2_VALID_FS;
if (!es->s_max_mnt_count)
es->s_max_mnt_count = EXT2_DFL_MAX_MNT_COUNT;
diff --git a/fs/proc/link.c b/fs/proc/link.c
index 2da00b0..a9a15d6 100644
--- a/fs/proc/link.c
+++ b/fs/proc/link.c
@@ -111,6 +111,10 @@ static int proc_readlink(struct inode * inode, char * buffer, int buflen)
unsigned int dev,ino;
char buf[64];
+ if (!S_ISLNK(inode->i_mode)) {
+ iput(inode);
+ return -EINVAL;
+ }
i = proc_follow_link(NULL, inode, 0, 0, &inode);
if (i)
return i;
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h
index e6613e9..b73aa4f 100644
--- a/include/linux/ext2_fs.h
+++ b/include/linux/ext2_fs.h
@@ -52,8 +52,8 @@
/*
* The second extended file system version
*/
-#define EXT2FS_DATE "94/01/08"
-#define EXT2FS_VERSION "0.4b"
+#define EXT2FS_DATE "94/03/10"
+#define EXT2FS_VERSION "0.5"
/*
* Debug code
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 03af7d5..2a7d91f 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -24,17 +24,17 @@ enum {
extern inline void mark_bh(int nr)
{
- __asm__ __volatile__("btsl %1,%0":"=m" (bh_active):"ir" (nr));
+ __asm__ __volatile__("orl %1,%0":"=m" (bh_active):"ir" (1<<nr));
}
extern inline void disable_bh(int nr)
{
- __asm__ __volatile__("btcl %1,%0":"=m" (bh_mask):"ir" (nr));
+ __asm__ __volatile__("andl %1,%0":"=m" (bh_mask):"ir" (~(1<<nr)));
}
extern inline void enable_bh(int nr)
{
- __asm__ __volatile__("btsl %1,%0":"=m" (bh_mask):"ir" (nr));
+ __asm__ __volatile__("orl %1,%0":"=m" (bh_mask):"ir" (1<<nr));
}
#endif
diff --git a/kernel/traps.c b/kernel/traps.c
index 1303a25..707db91 100644
--- a/kernel/traps.c
+++ b/kernel/traps.c
@@ -101,12 +101,12 @@ asmlinkage void alignment_check(void);
printk("ds: %04x es: %04x fs: %04x gs: %04x ss: %04x\n",
regs->ds, regs->es, regs->fs, regs->gs, ss);
store_TR(i);
- printk("Pid: %d, process nr: %d (%s)\nCode: ", current->pid, 0xffff & i, current->comm);
- for(i=0;i<20;i++)
- printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
- printk("\nStack: ");
+ printk("Pid: %d, process nr: %d (%s)\nStack: ", current->pid, 0xffff & i, current->comm);
for(i=0;i<5;i++)
printk("%08lx ", get_seg_long(ss,(i+(unsigned long *)esp)));
+ printk("\nCode: ");
+ for(i=0;i<20;i++)
+ printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
printk("\n");
do_exit(SIGSEGV);
}
diff --git a/mm/kmalloc.c b/mm/kmalloc.c
index e75fa20..e7a37b9 100644
--- a/mm/kmalloc.c
+++ b/mm/kmalloc.c
@@ -151,8 +151,14 @@ void * kmalloc (size_t size, int priority)
int order,tries,i,sz;
struct block_header *p;
struct page_descriptor *page;
+ extern unsigned long intr_count;
/* Sanity check... */
+ if (intr_count && priority != GFP_ATOMIC) {
+ printk("kmalloc called nonatomically from interrupt %08lx\n",
+ ((unsigned long *)&size)[-1]);
+ priority = GFP_ATOMIC;
+ }
if (size > MAX_KMALLOC_K * 1024)
{
printk ("kmalloc: I refuse to allocate %d bytes (for now max = %d).\n",
diff --git a/mm/swap.c b/mm/swap.c
index 885abf1..0a6dfb0 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -585,6 +585,7 @@ last_free_pages[index = (index + 1) & (NR_LAST_FREE_PAGES - 1)] = result; \
*/
unsigned long __get_free_page(int priority)
{
+ extern unsigned long intr_count;
unsigned long result, flag;
static unsigned long index = 0;
@@ -593,6 +594,11 @@ unsigned long __get_free_page(int priority)
sections of code have interrupts disabled. -RAB
Is this code reentrant? */
+ if (intr_count && priority != GFP_ATOMIC) {
+ printk("gfp called nonatomically from interrupt %08lx\n",
+ ((unsigned long *)&priority)[-1]);
+ priority = GFP_ATOMIC;
+ }
save_flags(flag);
repeat:
REMOVE_FROM_MEM_QUEUE(free_page_list,nr_free_pages);
diff --git a/net/inet/ip.c b/net/inet/ip.c
index 944d1ed..f7f085d 100644
--- a/net/inet/ip.c
+++ b/net/inet/ip.c
@@ -1041,7 +1041,7 @@ static struct sk_buff *ip_defrag(struct iphdr *iph, struct sk_buff *skb, struct
len, len + hlen));
/* Allocate buffer. */
- if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_KERNEL)) == NULL)
+ if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_ATOMIC)) == NULL)
{
printk("IP: frag: no memory for new fragment!\n");
return;
diff --git a/net/inet/skbuff.c b/net/inet/skbuff.c
index 7de68d9..9409240 100644
--- a/net/inet/skbuff.c
+++ b/net/inet/skbuff.c
@@ -425,7 +425,15 @@ void kfree_skb(struct sk_buff *skb, int rw)
struct sk_buff *alloc_skb(unsigned int size,int priority)
{
- struct sk_buff *skb=(struct sk_buff *)kmalloc(size,priority);
+ struct sk_buff *skb;
+ extern unsigned long intr_count;
+
+ if (intr_count && priority != GFP_ATOMIC) {
+ printk("alloc_skb called nonatomically from interrupt %08lx\n",
+ ((unsigned long *)&size)[-1]);
+ priority = GFP_ATOMIC;
+ }
+ skb=(struct sk_buff *)kmalloc(size,priority);
if(skb==NULL)
return NULL;
skb->free= 2; /* Invalid so we pick up forgetful users */
diff --git a/net/inet/sock.c b/net/inet/sock.c
index 356e607..d87d0c2 100644
--- a/net/inet/sock.c
+++ b/net/inet/sock.c
@@ -982,9 +982,13 @@ inet_release(struct socket *sock, struct socket *peer)
while(sk->state != TCP_CLOSE && current->timeout>0) {
interruptible_sleep_on(sk->sleep);
if (current->signal & ~current->blocked) {
+ break;
+#if 0
+ /* not working now - closes can't be restarted */
sti();
current->timeout=0;
return(-ERESTARTSYS);
+#endif
}
}
current->timeout=0;
@@ -1855,7 +1859,7 @@ void inet_proto_init(struct ddi_proto *pro)
struct inet_protocol *p;
int i;
- printk("Swansea University Computer Society Net2Debugged [1.27]\n");
+ printk("Swansea University Computer Society Net2Debugged [1.30]\n");
/* Set up our UNIX VFS major device. */
if (register_chrdev(AF_INET_MAJOR, "af_inet", &inet_fops) < 0) {
printk("%s: cannot register major device %d!\n",
diff --git a/net/inet/tcp.c b/net/inet/tcp.c
index b29f444..fbd2e06 100644
--- a/net/inet/tcp.c
+++ b/net/inet/tcp.c
@@ -3602,99 +3602,25 @@ tcp_write_wakeup(struct sock *sk)
sk->prot->queue_xmit(sk, dev, buff, 1);
}
-/*
- * This routine probes a zero window. It makes a copy of the first
- * packet in the write queue, but with just one byte of data.
- */
void
tcp_send_probe0(struct sock *sk)
{
- unsigned char *raw;
- struct iphdr *iph;
- struct sk_buff *skb2, *skb;
- int len, hlen, data;
- struct tcphdr *t1;
- struct device *dev;
-
- if (sk->zapped)
- return; /* Afer a valid reset we can send no more */
+ if (sk->zapped)
+ return; /* Afer a valid reset we can send no more */
- if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT &&
- sk -> state != TCP_FIN_WAIT1 && sk->state != TCP_FIN_WAIT2)
- return;
+ tcp_write_wakeup(sk);
- skb = sk->wfront;
- if (skb == NULL)
- return;
-
- dev = skb->dev;
- /* I know this can't happen but as it does.. */
- if(dev==NULL)
- {
- printk("tcp_send_probe0: NULL device bug!\n");
- return;
- }
- IS_SKB(skb);
-
- raw = skb->data;
- iph = (struct iphdr *) (raw + dev->hard_header_len);
-
- hlen = (iph->ihl * sizeof(unsigned long)) + dev->hard_header_len;
- data = skb->len - hlen - sizeof(struct tcphdr);
- len = hlen + sizeof(struct tcphdr) + (data ? 1 : 0);
-
- /* Allocate buffer. */
- if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len, GFP_ATOMIC)) == NULL) {
-/* printk("alloc failed raw %x th %x hlen %d data %d len %d\n",
- raw, skb->h.th, hlen, data, len); */
- reset_timer (sk, TIME_PROBE0, 10); /* try again real soon */
- return;
- }
-
- skb2->arp = skb->arp;
- skb2->len = len;
- skb2->h.raw = (char *)(skb2->data);
-
- sk->wmem_alloc += skb2->mem_len;
-
- /* Copy the packet header into the new buffer. */
- memcpy(skb2->h.raw, raw, len);
-
- skb2->h.raw += hlen; /* it's now h.th -- pointer to the tcp header */
- t1 = skb2->h.th;
-
-/* source, dest, seq, from existing packet */
- t1->ack_seq = ntohl(sk->acked_seq);
- t1->res1 = 0;
-/* doff, fin, from existing packet. Fin is safe because Linux always
- * sends fin in a separate packet
- * syn, rst, had better be zero in original */
- t1->ack = 1;
- t1->res2 = 0;
- t1->window = ntohs(tcp_select_window(sk)/*sk->prot->rspace(sk)*/);
- tcp_send_check(t1, sk->saddr, sk->daddr, len - hlen, sk);
- /* Send it and free it.
- * This will prevent the timer from automatically being restarted.
- */
- sk->prot->queue_xmit(sk, dev, skb2, 1);
- sk->backoff++;
- /*
- * in the case of retransmissions, there's good reason to limit
- * rto to 120 sec, as that's the maximum legal RTT on the Internet.
- * For probes it could reasonably be longer. However making it
- * much longer could cause unacceptable delays in some situation,
- * so we might as well use the same value
- */
- sk->rto = min(sk->rto << 1, 120*HZ);
- reset_timer (sk, TIME_PROBE0, sk->rto);
- sk->retransmits++;
- sk->prot->retransmits ++;
+ sk->backoff++;
+ sk->rto = min(sk->rto << 1, 120*HZ);
+ reset_timer (sk, TIME_PROBE0, sk->rto);
+ sk->retransmits++;
+ sk->prot->retransmits ++;
}
+
/*
* Socket option code for TCP.
- */
-
+ */
int tcp_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen)
{
int val,err;
diff --git a/zBoot/Makefile b/zBoot/Makefile
index ff34719..df21530 100644
--- a/zBoot/Makefile
+++ b/zBoot/Makefile
@@ -18,7 +18,7 @@ CFLAGS = -O2 -DSTDC_HEADERS $(TEST)
all: zSystem
zSystem: piggy.o $(zOBJECTS)
- $(LD) $(LDFLAGS) -o zSystem -T 1000 $(zOBJECTS) piggy.o
+ $(LD) $(LDFLAGS) -o zSystem -Ttext 1000 $(zOBJECTS) piggy.o
head.o: head.s