diff --git a/memtest86+-2.11-make-gcc4-builds-work.patch b/memtest86+-2.11-make-gcc4-builds-work.patch index 1e256c5..c071ad0 100644 --- a/memtest86+-2.11-make-gcc4-builds-work.patch +++ b/memtest86+-2.11-make-gcc4-builds-work.patch @@ -1,5 +1,5 @@ --- memtest86+-2.11/test.c.orig 2008-11-15 19:18:14.000000000 -0500 -+++ memtest86+-2.11/test.c 2009-08-17 17:21:42.904932613 -0400 ++++ memtest86+-2.11/test.c 2009-08-18 16:01:33.845957770 -0400 @@ -13,6 +13,7 @@ #include "config.h" #include @@ -8,7 +8,7 @@ extern int segs, bail; extern volatile ulong *p; -@@ -150,7 +151,7 @@ void addr_tst2() +@@ -150,16 +151,16 @@ void addr_tst2() done = 0; do { /* Check for overflow */ @@ -17,72 +17,70 @@ pe += SPINSZ; } else { pe = end; -@@ -194,7 +195,7 @@ void addr_tst2() - done = 0; - do { - /* Check for overflow */ -- if (pe + SPINSZ > pe) { -+ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { - pe += SPINSZ; - } else { - pe = end; -@@ -256,17 +257,19 @@ void addr_tst2() - */ - void movinvr() - { -- int i, j, done, seed1, seed2; -+ int i, seed1, seed2; -+ int j, done; - volatile ulong *pe; - volatile ulong *start,*end; - ulong num; -+ uintptr_t next; - - /* Initialize memory with initial sequence of random numbers. */ - if (v->rdtsc) { - asm __volatile__ ("rdtsc":"=a" (seed1),"=d" (seed2)); - } else { -- seed1 = 521288629 + v->pass; -- seed2 = 362436069 - v->pass; -+ seed1 = (int)(521288629 + v->pass); -+ seed2 = (int)(362436069 - v->pass); - } - - /* Display the current seed */ -@@ -277,28 +280,20 @@ void movinvr() - end = v->map[j].end; - pe = start; - p = start; -+ next = (uintptr_t)p; - done = 0; - do { - /* Check for overflow */ -- if (pe + SPINSZ > pe) { -+ if (((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) && -+ ((uintptr_t)(pe + SPINSZ) < (uintptr_t)end)) { - pe += SPINSZ; - } else { - pe = end; -- } + } - if (pe >= end) { -- pe = end; ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; done++; } - if (p == pe ) { -+ if (next == (uintptr_t)pe) { ++ if ((uintptr_t)p == (uintptr_t)pe) { break; } --/* Original C code replaced with hand tuned assembly code */ --/* -- for (; p < pe; p++) { -- *p = rand(); -- } -- */ -- - asm __volatile__ ( - "jmp L200\n\t" - ".p2align 4,,7\n\t" -@@ -310,7 +305,7 @@ void movinvr() + +@@ -194,16 +195,16 @@ void addr_tst2() + done = 0; + do { + /* Check for overflow */ +- if (pe + SPINSZ > pe) { ++ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { + pe += SPINSZ; + } else { + pe = end; + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -260,6 +261,7 @@ void movinvr() + volatile ulong *pe; + volatile ulong *start,*end; + ulong num; ++ uintptr_t seg_start; + + /* Initialize memory with initial sequence of random numbers. */ + if (v->rdtsc) { +@@ -277,19 +279,20 @@ void movinvr() + end = v->map[j].end; + pe = start; + p = start; ++ seg_start = (uintptr_t)p; + done = 0; + do { + /* Check for overflow */ +- if (pe + SPINSZ > pe) { ++ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { + pe += SPINSZ; + } else { + pe = end; + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if (seg_start == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code */ +@@ -310,7 +313,7 @@ void movinvr() "jb L200\n\t" : "=D" (p) : "D" (p), "b" (pe) @@ -91,60 +89,11 @@ ); do_tick(); -@@ -324,23 +319,28 @@ void movinvr() - for (i=0; i<2; i++) { - rand_seed(seed1, seed2); - for (j=0; jmap[j].start; -- end = v->map[j].end; -+ start = (ulong *)(v->map[j].start); -+ end = (ulong *)(v->map[j].end); +@@ -328,19 +331,20 @@ void movinvr() + end = v->map[j].end; pe = start; p = start; - done = 0; - do { - /* Check for overflow */ -- if (pe + SPINSZ > pe) { -+ next = (uintptr_t)(pe + SPINSZ); -+ if ((next > (uintptr_t)pe) && -+ (next < (uintptr_t)end)) { - pe += SPINSZ; - } else { - pe = end; -+ done++; - } -+#if 0 - if (pe >= end) { - pe = end; - done++; - } -- if (p == pe ) { -+#endif -+ if ((uintptr_t)p == (uintptr_t)pe) { - break; - } - /* Original C code replaced with hand tuned assembly code */ -@@ -359,8 +359,9 @@ void movinvr() - if (i) { - num = 0xffffffff; - } else { -- num = 0; -+ num = 0x0; - } -+ - asm __volatile__ ( - "jmp L26\n\t" \ - -@@ -427,7 +428,7 @@ void movinv1(int iter, ulong p1, ulong p - done = 0; - do { - /* Check for overflow */ -- if (pe + SPINSZ > pe) { -+ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { - pe += SPINSZ; - } else { - pe = end; -@@ -468,7 +469,7 @@ void movinv1(int iter, ulong p1, ulong p ++ seg_start = (uintptr_t)p; done = 0; do { /* Check for overflow */ @@ -153,7 +102,59 @@ pe += SPINSZ; } else { pe = end; -@@ -534,7 +535,7 @@ void movinv1(int iter, ulong p1, ulong p + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if (seg_start == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code */ +@@ -427,17 +431,17 @@ void movinv1(int iter, ulong p1, ulong p + done = 0; + do { + /* Check for overflow */ +- if (pe + SPINSZ > pe) { ++ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { + pe += SPINSZ; + } else { + pe = end; + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } + len = pe - p; +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -468,16 +472,16 @@ void movinv1(int iter, ulong p1, ulong p + done = 0; + do { + /* Check for overflow */ +- if (pe + SPINSZ > pe) { ++ if ((uintptr_t)(pe + SPINSZ) > (uintptr_t)pe) { + pe += SPINSZ; + } else { + pe = end; + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -534,16 +538,16 @@ void movinv1(int iter, ulong p1, ulong p done = 0; do { /* Check for underflow */ @@ -162,7 +163,18 @@ pe -= SPINSZ; } else { pe = start; -@@ -623,7 +624,7 @@ void movinv32(int iter, ulong p1, ulong + } +- if (pe <= start) { ++ if ((uintptr_t)pe <= (uintptr_t)start) { + pe = start; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -623,16 +627,16 @@ void movinv32(int iter, ulong p1, ulong pat = p1; do { /* Check for overflow */ @@ -171,7 +183,18 @@ pe += SPINSZ; } else { pe = end; -@@ -685,7 +686,7 @@ void movinv32(int iter, ulong p1, ulong + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Do a SPINSZ section of memory */ +@@ -685,16 +689,16 @@ void movinv32(int iter, ulong p1, ulong pat = p1; do { /* Check for overflow */ @@ -180,7 +203,18 @@ pe += SPINSZ; } else { pe = end; -@@ -798,7 +799,7 @@ void movinv32(int iter, ulong p1, ulong + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -798,16 +802,16 @@ void movinv32(int iter, ulong p1, ulong done = 0; do { /* Check for underflow */ @@ -189,7 +223,18 @@ pe -= SPINSZ; } else { pe = start; -@@ -906,7 +907,7 @@ void modtst(int offset, int iter, ulong + } +- if (pe <= start) { ++ if ((uintptr_t)pe <= (uintptr_t)start) { + pe = start; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -906,16 +910,16 @@ void modtst(int offset, int iter, ulong done = 0; do { /* Check for overflow */ @@ -198,7 +243,18 @@ pe += SPINSZ; } else { pe = end; -@@ -951,7 +952,7 @@ void modtst(int offset, int iter, ulong + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -951,16 +955,16 @@ void modtst(int offset, int iter, ulong k = 0; do { /* Check for overflow */ @@ -207,7 +263,18 @@ pe += SPINSZ; } else { pe = end; -@@ -1009,7 +1010,7 @@ void modtst(int offset, int iter, ulong + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -1009,16 +1013,16 @@ void modtst(int offset, int iter, ulong done = 0; do { /* Check for overflow */ @@ -216,39 +283,74 @@ pe += SPINSZ; } else { pe = end; -@@ -1098,8 +1099,9 @@ void block_move(int iter) + } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + /* Original C code replaced with hand tuned assembly code +@@ -1098,16 +1102,16 @@ void block_move(int iter) done = 0; do { /* Check for overflow */ - if (pe + SPINSZ*4 > pe) { -- pe += SPINSZ*4; -+ if ((uintptr_t)(pe + SPINSZ * sizeof(ulong)) > -+ (uintptr_t)pe) { -+ pe += SPINSZ * sizeof(ulong); ++ if ((uintptr_t)(pe + SPINSZ*4) > (uintptr_t)pe) { + pe += SPINSZ*4; } else { pe = end; } -@@ -1167,8 +1169,9 @@ void block_move(int iter) +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + len = ((ulong)pe - (ulong)p) / 64; +@@ -1167,16 +1171,16 @@ void block_move(int iter) done = 0; do { /* Check for overflow */ - if (pe + SPINSZ*4 > pe) { -- pe += SPINSZ*4; -+ if ((uintptr_t)(pe + SPINSZ * sizeof(ulong)) > -+ (uintptr_t)pe) { -+ pe += SPINSZ * sizeof(ulong); ++ if ((uintptr_t)(pe + SPINSZ*4) > (uintptr_t)pe) { + pe += SPINSZ*4; } else { pe = end; } -@@ -1234,8 +1237,9 @@ void block_move(int iter) +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + pp = p + ((pe - p) / 2); +@@ -1234,16 +1238,16 @@ void block_move(int iter) done = 0; do { /* Check for overflow */ - if (pe + SPINSZ*4 > pe) { -- pe += SPINSZ*4; -+ if ((uintptr_t)(pe + SPINSZ * sizeof(ulong)) > -+ (uintptr_t)pe) { -+ pe += SPINSZ * sizeof(ulong); ++ if ((uintptr_t)(pe + SPINSZ*4) > (uintptr_t)pe) { + pe += SPINSZ*4; } else { pe = end; } +- if (pe >= end) { ++ if ((uintptr_t)pe >= (uintptr_t)end) { + pe = end; + done++; + } +- if (p == pe ) { ++ if ((uintptr_t)p == (uintptr_t)pe) { + break; + } + asm __volatile__ ( diff --git a/memtest86+.spec b/memtest86+.spec index 185042e..312af86 100644 --- a/memtest86+.spec +++ b/memtest86+.spec @@ -40,7 +40,7 @@ to add the %{name} entry to your GRUB boot menu. %prep %setup -q -%patch0 -p1 +#patch0 -p1 sed -i -e's,0x10000,0x100000,' memtest.lds %build