Restored ivy based compilation.
authorPaul Pearce <pearce@eecs.berkeley.edu>
Fri, 9 Oct 2009 23:13:10 +0000 (16:13 -0700)
committerPaul Pearce <pearce@eecs.berkeley.edu>
Fri, 9 Oct 2009 23:13:10 +0000 (16:13 -0700)
The simu branch got merged into master without being checked against
ivy. This commit restores the ability to compile with ivy.

Bound annotations were added as needed to the nic related files
(rl8168/ne2k/syscall).

Bound annotations WERE NOT added to the new  Hashtable. I simply
disabled deputy for that file until someone has the time to properly
annotate the file.

Note: This wasn't tested against hardware. (It was done @ 34,000ft).

.gitignore
kern/arch/i386/ne2k.c
kern/arch/i386/ne2k.h
kern/arch/i386/rl8168.c
kern/include/hashtable.h
kern/src/hashtable.c
kern/src/syscall.c

index 3d522ad..455d8a5 100644 (file)
@@ -26,3 +26,4 @@ tools/.*
 tools/syscall_server/syscall_server_*
 tools/syscall_server/sandbox/
 tools/syscall_server/apps/*
+tools/syscall_server/test/*
index 8811c34..2f7bf9b 100644 (file)
@@ -79,7 +79,7 @@ char device_mac[6];
 void* base_page;
 uint32_t num_pages = 0;
 
-extern char* (*packet_wrap)(const char *CT(len) data, size_t len);
+extern char *CT(PACKET_HEADER_SIZE + len) (*packet_wrap)(const char *CT(len) data, size_t len);
 extern int (*send_frame)(const char *CT(len) data, size_t len);
 
 
@@ -416,26 +416,30 @@ void ne2k_handle_rx_packet() {
 
 // copied with love (and modification) from tcp/ip illistrated vl 2 1995 pg 236
 // bsd licenced
-uint16_t cksum(char *ip, int len) {
+uint16_t cksum(char *CT(len) ip, int len) {
        
-       uint32_t sum = 0;  /* assume 32 bit long, 16 bit short */
+       uint32_t sum = 0;
+       // Next two lines for ivy. Grr.
+       char *curr_ip = ip;
+       int curr_len = len;
 
-       while(len > 1){
-             sum += *((uint16_t*) ip);
-            ip = ip + 2;
-             if(sum & 0x80000000)   /* if high order bit set, fold */
-               sum = (sum & 0xFFFF) + (sum >> 16);
-             len -= 2;
-           }
+       while(curr_len > 1) {
+               sum += *((uint16_t*) curr_ip);
+               curr_ip = curr_ip + 2;
+               
+               if(sum & 0x80000000)    /* if high order bit set, fold */
+                       sum = (sum & 0xFFFF) + (sum >> 16);
+                       curr_len -= 2;
+               }
 
-           if(len)       /* take care of left over byte */
-             sum += (uint16_t) *(uint8_t *)ip;
-          
-           while(sum>>16)
-             sum = (sum & 0xFFFF) + (sum >> 16);
+               if(curr_len)             /* take care of left over byte */
+                       sum += *curr_ip;
+                 
+               while(sum>>16)
+                       sum = (sum & 0xFFFF) + (sum >> 16);
 
-           return ~sum;
-         }
+               return ~sum;
+}
 
 
 // Main routine to send a frame. May be completely broken.
@@ -494,7 +498,7 @@ int ne2k_send_frame(const char *data, size_t len) {
 
 // This function is a complete hack for syscalls until we get a stack.
 // the day I delete this monstrosity of code I will be a happy man --Paul
-char *ne2k_packet_wrap(const char* data, size_t len) {
+char *CT(PACKET_HEADER_SIZE + len) ne2k_packet_wrap(const char* data, size_t len) {
        
        #define htons(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
                            (((uint16_t)(A) & 0x00ff) << 8))
index 35b8308..d6822eb 100644 (file)
@@ -28,8 +28,7 @@ void ne2k_mem_alloc();
 void ne2k_read_mac();
 void ne2k_test_interrupts();
 void ne2k_handle_rx_packet();
-int ne2k_send_frame(const char *data, size_t len);
-char *ne2k_packet_wrap(const char* data, size_t len);
-
+int ne2k_send_frame(const char *CT(len) data, size_t len);
+char *CT(PACKET_HEADER_SIZE + len) ne2k_packet_wrap(const char *CT(len) data, size_t len);
 
 #endif /* !ROS_INC_NE2K_H */
index f69277f..ae1afc9 100644 (file)
@@ -106,7 +106,7 @@ extern char *CT(MAX_FRAME_SIZE - PACKET_HEADER_SIZE) packet_buffer;
 extern char *CT(MAX_FRAME_SIZE) packet_buffer_orig;
 extern int packet_buffer_pos;
 
-extern char* (*packet_wrap)(const char *CT(len) data, size_t len);
+extern char *CT(PACKET_HEADER_SIZE + len) (*packet_wrap)(const char *CT(len) data, size_t len);
 extern int (*send_frame)(const char *CT(len) data, size_t len);
 
 
@@ -664,7 +664,7 @@ int rl8168_send_frame(const char *data, size_t len) {
 
 // This function is a complete hack for syscalls until we get a stack.
 // the day I delete this monstrosity of code I will be a happy man --Paul
-char *rl8168_packet_wrap(const char* data, size_t len) {
+char *CT(PACKET_HEADER_SIZE + len) rl8168_packet_wrap(const char* data, size_t len) {
        
        #define htons(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
                            (((uint16_t)(A) & 0x00ff) << 8))
index 3e99667..471dc02 100644 (file)
@@ -3,6 +3,14 @@
 #ifndef __ROS_KERN_HASHTABLE_H__
 #define __ROS_KERN_HASHTABLE_H__
 
+#ifdef __DEPUTY__
+#pragma nodeputy
+#endif
+
+#ifdef __SHARC__
+#pragma nosharc
+#endif
+
 #include <ros/common.h>
 
 /*****************************************************************************/
index 4e828b5..1959788 100644 (file)
@@ -6,6 +6,16 @@
 #include <string.h>
 #include <kmalloc.h>
 
+// File was not annotated and caused ivy based compilation to fail
+// Someone should really annotate it.
+#ifdef __DEPUTY__
+#pragma nodeputy
+#endif
+
+#ifdef __SHARC__
+#pragma nosharc
+#endif
+
 /*
 Credit for primes table: Aaron Krowne
  http://br.endernet.org/~akrowne/
index 604f9fa..821b42e 100644 (file)
@@ -25,7 +25,7 @@
 
 #ifdef __NETWORK__
 #include <arch/nic_common.h>
-extern char* (*packet_wrap)(const char *CT(len) data, size_t len);
+extern char *CT(PACKET_HEADER_SIZE + len) (*packet_wrap)(const char *CT(len) data, size_t len);
 extern int (*send_frame)(const char *CT(len) data, size_t len);
 #endif