Enable tests for linuxppc via qemu-ppc.
authorDavid Given <dg@cowlark.com>
Sat, 26 Nov 2016 10:56:17 +0000 (11:56 +0100)
committerDavid Given <dg@cowlark.com>
Sat, 26 Nov 2016 10:56:17 +0000 (11:56 +0100)
build.lua
plat/linux/libsys/sbrk.c
plat/linuxppc/tests/build.lua [new file with mode: 0644]
tests/plat/brk_c.c
tests/plat/lib/test.c
tests/plat/testdriver.sh

index 5844498..2b5ec62 100644 (file)
--- a/build.lua
+++ b/build.lua
@@ -14,6 +14,7 @@ vars.plats = {
        "rpi",
 }
 vars.plats_with_tests = {
+       "linuxppc",
        "qemuppc",
        "pc86",
 }
index 7aeeecb..f790a17 100644 (file)
@@ -26,7 +26,6 @@ void* sbrk(int increment)
 {
        char* old;
        char* new;
-       char* actual;
        
        if (!current)
                current = (char*) _syscall(__NR_brk, 0, 0, 0);
@@ -35,15 +34,21 @@ void* sbrk(int increment)
                return current;
                
        old = current;
+
        new = old + increment;
 
-       actual = (char*) _syscall(__NR_brk, (quad) new, 0, 0);
-       if (actual < new)
-       {
-               errno = ENOMEM;
-               return OUT_OF_MEMORY;
-       }
+       if ((increment > 0) && (new <= old))
+               goto out_of_memory;
+       else if ((increment < 0) && (new >= old))
+               goto out_of_memory;
+
+       if (brk(new) < 0)
+               goto out_of_memory;
                
-       current = actual;
        return old;
+
+out_of_memory:
+       errno = ENOMEM;
+       return OUT_OF_MEMORY;
 }
+
diff --git a/plat/linuxppc/tests/build.lua b/plat/linuxppc/tests/build.lua
new file mode 100644 (file)
index 0000000..7601ab0
--- /dev/null
@@ -0,0 +1,7 @@
+include("tests/plat/build.lua")
+
+plat_testsuite {
+    name = "tests",
+    plat = "linuxppc",
+    method = "qemu-ppc"
+}
index 9a07c7d..434cec5 100644 (file)
@@ -10,10 +10,6 @@ int main(int argc, const char* argv[])
     char* o;
     char* p;
 
-    errno = 0;
-    ASSERT(-1 == brk((void*)-1));
-    ASSERT(ENOMEM == errno);
-
     p = sbrk(0);
     ASSERT(p == sbrk(0));
     ASSERT(p == sbrk(8));
index d054173..df00e10 100644 (file)
@@ -6,6 +6,7 @@ void finished(void)
 {
     static const char s[] = "@@FINISHED\n";
     write(1, s, sizeof(s));
+    _exit(0);
 }
 
 void writehex(uint32_t code)
index 29d9063..f5ca187 100755 (executable)
@@ -31,6 +31,20 @@ case $method in
             | ( read dummy && kill $(cat $pidfile) )
         
         ;;
+
+    qemu-*)
+        if ! hash $method 2>/dev/null; then
+            echo "Warning: $method not installed, skipping test"
+            exit 0
+        fi
+
+        $method $img > $result
+        ;;
+
+    *)
+        echo "Error: $method not known by testdriver"
+        exit 1
+        ;;
 esac
 
 ( grep -q @@FAIL $result || ! grep -q @@FINISHED $result ) && cat $result && exit 1