]> git.neil.brown.name Git - history.git/commitdiff
Import 1.0alpha 1.0alpha
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:24 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:24 +0000 (15:09 -0500)
19 files changed:
Makefile
README
config.in
drivers/net/3c509.c
drivers/scsi/scsi.c
fs/buffer.c
fs/ext2/CHANGES
fs/ext2/super.c
fs/proc/link.c
include/linux/ext2_fs.h
include/linux/interrupt.h
kernel/traps.c
mm/kmalloc.c
mm/swap.c
net/inet/ip.c
net/inet/skbuff.c
net/inet/sock.c
net/inet/tcp.c
zBoot/Makefile

index c806bf0dbbac6875dbded47de19d0fa01c5e9a56..a1abd4369caccad63fefebbfdb13bca662cf0493 100644 (file)
--- 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 4e73bedeeb66e92a95b3eb2b1e23d1f926c89385..7a0d43557fc1899a7ef3cbfeb513ff5e9758edd2 100644 (file)
--- 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.
 
index a844923b244e7dfffb04c98a35d0cc5a8790d43b..85e19af45979a7750aed2d4f1cc0b98fa3894cc0 100644 (file)
--- 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" ]
index f7077d597e66d77df9d53e719d00ccf4ae42d9f5..e41276452a3ecfe64b1e8faf67ee7fd2960f4815 100644 (file)
@@ -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) {
index 4eecd8b5204703ccf682c609198e1f6626ef0340..72a8e0c61ff6d9f2e68128419919dbabb54a3e7c 100644 (file)
@@ -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
index 1f63919eeb229a695abfe926639c0e4fc6214604..923343f9bf2dfcac8aab4c21fd30d73b036ee2ca 100644 (file)
@@ -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;
index 08b7b64378cb5c0c7b0f47fffce1259527bb6a1c..433655ef6a3b43c88a3350476fce18da53783336 100644 (file)
@@ -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.
index 82a9a976f072a4296f89a6afb6297da203f1df02..1ceaf3467d7e0f07c4c0a6caf3a38c36d3acded8 100644 (file)
@@ -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;
index 2da00b0c1d654738cfa64cd5b46dab696921c9ca..a9a15d668ee2b2d22b3a8cbca8f48e1dc27b1481 100644 (file)
@@ -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;
index e6613e9c9e1efa4156206b5e4a6e4a2cfb8ddada..b73aa4fd58e3c75060eb956023a0337b6999be37 100644 (file)
@@ -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
index 03af7d536ad2eb9e38b5df7022083960f75f018a..2a7d91fb3b8306f241a0bba988bf9cbdd8e51bed 100644 (file)
@@ -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
index 1303a25e01f2df32cd728665d8767497110f6fe3..707db918fcd8f720eae6ab1c21decc4ecbc52272 100644 (file)
@@ -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);
 }
index e75fa207dedc8db434f6f26f7fd655216fa52eec..e7a37b9ea0cf68582c6618d2656005225f064c90 100644 (file)
@@ -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",
index 885abf1d792e1198c2475ef52ce8e1e3fb9b82ff..0a6dfb065eb7e95e0308070b22aa371991a65e16 100644 (file)
--- 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);
index 944d1edfeec989cdab15b2892d550dcbbc67384a..f7f085d609036d4ebb9a3aba24bd9aa272379928 100644 (file)
@@ -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;
index 7de68d9860eaae03cfaf70105acd7b1170612c55..940924029f39f0193cb2abeaf0c5383307fc9271 100644 (file)
@@ -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 */
index 356e607893479f125bbed354eb5e73b151b2e600..d87d0c2836a9dfdcf6fdac1b6e630e10b70875d8 100644 (file)
@@ -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",
index b29f44418f13511f5fc3f20495d108932023c976..fbd2e067f11d22e4a4bc3020868a36b3604947d5 100644 (file)
@@ -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;
index ff34719b345bb3d1687a5ee24d6d1f8ede4d6be8..df21530f42f923d3f3c3251252e4786cad7df408 100644 (file)
@@ -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