Mercurial > illumos > illumos-gate
changeset 13939:20e4d8d8da6d
3511 dtrace.c erroneously checks for memory alignment on amd64
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Eric Schrock <eric.schrock@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Robert Mustacchi <rm@joyent.com>
author | Sebastien Roy <seb@delphix.com> |
---|---|
date | Fri, 28 Dec 2012 12:32:23 -0800 |
parents | c99b1993453c |
children | e2277f14d676 |
files | usr/src/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress5.d usr/src/uts/common/dtrace/dtrace.c |
diffstat | 2 files changed, 32 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress5.d Wed Jan 30 23:35:38 2013 +0100 +++ b/usr/src/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress5.d Fri Dec 28 12:32:23 2012 -0800 @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ /* * ASSERTION: @@ -32,44 +34,51 @@ * a runtime error. * * SECTION: Pointers and Arrays/Generic Pointers - * - * NOTES: - * This test doesn't apply to x86; for the time being, we're working - * around this with the preprocessor. */ #pragma D option quiet -int array[3]; -uintptr_t uptr; +#if defined(__i386) || defined(__amd64) +#define __x86 1 +#endif + +int array[2]; +char *ptr; int *p; int *q; int *r; BEGIN { -#ifdef __i386 + array[0] = 0x12345678; + array[1] = 0xabcdefff; + + ptr = (char *) &array[0]; + + p = (int *) (ptr); + q = (int *) (ptr + 2); + r = (int *) (ptr + 3); + + printf("*p: 0x%x\n", *p); + printf("*q: 0x%x\n", *q); + printf("*r: 0x%x\n", *r); + + /* + * On x86, the above unaligned memory accesses are allowed and should + * not result in the ERROR probe firing. + */ +#ifdef __x86 exit(1); #else - array[0] = 20; - array[1] = 40; - array[2] = 80; - - uptr = (uintptr_t) &array[0]; - - p = (int *) (uptr); - q = (int *) (uptr + 2); - r = (int *) (uptr + 3); - - printf("array[0]: %d\t*p: %d\n", array[0], *p); - printf("array[1]: %d\t*q: %d\n", array[1], *q); - printf("array[2]: %d\t*r: %d\n", array[2], *r); - exit(0); #endif } ERROR { +#ifdef __x86 + exit(0); +#else exit(1); +#endif }
--- a/usr/src/uts/common/dtrace/dtrace.c Wed Jan 30 23:35:38 2013 +0100 +++ b/usr/src/uts/common/dtrace/dtrace.c Fri Dec 28 12:32:23 2012 -0800 @@ -355,7 +355,7 @@ #define DTRACE_STORE(type, tomax, offset, what) \ *((type *)((uintptr_t)(tomax) + (uintptr_t)offset)) = (type)(what); -#ifndef __i386 +#ifndef __x86 #define DTRACE_ALIGNCHECK(addr, size, flags) \ if (addr & (size - 1)) { \ *flags |= CPU_DTRACE_BADALIGN; \