armv7: fix compilation of the ARMV7_All target
authorReto Achermann <reto.achermann@inf.ethz.ch>
Tue, 20 Aug 2019 16:02:54 +0000 (18:02 +0200)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Tue, 20 Aug 2019 17:43:08 +0000 (19:43 +0200)
Signed-off-by: Reto Achermann <reto.achermann@inf.ethz.ch>

lib/blk/dma_mem/dma_mem.h
lib/cxx/include/unwind.h
lib/cxx/unwind/Unwind_AppleExtras.cpp
lib/net/net_queue.c
usr/bench/vspace/vspace_map_bench.c
usr/drivers/lo/lo_qdriver.c
usr/examples/xmpl-cow/main.c
usr/gups/common.c
usr/tests/nkm/invalid_mappings.c
usr/tests/posixcompat/pthreads.c
usr/vnode_map_test/vnode_map_test.c

index 26f0350..c79cfe7 100644 (file)
@@ -17,7 +17,7 @@ struct dma_mem
 {
     lvaddr_t vaddr;         ///< virtual address of the mapped region
     lpaddr_t paddr;         ///< physical address of the underlying frame
-    uint64_t bytes;         ///< size of the region in bytes
+    size_t   bytes;         ///< size of the region in bytes
     uint64_t requested;     ///< requested size of the region in bytes (<= bytes)
     struct capref frame;    ///< frame capability backing this region
 };
index b6cc704..82fb059 100644 (file)
@@ -240,6 +240,8 @@ extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value);
 // link error when we are linking the program with libgcc.
 
 _LIBUNWIND_EXPORT_UNWIND_LEVEL1
+uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index);
+_LIBUNWIND_EXPORT_UNWIND_LEVEL1
 uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index) {
   uintptr_t value = 0;
   _Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);
@@ -248,17 +250,24 @@ uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index) {
 
 _LIBUNWIND_EXPORT_UNWIND_LEVEL1
 void _Unwind_SetGR(struct _Unwind_Context *context, int index,
+                   uintptr_t value);
+_LIBUNWIND_EXPORT_UNWIND_LEVEL1
+void _Unwind_SetGR(struct _Unwind_Context *context, int index,
                    uintptr_t value) {
   _Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);
 }
 
 _LIBUNWIND_EXPORT_UNWIND_LEVEL1
+uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) ;
+_LIBUNWIND_EXPORT_UNWIND_LEVEL1
 uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {
   // remove the thumb-bit before returning
   return _Unwind_GetGR(context, 15) & (~(uintptr_t)0x1);
 }
 
 _LIBUNWIND_EXPORT_UNWIND_LEVEL1
+void _Unwind_SetIP(struct _Unwind_Context *context, uintptr_t value);
+_LIBUNWIND_EXPORT_UNWIND_LEVEL1
 void _Unwind_SetIP(struct _Unwind_Context *context, uintptr_t value) {
   uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);
   _Unwind_SetGR(context, 15, value | thumb_bit);
index 248d995..ef6509c 100644 (file)
@@ -7,6 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
+#if 0
+
 #include "config.h"
 #include "AddressSpace.hpp"
 #include "DwarfParser.hpp"
@@ -181,3 +183,4 @@ bool checkKeyMgrRegisteredFDEs(uintptr_t pc, void *&fde) {
 
 }
 
+#endif
\ No newline at end of file
index b4de8e4..e7f9fd8 100644 (file)
@@ -15,7 +15,7 @@
 #include "networking_internal.h"
 #include "net_queue_internal.h"
 
