1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 /* 30 * ASSERTION: Declaration of the different data types within a union and 31 * their definitions in a later clause should work fine. 32 * 33 * SECTION: Structs and Unions/Unions 34 * 35 * NOTES: The floats, doubles and strings have not been implemented yet. 36 * When they do, appropriate lines in the code below should be uncommented. 37 * Similarly, the lines with the kmem_flags pointer assignment should be 38 * uncommented when the issues pertaining to it are clarified. 39 * 40 */ 41 42 #pragma D option quiet 43 44 union record { 45 char new_char; 46 short new_short; 47 int new_int; 48 long new_long; 49 long long new_long_long; 50 int8_t new_int8; 51 int16_t new_int16; 52 int32_t new_int32; 53 int64_t new_int64; 54 intptr_t new_intptr; 55 uint8_t new_uint8; 56 uint16_t new_uint16; 57 uint32_t new_uint32; 58 uint64_t new_uint64; 59 uintptr_t new_uintptr; 60 61 /*float new_float; 62 double new_double; 63 long double new_long_double; 64 65 string new_string; 66 */ 67 68 struct { 69 char ch; 70 int in; 71 long lg; 72 } new_struct; 73 74 union { 75 char ch; 76 int in; 77 long lg; 78 } new_union; 79 80 enum { 81 RED, 82 GREEN, 83 BLUE 84 } new_enum; 85 86 87 int *pointer; 88 } var; 89 90 /* 91 var.pointer = &`kmem_flags; 92 */ 93 BEGIN 94 { 95 var.new_char = 'c'; 96 var.new_short = 10; 97 var.new_int = 100; 98 var.new_long = 1234567890; 99 var.new_long_long = 1234512345; 100 var.new_int8 = 'p'; 101 var.new_int16 = 20; 102 var.new_int32 = 200; 103 var.new_int64 = 2000000; 104 var.new_intptr = 0x12345; 105 var.new_uint8 = 'q'; 106 var.new_uint16 = 30; 107 var.new_uint32 = 300; 108 var.new_uint64 = 3000000; 109 var.new_uintptr = 0x67890; 110 111 /* var.new_float = 1.23456; 112 var.new_double = 2.34567890; 113 var.new_long_double = 3.567890123; 114 115 var.new_string = "hello"; 116 */ 117 118 /* 119 var.pointer = &`kmem_flags; 120 */ 121 122 var.new_struct.ch = 'c'; 123 var.new_struct.in = 4; 124 var.new_struct.lg = 4; 125 126 var.new_union.ch = 'd'; 127 var.new_union.in = 5; 128 var.new_union.lg = 5; 129 130 131 exit(0); 132 } 133