-static errval_t create_loopback_queue(const char* cardname, inthandler_t interrupt, 
+static errval_t create_loopback_queue(const char* cardname, inthandler_t interrupt,
                                       struct capref* ep, uint64_t *queueid,
                                       bool default_q, bool poll, struct capref* filter_ep,
                                       struct devq **retqueue)
@@ -33,7 +33,7 @@ static errval_t create_loopback_queue(const char* cardname, inthandler_t interru
     return SYS_ERR_OK;
 }
 
-static errval_t create_driver_queue(const char* cardname, inthandler_t interrupt, 
+static errval_t create_driver_queue(const char* cardname, inthandler_t interrupt,
                                     struct capref* ep, uint64_t *queueid,
                                     bool default_q, bool poll, struct capref* filter_ep,
                                     struct devq **retqueue)
@@ -43,7 +43,8 @@ static errval_t create_driver_queue(const char* cardname, inthandler_t interrupt
     return SYS_ERR_OK;
 }
 
-static errval_t create_e1000_queue(const char* cardname, inthandler_t interrupt, 
+#ifndef __ARM_ARCH_7A__
+static errval_t create_e1000_queue(const char* cardname, inthandler_t interrupt,
                                    struct capref* ep, uint64_t *queueid,
                                    bool default_q, bool poll, struct capref* filter_ep,
                                    struct devq **retqueue)
@@ -59,7 +60,7 @@ static errval_t create_e1000_queue(const char* cardname, inthandler_t interrupt,
     struct pci_id id;
     struct pci_class cls;
 
-    err = pci_deserialize_octet((char*) cardname+7, &addr, &id, &cls);     
+    err = pci_deserialize_octet((char*) cardname+7, &addr, &id, &cls);
     if (err_is_fail(err)) {
         printf("%s \n", cardname+7);
         return DEVQ_ERR_INIT_QUEUE;
@@ -75,9 +76,9 @@ static errval_t create_e1000_queue(const char* cardname, inthandler_t interrupt,
 }
 
 // cardname - "mlx4:vendor:deviceid:bus:device:function"
-static errval_t create_mlx4_queue(const char* cardname, inthandler_t interrupt, 
+static errval_t create_mlx4_queue(const char* cardname, inthandler_t interrupt,
                                   struct capref* ep, uint64_t *queueid,
-                                  bool default_q, bool poll, struct capref* filter_ep, 
+                                  bool default_q, bool poll, struct capref* filter_ep,
                                   struct devq **retqueue)
 {
     errval_t err;
@@ -91,7 +92,7 @@ static errval_t create_mlx4_queue(const char* cardname, inthandler_t interrupt,
             return DEVQ_ERR_INIT_QUEUE;
         }
 
-        err = pci_deserialize_octet((char*) cardname+5, &addr, &id, &cls);     
+        err = pci_deserialize_octet((char*) cardname+5, &addr, &id, &cls);
         if (err_is_fail(err)) {
             return DEVQ_ERR_INIT_QUEUE;
         }
@@ -108,7 +109,7 @@ static errval_t create_mlx4_queue(const char* cardname, inthandler_t interrupt,
                               addr.bus, addr.device, addr.function, 1, interrupt);
 }
 
-static errval_t create_e10k_queue(const char* cardname, inthandler_t interrupt, 
+static errval_t create_e10k_queue(const char* cardname, inthandler_t interrupt,
                                   struct capref* ep, uint64_t *queueid,
                                   bool default_q, bool poll, struct capref* filter_ep,
                                   struct devq **retqueue)
@@ -133,14 +134,14 @@ static errval_t create_e10k_queue(const char* cardname, inthandler_t interrupt,
 
     if (driverkit_iommu_present(NULL)) {
         err = e10k_queue_create((struct e10k_queue**)retqueue, interrupt,
-                                ep, bus, function, deviceid, device, 
+                                ep, bus, function, deviceid, device,
                                 true/*virtual functions*/,
                                 !poll, /* user interrupts*/
                                 default_q);
     } else {
         printf("Create queue no iommu EP \n");
         err = e10k_queue_create((struct e10k_queue**)retqueue, interrupt,
-                                ep, bus, function, deviceid, device, 
+                                ep, bus, function, deviceid, device,
                                 false/*virtual functions*/,
                                 !poll, /* user interrupts*/
                                 default_q);
@@ -155,8 +156,8 @@ static errval_t create_e10k_queue(const char* cardname, inthandler_t interrupt,
     return err;
 }
 
-static errval_t create_sfn5122f_queue(const char* cardname, inthandler_t interrupt, 
-                                      struct capref* ep, uint64_t *queueid, 
+static errval_t create_sfn5122f_queue(const char* cardname, inthandler_t interrupt,
+                                      struct capref* ep, uint64_t *queueid,
                                       bool default_q, bool poll, struct capref* filter_ep,
                                       struct devq **retqueue)
 {
@@ -177,8 +178,9 @@ static errval_t create_sfn5122f_queue(const char* cardname, inthandler_t interru
     return err;
 }
 
+#endif // __ARM_ARCH_7A__
 
-typedef errval_t (*queue_create_fn)(const char*, inthandler_t, struct capref*, 
+typedef errval_t (*queue_create_fn)(const char*, inthandler_t, struct capref*,
                                     uint64_t*, bool, bool, struct capref* filter_ep, struct devq **);
 
 typedef struct bench_ctl* (*get_bench_data_fn)(struct devq*, uint8_t);
@@ -192,10 +194,12 @@ struct networking_card
 } networking_cards [] = {
     { "loopback", create_loopback_queue, NULL, IF_TYPE_DUMMY},
     { "driver", create_driver_queue, NULL, IF_TYPE_DUMMY},
+    #ifndef __ARM_ARCH_7A__
     { "e1000n", create_e1000_queue, NULL, IF_TYPE_E1000_DEVIF},
     { "mlx4", create_mlx4_queue, NULL, IF_TYPE_DUMMY},
     { "e10k", create_e10k_queue, e10k_get_benchmark_data, IF_TYPE_E10K_VF},
     { "sfn5122f", create_sfn5122f_queue, sfn5122f_get_benchmark_data, IF_TYPE_SFN5122F_DEVIF},
+    #endif
     { NULL, NULL, NULL, IF_TYPE_DUMMY}
 };
 
@@ -214,7 +218,7 @@ struct networking_card
  * @return SYS_ERR_OK on success, errval on failure
  */
 errval_t net_queue_internal_create(inthandler_t interrupt, const char *cardname,
-                                   struct capref* ep, uint64_t* queueid, bool default_q, 
+                                   struct capref* ep, uint64_t* queueid, bool default_q,
                                    bool poll, struct capref* filter_ep, struct devq **retqueue)
 {
     errval_t err;
@@ -232,10 +236,10 @@ errval_t net_queue_internal_create(inthandler_t interrupt, const char *cardname,
                 }
                 nc++;
             }
-            
+
         }
-    
-    }   
+
+    }
 
     if (cardname != NULL) {
         nc = networking_cards;
index a8786c3..3da9765 100644 (file)
@@ -24,6 +24,8 @@
 #define FRAME_BITS_MIN 12
 #ifdef __k1om__
 #define FRAME_BITS_MAX 30
+#elif defined(__ARM_ARCH_7A__)
+#define FRAME_BITS_MAX 29
 #else
 // maximum size of the buffer in bits
 #define FRAME_BITS_MAX 35
@@ -68,10 +70,12 @@ static void run_map_protect_unmap(struct capref frame, vregion_flags_t flags)
         bits_start = LARGE_PAGE_BITS;
         p = 'L';
         alignment = LARGE_PAGE_SIZE;
+#ifndef __ARM_ARCH_7A__
     } else if (flags & VREGION_FLAGS_HUGE) {
         bits_start = HUGE_PAGE_BITS;
         p = 'H';
         alignment = HUGE_PAGE_SIZE;
+#endif
     }
 
     flags |= VREGION_FLAGS_READ_WRITE;
@@ -166,10 +170,12 @@ static void run_map_no_unmap(struct capref frame, vregion_flags_t flags)
         bits_start = LARGE_PAGE_BITS;
         p = 'L';
         alignment = LARGE_PAGE_SIZE;
+#ifndef __ARM_ARCH_7A__
     } else if (flags & VREGION_FLAGS_HUGE) {
         bits_start = HUGE_PAGE_BITS;
         p = 'H';
         alignment = HUGE_PAGE_SIZE;
+#endif
     }
 
     flags |= VREGION_FLAGS_READ_WRITE;
index 53c60d1..bdabace 100644 (file)
@@ -140,7 +140,7 @@ static uint64_t find_rx_free_slot_count_fn(void)
 }
 
 /** Callback for net_queue_mgr library. */
-static errval_t register_rx_buffer_fn(uint64_t paddr, void *vaddr,
+static errval_t register_rx_buffer_fn(lpaddr_t paddr, void *vaddr,
         void *rx_opaque)
 {
     if (packetbuf != NULL) {
index 2faba1d..0bac707 100644 (file)
@@ -49,7 +49,7 @@ static void handler(enum exception_type type, int subtype, void *vaddr,
     errval_t err;
     struct capref retframe;
     struct capref f = (struct capref) { .cnode = cow_frames, .slot = frame_id };
-    size_t retoff;
+    genvaddr_t retoff;
     struct vregion *vr;
     void *buf;
     // copy data from faulting page to new page
index 64739bd..165c6b1 100644 (file)
@@ -33,9 +33,11 @@ void *HPCC_malloc(size_t bytes, size_t alignment)
         case LARGE_PAGE_SIZE:
             flags |= VREGION_FLAGS_LARGE;
             break;
+#ifndef __ARM_ARCH_7A__
         case HUGE_PAGE_SIZE:
             flags |= VREGION_FLAGS_HUGE;
             break;
+#endif
         default:
             USER_PANIC("Invalid alignment: %" PRIu64, alignment)
             ;
index 301fc6e..892ef0f 100644 (file)
@@ -24,6 +24,8 @@
 #define FRAME_ACCESS_DEFAULT \
         (PTABLE_USER_SUPERVISOR | PTABLE_EXECUTE_DISABLE | PTABLE_READ_WRITE)
 
+#define NUM_VNODES 4
+
 static enum objtype types[7] =
 {
     ObjType_VNode_x86_64_pml4,
@@ -35,7 +37,7 @@ static enum objtype types[7] =
     ObjType_Frame
 };
 
-static const char *types_string[7] = 
+static const char *types_string[7] =
 {
     "ObjType_VNode_x86_64_pml4",
     "ObjType_VNode_x86_64_pdpt",
@@ -45,10 +47,33 @@ static const char *types_string[7] =
     "ObjType_Frame",
     "ObjType_Frame"
 };
+#elif defined(__ARM_ARCH_7A__ )
+
+#define NUM_VNODES 2
+
+#define FRAME_ACCESS_DEFAULT (KPI_PAGING_FLAGS_READ | KPI_PAGING_FLAGS_WRITE)
+
+static enum objtype types[5] =
+{
+    ObjType_VNode_ARM_l1,
+    ObjType_VNode_ARM_l2,
+    ObjType_Frame,
+    ObjType_Frame,
+};
+
+static const char *types_string[7] =
+{
+    "ObjType_VNode_ARM_l1",
+    "ObjType_VNode_ARM_l2",
+    "ObjType_Frame",
+    "ObjType_Frame",
+};
 #else
 
 #define FRAME_ACCESS_DEFAULT (KPI_PAGING_FLAGS_READ | KPI_PAGING_FLAGS_WRITE)
 
+#define NUM_VNODES 4
+
 static enum objtype types[7] =
 {
     ObjType_VNode_AARCH64_l0,
@@ -60,7 +85,7 @@ static enum objtype types[7] =
     ObjType_Frame
 };
 
-static const char *types_string[7] = 
+static const char *types_string[7] =
 {
     "ObjType_VNode_AARCH64_l0",
     "ObjType_VNode_AARCH64_l1",
@@ -77,6 +102,13 @@ static const char *types_string[7] =
 #define S SYS_ERR_VM_FRAME_TOO_SMALL
 #define R SYS_ERR_VM_MAP_RIGHTS
 
+#ifdef __ARM_ARCH_7A__
+static errval_t mapping_ok[2][5] =
+{         /*L1*/ /* L2*/  /*frm*/ /*1mfrm*/
+/*l1*/  {   W,      O,       S,       O },
+/*L2  */{   W,      R,       O,       O },
+};
+#else
 static errval_t mapping_ok[4][7] =
 {         /*pml4*/ /*pdpt*/ /*pdir*/ /*pt*/ /*frm*/ /*2mfrm*/ /*1gfrm*/
 /*pml4*/{   W,       O,       W,       W,     W,      W,        W  },
@@ -84,17 +116,18 @@ static errval_t mapping_ok[4][7] =
 /*pdir*/{   W,       W,       W,       O,     S,      O,        O  },
 /*pt  */{   R,       R,       R,       R,     O,      O,        O  },
 };
+#endif
 
 static int pass = 0, fail = 0;
 static void check_result(errval_t err, int dest, int src)
 {
     if (err_no(err) == mapping_ok[dest][src]) {
-        printf("%s<-%s PASSED (%s)\n", types_string[dest], types_string[src], 
+        printf("%s<-%s PASSED (%s)\n", types_string[dest], types_string[src],
                 err_getstring(err));
         pass++;
     } else {
         printf("%s<-%s FAILED (expected: %s, was %s)\n",
-                types_string[dest], types_string[src], 
+                types_string[dest], types_string[src],
                 err_getstring(mapping_ok[dest][src]),
                 err_getstring(err));
         fail++;
@@ -127,7 +160,7 @@ int invalid_mappings(void)
     }
 
     // allocate caps
-    for (int i = 0; i < 5; i++) {
+    for (int i = 0; i < NUM_VNODES + 1; i++) {
         // get 4k block
         struct capref mem;
         err = ram_alloc(&mem, BASE_PAGE_BITS);
@@ -163,19 +196,21 @@ int invalid_mappings(void)
 
     // cap 6: 2M frame
     size_t rb = 0;
-    err = frame_alloc(&caps[5], LARGE_PAGE_SIZE, &rb);
+    err = frame_alloc(&caps[NUM_VNODES + 1], LARGE_PAGE_SIZE, &rb);
     if (err_is_fail(err) || rb != LARGE_PAGE_SIZE) {
         debug_printf("frame_alloc: %s (%ld)\n", err_getstring(err), err);
         return 1;
     }
+#ifndef __ARM_ARCH_7A__
     // cap 7: 1G frame
-    err = frame_alloc(&caps[6], HUGE_PAGE_SIZE, &rb);
+    err = frame_alloc(&caps[NUM_VNODES + 2], HUGE_PAGE_SIZE, &rb);
     if (err_is_fail(err) || rb != HUGE_PAGE_SIZE) {
         debug_printf("Cannot allocate 1GB frame (%s)\n", err_getcode(err));
         last_source = 6;
     }
+#endif
 
-    paging_x86_64_flags_t attr = 0;
+    uint64_t attr = 0;
     // select dest (ignore frame, asserts)
     for (int i = 0; i < 4; i++) {
         // select source
index 0a2d360..50c8621 100644 (file)
@@ -38,8 +38,8 @@ static size_t cpu_count = 4;
 static void* prj_thread(void* param)
 {
 #if BARRELFISH
-    printf("Hello from thread %"PRIu64" on core %"PRIuCOREID"\n",
-           (uint64_t)param, disp_get_core_id());
+    printf("Hello from thread %"PRIuPTR" on core %"PRIuCOREID"\n",
+           (uintptr_t)param, disp_get_core_id());
 #endif
     sanity = 1;
     //messages_handler_loop();
index d8d3e16..f2b1888 100644 (file)
@@ -30,10 +30,14 @@ static enum objtype type[] = {
 // the offsets of the indices for the different page table levels
 static uint8_t offsets[] = { 39, 30, 21, 12 };
 
+#ifdef __ARM_ARCH_7A__
+static uint32_t PAGE_DEFAULT_ACCESS = PTABLE_ACCESS_DEFAULT;
+#else
 static uint64_t PAGE_DEFAULT_ACCESS =
     PTABLE_USER_SUPERVISOR |
     PTABLE_EXECUTE_DISABLE |
     PTABLE_READ_WRITE;
+#endif
 
 static vregion_flags_t PMAP_DEFAULT_ACCESS =
     VREGION_FLAGS_READ_WRITE;
@@ -319,7 +323,7 @@ printf("map %i\n", i);
         exit(1);
     }
 
-    test_region((uint32_t*)address, 10*DEFAULT_SIZE);
+    test_region((uint32_t*)(uintptr_t)address, 10*DEFAULT_SIZE);
 
     err = pmap->f.unmap(pmap, address, bytes, NULL);
     if (err_is_fail(err))