--- /dev/null	2014-01-14 16:48:08.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d	2014-01-14 16:48:08.914002480 -0500
@@ -0,0 +1,32 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ */
+
+#pragma D option quiet
+#pragma D option encoding=utf8
+#pragma D option aggzoom
+
+tick-1ms
+/i++ < 320/
+{
+	@ = lquantize(i, 0, 640, 1, i);
+	@ = lquantize(641 - i, 0, 640, 1, i);
+}
+
+tick-1ms
+/i == 320/
+{
+	printa(@);
+	exit(0);
+}
--- /dev/null	2014-01-14 16:48:09.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d.out	2014-01-14 16:48:09.155966661 -0500
@@ -0,0 +1,646 @@
+
+
+           value  ------------- Distribution ------------- count    
+               0 |                                         0        
+               1 |                                         1        
+               2 |▏                                        2        
+               3 |▎                                        3        
+               4 |▍                                        4        
+               5 |▌                                        5        
+               6 |▋                                        6        
+               7 |▊                                        7        
+               8 |▉                                        8        
+               9 |█                                        9        
+              10 |█▏                                       10       
+              11 |█▎                                       11       
+              12 |█▍                                       12       
+              13 |█▌                                       13       
+              14 |█▋                                       14       
+              15 |█▊                                       15       
+              16 |█▉                                       16       
+              17 |██                                       17       
+              18 |██▏                                      18       
+              19 |██▎                                      19       
+              20 |██▍                                      20       
+              21 |██▍                                      21       
+              22 |██▌                                      22       
+              23 |██▋                                      23       
+              24 |██▊                                      24       
+              25 |██▉                                      25       
+              26 |███                                      26       
+              27 |███▏                                     27       
+              28 |███▎                                     28       
+              29 |███▍                                     29       
+              30 |███▌                                     30       
+              31 |███▋                                     31       
+              32 |███▊                                     32       
+              33 |███▉                                     33       
+              34 |████                                     34       
+              35 |████▏                                    35       
+              36 |████▎                                    36       
+              37 |████▍                                    37       
+              38 |████▌                                    38       
+              39 |████▋                                    39       
+              40 |████▊                                    40       
+              41 |████▊                                    41       
+              42 |████▉                                    42       
+              43 |█████                                    43       
+              44 |█████▏                                   44       
+              45 |█████▎                                   45       
+              46 |█████▍                                   46       
+              47 |█████▌                                   47       
+              48 |█████▋                                   48       
+              49 |█████▊                                   49       
+              50 |█████▉                                   50       
+              51 |██████                                   51       
+              52 |██████▏                                  52       
+              53 |██████▎                                  53       
+              54 |██████▍                                  54       
+              55 |██████▌                                  55       
+              56 |██████▋                                  56       
+              57 |██████▊                                  57       
+              58 |██████▉                                  58       
+              59 |███████                                  59       
+              60 |███████▏                                 60       
+              61 |███████▏                                 61       
+              62 |███████▎                                 62       
+              63 |███████▍                                 63       
+              64 |███████▌                                 64       
+              65 |███████▋                                 65       
+              66 |███████▊                                 66       
+              67 |███████▉                                 67       
+              68 |████████                                 68       
+              69 |████████▏                                69       
+              70 |████████▎                                70       
+              71 |████████▍                                71       
+              72 |████████▌                                72       
+              73 |████████▋                                73       
+              74 |████████▊                                74       
+              75 |████████▉                                75       
+              76 |█████████                                76       
+              77 |█████████▏                               77       
+              78 |█████████▎                               78       
+              79 |█████████▍                               79       
+              80 |█████████▌                               80       
+              81 |█████████▌                               81       
+              82 |█████████▋                               82       
+              83 |█████████▊                               83       
+              84 |█████████▉                               84       
+              85 |██████████                               85       
+              86 |██████████▏                              86       
+              87 |██████████▎                              87       
+              88 |██████████▍                              88       
+              89 |██████████▌                              89       
+              90 |██████████▋                              90       
+              91 |██████████▊                              91       
+              92 |██████████▉                              92       
+              93 |███████████                              93       
+              94 |███████████▏                             94       
+              95 |███████████▎                             95       
+              96 |███████████▍                             96       
+              97 |███████████▌                             97       
+              98 |███████████▋                             98       
+              99 |███████████▊                             99       
+             100 |███████████▉                             100      
+             101 |███████████▉                             101      
+             102 |████████████                             102      
+             103 |████████████▏                            103      
+             104 |████████████▎                            104      
+             105 |████████████▍                            105      
+             106 |████████████▌                            106      
+             107 |████████████▋                            107      
+             108 |████████████▊                            108      
+             109 |████████████▉                            109      
+             110 |█████████████                            110      
+             111 |█████████████▏                           111      
+             112 |█████████████▎                           112      
+             113 |█████████████▍                           113      
+             114 |█████████████▌                           114      
+             115 |█████████████▋                           115      
+             116 |█████████████▊                           116      
+             117 |█████████████▉                           117      
+             118 |██████████████                           118      
+             119 |██████████████▏                          119      
+             120 |██████████████▎                          120      
+             121 |██████████████▎                          121      
+             122 |██████████████▍                          122      
+             123 |██████████████▌                          123      
+             124 |██████████████▋                          124      
+             125 |██████████████▊                          125      
+             126 |██████████████▉                          126      
+             127 |███████████████                          127      
+             128 |███████████████▏                         128      
+             129 |███████████████▎                         129      
+             130 |███████████████▍                         130      
+             131 |███████████████▌                         131      
+             132 |███████████████▋                         132      
+             133 |███████████████▊                         133      
+             134 |███████████████▉                         134      
+             135 |████████████████                         135      
+             136 |████████████████▏                        136      
+             137 |████████████████▎                        137      
+             138 |████████████████▍                        138      
+             139 |████████████████▌                        139      
+             140 |████████████████▋                        140      
+             141 |████████████████▋                        141      
+             142 |████████████████▊                        142      
+             143 |████████████████▉                        143      
+             144 |█████████████████                        144      
+             145 |█████████████████▏                       145      
+             146 |█████████████████▎                       146      
+             147 |█████████████████▍                       147      
+             148 |█████████████████▌                       148      
+             149 |█████████████████▋                       149      
+             150 |█████████████████▊                       150      
+             151 |█████████████████▉                       151      
+             152 |██████████████████                       152      
+             153 |██████████████████▏                      153      
+             154 |██████████████████▎                      154      
+             155 |██████████████████▍                      155      
+             156 |██████████████████▌                      156      
+             157 |██████████████████▋                      157      
+             158 |██████████████████▊                      158      
+             159 |██████████████████▉                      159      
+             160 |███████████████████                      160      
+             161 |███████████████████                      161      
+             162 |███████████████████▏                     162      
+             163 |███████████████████▎                     163      
+             164 |███████████████████▍                     164      
+             165 |███████████████████▌                     165      
+             166 |███████████████████▋                     166      
+             167 |███████████████████▊                     167      
+             168 |███████████████████▉                     168      
+             169 |████████████████████                     169      
+             170 |████████████████████▏                    170      
+             171 |████████████████████▎                    171      
+             172 |████████████████████▍                    172      
+             173 |████████████████████▌                    173      
+             174 |████████████████████▋                    174      
+             175 |████████████████████▊                    175      
+             176 |████████████████████▉                    176      
+             177 |█████████████████████                    177      
+             178 |█████████████████████▏                   178      
+             179 |█████████████████████▎                   179      
+             180 |█████████████████████▍                   180      
+             181 |█████████████████████▍                   181      
+             182 |█████████████████████▌                   182      
+             183 |█████████████████████▋                   183      
+             184 |█████████████████████▊                   184      
+             185 |█████████████████████▉                   185      
+             186 |██████████████████████                   186      
+             187 |██████████████████████▏                  187      
+             188 |██████████████████████▎                  188      
+             189 |██████████████████████▍                  189      
+             190 |██████████████████████▌                  190      
+             191 |██████████████████████▋                  191      
+             192 |██████████████████████▊                  192      
+             193 |██████████████████████▉                  193      
+             194 |███████████████████████                  194      
+             195 |███████████████████████▏                 195      
+             196 |███████████████████████▎                 196      
+             197 |███████████████████████▍                 197      
+             198 |███████████████████████▌                 198      
+             199 |███████████████████████▋                 199      
+             200 |███████████████████████▊                 200      
+             201 |███████████████████████▊                 201      
+             202 |███████████████████████▉                 202      
+             203 |████████████████████████                 203      
+             204 |████████████████████████▏                204      
+             205 |████████████████████████▎                205      
+             206 |████████████████████████▍                206      
+             207 |████████████████████████▌                207      
+             208 |████████████████████████▋                208      
+             209 |████████████████████████▊                209      
+             210 |████████████████████████▉                210      
+             211 |█████████████████████████                211      
+             212 |█████████████████████████▏               212      
+             213 |█████████████████████████▎               213      
+             214 |█████████████████████████▍               214      
+             215 |█████████████████████████▌               215      
+             216 |█████████████████████████▋               216      
+             217 |█████████████████████████▊               217      
+             218 |█████████████████████████▉               218      
+             219 |██████████████████████████               219      
+             220 |██████████████████████████▏              220      
+             221 |██████████████████████████▏              221      
+             222 |██████████████████████████▎              222      
+             223 |██████████████████████████▍              223      
+             224 |██████████████████████████▌              224      
+             225 |██████████████████████████▋              225      
+             226 |██████████████████████████▊              226      
+             227 |██████████████████████████▉              227      
+             228 |███████████████████████████              228      
+             229 |███████████████████████████▏             229      
+             230 |███████████████████████████▎             230      
+             231 |███████████████████████████▍             231      
+             232 |███████████████████████████▌             232      
+             233 |███████████████████████████▋             233      
+             234 |███████████████████████████▊             234      
+             235 |███████████████████████████▉             235      
+             236 |████████████████████████████             236      
+             237 |████████████████████████████▏            237      
+             238 |████████████████████████████▎            238      
+             239 |████████████████████████████▍            239      
+             240 |████████████████████████████▌            240      
+             241 |████████████████████████████▌            241      
+             242 |████████████████████████████▋            242      
+             243 |████████████████████████████▊            243      
+             244 |████████████████████████████▉            244      
+             245 |█████████████████████████████            245      
+             246 |█████████████████████████████▏           246      
+             247 |█████████████████████████████▎           247      
+             248 |█████████████████████████████▍           248      
+             249 |█████████████████████████████▌           249      
+             250 |█████████████████████████████▋           250      
+             251 |█████████████████████████████▊           251      
+             252 |█████████████████████████████▉           252      
+             253 |██████████████████████████████           253      
+             254 |██████████████████████████████▏          254      
+             255 |██████████████████████████████▎          255      
+             256 |██████████████████████████████▍          256      
+             257 |██████████████████████████████▌          257      
+             258 |██████████████████████████████▋          258      
+             259 |██████████████████████████████▊          259      
+             260 |██████████████████████████████▉          260      
+             261 |██████████████████████████████▉          261      
+             262 |███████████████████████████████          262      
+             263 |███████████████████████████████▏         263      
+             264 |███████████████████████████████▎         264      
+             265 |███████████████████████████████▍         265      
+             266 |███████████████████████████████▌         266      
+             267 |███████████████████████████████▋         267      
+             268 |███████████████████████████████▊         268      
+             269 |███████████████████████████████▉         269      
+             270 |████████████████████████████████         270      
+             271 |████████████████████████████████▏        271      
+             272 |████████████████████████████████▎        272      
+             273 |████████████████████████████████▍        273      
+             274 |████████████████████████████████▌        274      
+             275 |████████████████████████████████▋        275      
+             276 |████████████████████████████████▊        276      
+             277 |████████████████████████████████▉        277      
+             278 |█████████████████████████████████        278      
+             279 |█████████████████████████████████▏       279      
+             280 |█████████████████████████████████▎       280      
+             281 |█████████████████████████████████▎       281      
+             282 |█████████████████████████████████▍       282      
+             283 |█████████████████████████████████▌       283      
+             284 |█████████████████████████████████▋       284      
+             285 |█████████████████████████████████▊       285      
+             286 |█████████████████████████████████▉       286      
+             287 |██████████████████████████████████       287      
+             288 |██████████████████████████████████▏      288      
+             289 |██████████████████████████████████▎      289      
+             290 |██████████████████████████████████▍      290      
+             291 |██████████████████████████████████▌      291      
+             292 |██████████████████████████████████▋      292      
+             293 |██████████████████████████████████▊      293      
+             294 |██████████████████████████████████▉      294      
+             295 |███████████████████████████████████      295      
+             296 |███████████████████████████████████▏     296      
+             297 |███████████████████████████████████▎     297      
+             298 |███████████████████████████████████▍     298      
+             299 |███████████████████████████████████▌     299      
+             300 |███████████████████████████████████▋     300      
+             301 |███████████████████████████████████▋     301      
+             302 |███████████████████████████████████▊     302      
+             303 |███████████████████████████████████▉     303      
+             304 |████████████████████████████████████     304      
+             305 |████████████████████████████████████▏    305      
+             306 |████████████████████████████████████▎    306      
+             307 |████████████████████████████████████▍    307      
+             308 |████████████████████████████████████▌    308      
+             309 |████████████████████████████████████▋    309      
+             310 |████████████████████████████████████▊    310      
+             311 |████████████████████████████████████▉    311      
+             312 |█████████████████████████████████████    312      
+             313 |█████████████████████████████████████▏   313      
+             314 |█████████████████████████████████████▎   314      
+             315 |█████████████████████████████████████▍   315      
+             316 |█████████████████████████████████████▌   316      
+             317 |█████████████████████████████████████▋   317      
+             318 |█████████████████████████████████████▊   318      
+             319 |█████████████████████████████████████▉   319      
+             320 |██████████████████████████████████████   320      
+             321 |██████████████████████████████████████   320      
+             322 |█████████████████████████████████████▉   319      
+             323 |█████████████████████████████████████▊   318      
+             324 |█████████████████████████████████████▋   317      
+             325 |█████████████████████████████████████▌   316      
+             326 |█████████████████████████████████████▍   315      
+             327 |█████████████████████████████████████▎   314      
+             328 |█████████████████████████████████████▏   313      
+             329 |█████████████████████████████████████    312      
+             330 |████████████████████████████████████▉    311      
+             331 |████████████████████████████████████▊    310      
+             332 |████████████████████████████████████▋    309      
+             333 |████████████████████████████████████▌    308      
+             334 |████████████████████████████████████▍    307      
+             335 |████████████████████████████████████▎    306      
+             336 |████████████████████████████████████▏    305      
+             337 |████████████████████████████████████     304      
+             338 |███████████████████████████████████▉     303      
+             339 |███████████████████████████████████▊     302      
+             340 |███████████████████████████████████▋     301      
+             341 |███████████████████████████████████▋     300      
+             342 |███████████████████████████████████▌     299      
+             343 |███████████████████████████████████▍     298      
+             344 |███████████████████████████████████▎     297      
+             345 |███████████████████████████████████▏     296      
+             346 |███████████████████████████████████      295      
+             347 |██████████████████████████████████▉      294      
+             348 |██████████████████████████████████▊      293      
+             349 |██████████████████████████████████▋      292      
+             350 |██████████████████████████████████▌      291      
+             351 |██████████████████████████████████▍      290      
+             352 |██████████████████████████████████▎      289      
+             353 |██████████████████████████████████▏      288      
+             354 |██████████████████████████████████       287      
+             355 |█████████████████████████████████▉       286      
+             356 |█████████████████████████████████▊       285      
+             357 |█████████████████████████████████▋       284      
+             358 |█████████████████████████████████▌       283      
+             359 |█████████████████████████████████▍       282      
+             360 |█████████████████████████████████▎       281      
+             361 |█████████████████████████████████▎       280      
+             362 |█████████████████████████████████▏       279      
+             363 |█████████████████████████████████        278      
+             364 |████████████████████████████████▉        277      
+             365 |████████████████████████████████▊        276      
+             366 |████████████████████████████████▋        275      
+             367 |████████████████████████████████▌        274      
+             368 |████████████████████████████████▍        273      
+             369 |████████████████████████████████▎        272      
+             370 |████████████████████████████████▏        271      
+             371 |████████████████████████████████         270      
+             372 |███████████████████████████████▉         269      
+             373 |███████████████████████████████▊         268      
+             374 |███████████████████████████████▋         267      
+             375 |███████████████████████████████▌         266      
+             376 |███████████████████████████████▍         265      
+             377 |███████████████████████████████▎         264      
+             378 |███████████████████████████████▏         263      
+             379 |███████████████████████████████          262      
+             380 |██████████████████████████████▉          261      
+             381 |██████████████████████████████▉          260      
+             382 |██████████████████████████████▊          259      
+             383 |██████████████████████████████▋          258      
+             384 |██████████████████████████████▌          257      
+             385 |██████████████████████████████▍          256      
+             386 |██████████████████████████████▎          255      
+             387 |██████████████████████████████▏          254      
+             388 |██████████████████████████████           253      
+             389 |█████████████████████████████▉           252      
+             390 |█████████████████████████████▊           251      
+             391 |█████████████████████████████▋           250      
+             392 |█████████████████████████████▌           249      
+             393 |█████████████████████████████▍           248      
+             394 |█████████████████████████████▎           247      
+             395 |█████████████████████████████▏           246      
+             396 |█████████████████████████████            245      
+             397 |████████████████████████████▉            244      
+             398 |████████████████████████████▊            243      
+             399 |████████████████████████████▋            242      
+             400 |████████████████████████████▌            241      
+             401 |████████████████████████████▌            240      
+             402 |████████████████████████████▍            239      
+             403 |████████████████████████████▎            238      
+             404 |████████████████████████████▏            237      
+             405 |████████████████████████████             236      
+             406 |███████████████████████████▉             235      
+             407 |███████████████████████████▊             234      
+             408 |███████████████████████████▋             233      
+             409 |███████████████████████████▌             232      
+             410 |███████████████████████████▍             231      
+             411 |███████████████████████████▎             230      
+             412 |███████████████████████████▏             229      
+             413 |███████████████████████████              228      
+             414 |██████████████████████████▉              227      
+             415 |██████████████████████████▊              226      
+             416 |██████████████████████████▋              225      
+             417 |██████████████████████████▌              224      
+             418 |██████████████████████████▍              223      
+             419 |██████████████████████████▎              222      
+             420 |██████████████████████████▏              221      
+             421 |██████████████████████████▏              220      
+             422 |██████████████████████████               219      
+             423 |█████████████████████████▉               218      
+             424 |█████████████████████████▊               217      
+             425 |█████████████████████████▋               216      
+             426 |█████████████████████████▌               215      
+             427 |█████████████████████████▍               214      
+             428 |█████████████████████████▎               213      
+             429 |█████████████████████████▏               212      
+             430 |█████████████████████████                211      
+             431 |████████████████████████▉                210      
+             432 |████████████████████████▊                209      
+             433 |████████████████████████▋                208      
+             434 |████████████████████████▌                207      
+             435 |████████████████████████▍                206      
+             436 |████████████████████████▎                205      
+             437 |████████████████████████▏                204      
+             438 |████████████████████████                 203      
+             439 |███████████████████████▉                 202      
+             440 |███████████████████████▊                 201      
+             441 |███████████████████████▊                 200      
+             442 |███████████████████████▋                 199      
+             443 |███████████████████████▌                 198      
+             444 |███████████████████████▍                 197      
+             445 |███████████████████████▎                 196      
+             446 |███████████████████████▏                 195      
+             447 |███████████████████████                  194      
+             448 |██████████████████████▉                  193      
+             449 |██████████████████████▊                  192      
+             450 |██████████████████████▋                  191      
+             451 |██████████████████████▌                  190      
+             452 |██████████████████████▍                  189      
+             453 |██████████████████████▎                  188      
+             454 |██████████████████████▏                  187      
+             455 |██████████████████████                   186      
+             456 |█████████████████████▉                   185      
+             457 |█████████████████████▊                   184      
+             458 |█████████████████████▋                   183      
+             459 |█████████████████████▌                   182      
+             460 |█████████████████████▍                   181      
+             461 |█████████████████████▍                   180      
+             462 |█████████████████████▎                   179      
+             463 |█████████████████████▏                   178      
+             464 |█████████████████████                    177      
+             465 |████████████████████▉                    176      
+             466 |████████████████████▊                    175      
+             467 |████████████████████▋                    174      
+             468 |████████████████████▌                    173      
+             469 |████████████████████▍                    172      
+             470 |████████████████████▎                    171      
+             471 |████████████████████▏                    170      
+             472 |████████████████████                     169      
+             473 |███████████████████▉                     168      
+             474 |███████████████████▊                     167      
+             475 |███████████████████▋                     166      
+             476 |███████████████████▌                     165      
+             477 |███████████████████▍                     164      
+             478 |███████████████████▎                     163      
+             479 |███████████████████▏                     162      
+             480 |███████████████████                      161      
+             481 |███████████████████                      160      
+             482 |██████████████████▉                      159      
+             483 |██████████████████▊                      158      
+             484 |██████████████████▋                      157      
+             485 |██████████████████▌                      156      
+             486 |██████████████████▍                      155      
+             487 |██████████████████▎                      154      
+             488 |██████████████████▏                      153      
+             489 |██████████████████                       152      
+             490 |█████████████████▉                       151      
+             491 |█████████████████▊                       150      
+             492 |█████████████████▋                       149      
+             493 |█████████████████▌                       148      
+             494 |█████████████████▍                       147      
+             495 |█████████████████▎                       146      
+             496 |█████████████████▏                       145      
+             497 |█████████████████                        144      
+             498 |████████████████▉                        143      
+             499 |████████████████▊                        142      
+             500 |████████████████▋                        141      
+             501 |████████████████▋                        140      
+             502 |████████████████▌                        139      
+             503 |████████████████▍                        138      
+             504 |████████████████▎                        137      
+             505 |████████████████▏                        136      
+             506 |████████████████                         135      
+             507 |███████████████▉                         134      
+             508 |███████████████▊                         133      
+             509 |███████████████▋                         132      
+             510 |███████████████▌                         131      
+             511 |███████████████▍                         130      
+             512 |███████████████▎                         129      
+             513 |███████████████▏                         128      
+             514 |███████████████                          127      
+             515 |██████████████▉                          126      
+             516 |██████████████▊                          125      
+             517 |██████████████▋                          124      
+             518 |██████████████▌                          123      
+             519 |██████████████▍                          122      
+             520 |██████████████▎                          121      
+             521 |██████████████▎                          120      
+             522 |██████████████▏                          119      
+             523 |██████████████                           118      
+             524 |█████████████▉                           117      
+             525 |█████████████▊                           116      
+             526 |█████████████▋                           115      
+             527 |█████████████▌                           114      
+             528 |█████████████▍                           113      
+             529 |█████████████▎                           112      
+             530 |█████████████▏                           111      
+             531 |█████████████                            110      
+             532 |████████████▉                            109      
+             533 |████████████▊                            108      
+             534 |████████████▋                            107      
+             535 |████████████▌                            106      
+             536 |████████████▍                            105      
+             537 |████████████▎                            104      
+             538 |████████████▏                            103      
+             539 |████████████                             102      
+             540 |███████████▉                             101      
+             541 |███████████▉                             100      
+             542 |███████████▊                             99       
+             543 |███████████▋                             98       
+             544 |███████████▌                             97       
+             545 |███████████▍                             96       
+             546 |███████████▎                             95       
+             547 |███████████▏                             94       
+             548 |███████████                              93       
+             549 |██████████▉                              92       
+             550 |██████████▊                              91       
+             551 |██████████▋                              90       
+             552 |██████████▌                              89       
+             553 |██████████▍                              88       
+             554 |██████████▎                              87       
+             555 |██████████▏                              86       
+             556 |██████████                               85       
+             557 |█████████▉                               84       
+             558 |█████████▊                               83       
+             559 |█████████▋                               82       
+             560 |█████████▌                               81       
+             561 |█████████▌                               80       
+             562 |█████████▍                               79       
+             563 |█████████▎                               78       
+             564 |█████████▏                               77       
+             565 |█████████                                76       
+             566 |████████▉                                75       
+             567 |████████▊                                74       
+             568 |████████▋                                73       
+             569 |████████▌                                72       
+             570 |████████▍                                71       
+             571 |████████▎                                70       
+             572 |████████▏                                69       
+             573 |████████                                 68       
+             574 |███████▉                                 67       
+             575 |███████▊                                 66       
+             576 |███████▋                                 65       
+             577 |███████▌                                 64       
+             578 |███████▍                                 63       
+             579 |███████▎                                 62       
+             580 |███████▏                                 61       
+             581 |███████▏                                 60       
+             582 |███████                                  59       
+             583 |██████▉                                  58       
+             584 |██████▊                                  57       
+             585 |██████▋                                  56       
+             586 |██████▌                                  55       
+             587 |██████▍                                  54       
+             588 |██████▎                                  53       
+             589 |██████▏                                  52       
+             590 |██████                                   51       
+             591 |█████▉                                   50       
+             592 |█████▊                                   49       
+             593 |█████▋                                   48       
+             594 |█████▌                                   47       
+             595 |█████▍                                   46       
+             596 |█████▎                                   45       
+             597 |█████▏                                   44       
+             598 |█████                                    43       
+             599 |████▉                                    42       
+             600 |████▊                                    41       
+             601 |████▊                                    40       
+             602 |████▋                                    39       
+             603 |████▌                                    38       
+             604 |████▍                                    37       
+             605 |████▎                                    36       
+             606 |████▏                                    35       
+             607 |████                                     34       
+             608 |███▉                                     33       
+             609 |███▊                                     32       
+             610 |███▋                                     31       
+             611 |███▌                                     30       
+             612 |███▍                                     29       
+             613 |███▎                                     28       
+             614 |███▏                                     27       
+             615 |███                                      26       
+             616 |██▉                                      25       
+             617 |██▊                                      24       
+             618 |██▋                                      23       
+             619 |██▌                                      22       
+             620 |██▍                                      21       
+             621 |██▍                                      20       
+             622 |██▎                                      19       
+             623 |██▏                                      18       
+             624 |██                                       17       
+             625 |█▉                                       16       
+             626 |█▊                                       15       
+             627 |█▋                                       14       
+             628 |█▌                                       13       
+             629 |█▍                                       12       
+             630 |█▎                                       11       
+             631 |█▏                                       10       
+             632 |█                                        9        
+             633 |▉                                        8        
+             634 |▊                                        7        
+             635 |▋                                        6        
+             636 |▌                                        5        
+             637 |▍                                        4        
+             638 |▎                                        3        
+             639 |▏                                        2        
+          >= 640 |                                         1        
+
+
--- /dev/null	2014-01-14 16:48:09.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.agghist.d	2014-01-14 16:48:09.362454163 -0500
@@ -0,0 +1,46 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ */
+
+#pragma D option agghist
+#pragma D option quiet
+
+BEGIN
+{
+	@["demerit"] = sum(-10);
+	@["wtf"] = sum(10);
+	@["bot"] = sum(20);
+
+	@bagnoogle["SOAP/XML"] = sum(1);
+	@bagnoogle["XACML store"] = sum(5);
+	@bagnoogle["SAML token"] = sum(6);
+
+	@stalloogle["breakfast"] = sum(-5);
+	@stalloogle["non-diet pepsi"] = sum(-20);
+	@stalloogle["parrot"] = sum(-100);
+
+	printa(@);
+	printa(@bagnoogle);
+	printa(@stalloogle);
+
+	printf("\nzoomed:");
+
+	setopt("aggzoom");
+	printa(@);
+	printa(@bagnoogle);
+	printa(@stalloogle);
+
+	exit(0);
+}
+
--- /dev/null	2014-01-14 16:48:09.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.agghist.d.out	2014-01-14 16:48:09.561772201 -0500
@@ -0,0 +1,38 @@
+
+
+              key  ------------- Distribution ------------- count    
+          demerit                @@@@@|                     -10      
+              wtf                     |@@@@@                10       
+              bot                     |@@@@@@@@@@           20       
+
+
+              key  ------------- Distribution ------------- count    
+         SOAP/XML |@@@                                      1        
+      XACML store |@@@@@@@@@@@@@@@@@                        5        
+       SAML token |@@@@@@@@@@@@@@@@@@@@                     6        
+
+
+              key  ------------- Distribution ------------- count    
+           parrot         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -100     
+   non-diet pepsi                                   @@@@@@| -20      
+        breakfast                                       @@| -5       
+
+zoomed:
+
+              key  ------------- Distribution ------------- count    
+          demerit           @@@@@@@@@@|                     -10      
+              wtf                     |@@@@@@@@@@           10       
+              bot                     |@@@@@@@@@@@@@@@@@@@  20       
+
+
+              key  ------------- Distribution ------------- count    
+         SOAP/XML |@@@@@@@                                  1        
+      XACML store |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        5        
+       SAML token |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 6        
+
+
+              key  ------------- Distribution ------------- count    
+           parrot   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -100     
+   non-diet pepsi                                 @@@@@@@@| -20      
+        breakfast                                       @@| -5       
+
--- /dev/null	2014-01-14 16:48:09.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d	2014-01-14 16:48:09.777438989 -0500
@@ -0,0 +1,53 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ */
+
+#pragma D option aggpack
+#pragma D option encoding=ascii
+#pragma D option quiet
+
+BEGIN
+{
+	@x = quantize(1 << 32);
+	@y[1] = quantize(1);
+	@z["mumble"] = quantize(1);
+	@xx["foo", (char)1, (short)2, (long)3] = quantize(1);
+
+	@neg = lquantize(-10, -10, 20, 1, -1);
+	@neg = lquantize(-5, -10, 20, 1, 1);
+	@neg = lquantize(0, -10, 20, 1, 1);
+
+	i = 0;
+}
+
+tick-1ms
+{
+	@a[i] = quantize(0, i);
+	@a[i] = quantize(1, 100 - i);
+	i++;
+}
+
+tick-1ms
+/i > 100/
+{
+	exit(0);
+}
+
+END
+{
+	setopt("aggzoom", "true");
+	printa(@neg);
+	setopt("aggzoom", "false");
+	printa(@neg);
+}
--- /dev/null	2014-01-14 16:48:09.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d.out	2014-01-14 16:48:09.976181288 -0500
@@ -0,0 +1,124 @@
+
+
+     min .--------------------------------. max      | count
+   < -10 : V    X    X                    : >= 20    | 1
+
+
+     min .--------------------------------. max      | count
+   < -10 : v    x    x                    : >= 20    | 1
+
+
+        min .---. max        | count
+ 2147483648 : X : 8589934592 | 1
+
+      key  min .---. max  | count
+        1    0 : X : 2    | 1
+
+              key  min .---. max  | count
+           mumble    0 : X : 2    | 1
+
+                                         key  min .---. max  | count
+              foo   1     2                3    0 : X : 2    | 1
+
+      key  min .---. max  | count
+      100    0 :X  : 2    | 100
+       99    0 :X_ : 2    | 100
+       98    0 :X_ : 2    | 100
+       97    0 :X_ : 2    | 100
+       96    0 :X_ : 2    | 100
+       95    0 :X_ : 2    | 100
+       94    0 :X_ : 2    | 100
+       93    0 :X_ : 2    | 100
+       92    0 :X_ : 2    | 100
+       91    0 :X_ : 2    | 100
+       90    0 :X_ : 2    | 100
+       89    0 :X_ : 2    | 100
+       88    0 :X_ : 2    | 100
+       87    0 :X_ : 2    | 100
+       86    0 :X_ : 2    | 100
+       85    0 :X_ : 2    | 100
+       84    0 :X_ : 2    | 100
+       83    0 :X_ : 2    | 100
+       82    0 :X_ : 2    | 100
+       81    0 :X_ : 2    | 100
+       80    0 :X_ : 2    | 100
+       79    0 :X_ : 2    | 100
+       78    0 :xx : 2    | 100
+       77    0 :xx : 2    | 100
+       76    0 :xx : 2    | 100
+       75    0 :xx : 2    | 100
+       74    0 :xx : 2    | 100
+       73    0 :xx : 2    | 100
+       72    0 :xx : 2    | 100
+       71    0 :xx : 2    | 100
+       70    0 :xx : 2    | 100
+       69    0 :xx : 2    | 100
+       68    0 :xx : 2    | 100
+       67    0 :xx : 2    | 100
+       66    0 :xx : 2    | 100
+       65    0 :xx : 2    | 100
+       64    0 :xx : 2    | 100
+       63    0 :xx : 2    | 100
+       62    0 :xx : 2    | 100
+       61    0 :xx : 2    | 100
+       60    0 :xx : 2    | 100
+       59    0 :xx : 2    | 100
+       58    0 :xx : 2    | 100
+       57    0 :xx : 2    | 100
+       56    0 :xx : 2    | 100
+       55    0 :xx : 2    | 100
+       54    0 :xx : 2    | 100
+       53    0 :xx : 2    | 100
+       52    0 :xx : 2    | 100
+       51    0 :xx : 2    | 100
+       50    0 :xx : 2    | 100
+       49    0 :xx : 2    | 100
+       48    0 :xx : 2    | 100
+       47    0 :xx : 2    | 100
+       46    0 :xx : 2    | 100
+       45    0 :xx : 2    | 100
+       44    0 :xx : 2    | 100
+       43    0 :xx : 2    | 100
+       42    0 :xx : 2    | 100
+       41    0 :xx : 2    | 100
+       40    0 :xx : 2    | 100
+       39    0 :xx : 2    | 100
+       38    0 :xx : 2    | 100
+       37    0 :xx : 2    | 100
+       36    0 :xx : 2    | 100
+       35    0 :xx : 2    | 100
+       34    0 :xx : 2    | 100
+       33    0 :xx : 2    | 100
+       32    0 :xx : 2    | 100
+       31    0 :xx : 2    | 100
+       30    0 :xx : 2    | 100
+       29    0 :xx : 2    | 100
+       28    0 :xx : 2    | 100
+       27    0 :xx : 2    | 100
+       26    0 :xx : 2    | 100
+       25    0 :xx : 2    | 100
+       24    0 :xx : 2    | 100
+       23    0 :xx : 2    | 100
+       22    0 :xx : 2    | 100
+       21    0 :_X : 2    | 100
+       20    0 :_X : 2    | 100
+       19    0 :_X : 2    | 100
+       18    0 :_X : 2    | 100
+       17    0 :_X : 2    | 100
+       16    0 :_X : 2    | 100
+       15    0 :_X : 2    | 100
+       14    0 :_X : 2    | 100
+       13    0 :_X : 2    | 100
+       12    0 :_X : 2    | 100
+       11    0 :_X : 2    | 100
+       10    0 :_X : 2    | 100
+        9    0 :_X : 2    | 100
+        8    0 :_X : 2    | 100
+        7    0 :_X : 2    | 100
+        6    0 :_X : 2    | 100
+        5    0 :_X : 2    | 100
+        4    0 :_X : 2    | 100
+        3    0 :_X : 2    | 100
+        2    0 :_X : 2    | 100
+        1    0 :_X : 2    | 100
+        0    0 : X : 2    | 100
--- /dev/null	2014-01-14 16:48:10.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh	2014-01-14 16:48:10.178780368 -0500
@@ -0,0 +1,75 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+#
+
+let width=8
+
+function outputchar
+{
+	banner $3 | /bin/nawk -v line=$1 -v pos=$2 -v width=$width '{ \
+		for (i = 1; i <= length($0); i++) { \
+			if (substr($0, i, 1) == " ") \
+				continue; \
+			printf("\t@letter%d[%d] = lquantize(%d, 0, 40, 1);\n", \
+			    line, NR, i + (pos * width));
+		} \
+	}'
+}
+
+function outputstr
+{
+	let pos=0;
+	let line=0
+
+	printf "#pragma D option aggpack\n#pragma D option aggsortkey\n"
+
+	printf "BEGIN\n{\n"
+	for c in `echo "$1" | /bin/nawk '{ \
+		for (i = 1; i <= length($0); i++) { \
+			c = substr($0, i, 1); \
+			printf("%s\n", c == " " ? "space" : \
+			    c == "\n" ? "newline" : c); \
+		} \
+	}'`; do
+		if [[ "$c" == "space" ]]; then
+			let line=line+1
+			let pos=0
+			continue
+		fi
+
+		outputchar $line $pos $c
+		let pos=pos+1
+	done
+
+	let i=0
+
+	while [[ $i -le $line ]]; do
+		printf "\tprinta(@letter%d);\n" $i
+		let i=i+1
+	done
+	printf "\texit(0);\n}\n"
+}
+
+dtrace -qs /dev/stdin -x encoding=utf8 <<EOF
+`outputstr "why must i do this"`
+EOF
+
+dtrace -qs /dev/stdin -x encoding=ascii -x aggzoom <<EOF
+`outputstr "i am not well"`
+EOF
+
+dtrace -qs /dev/stdin -x encoding=utf8 -x aggzoom <<EOF
+`outputstr "send help"`
+EOF
+
--- /dev/null	2014-01-14 16:48:10.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh.out	2014-01-14 16:48:10.377581427 -0500
@@ -0,0 +1,102 @@
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   ▂    ▂  ▂    ▂   ▂   ▂                 : >= 40    | 6
+        3     < 0 :   ▂    ▂  ▂    ▂    ▂ ▂                  : >= 40    | 6
+        4     < 0 :   ▂    ▂  ▂▂▂▂▂▂     ▂                   : >= 40    | 9
+        5     < 0 :   ▂ ▂▂ ▂  ▂    ▂     ▂                   : >= 40    | 7
+        6     < 0 :   ▂▂  ▂▂  ▂    ▂     ▂                   : >= 40    | 7
+        7     < 0 :   ▂    ▂  ▂    ▂     ▂                   : >= 40    | 5
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   ▂    ▂  ▂    ▂   ▂▂▂▂    ▂▂▂▂▂         : >= 40    | 13
+        3     < 0 :   ▂▂  ▂▂  ▂    ▂  ▂          ▂           : >= 40    | 8
+        4     < 0 :   ▂ ▂▂ ▂  ▂    ▂   ▂▂▂▂      ▂           : >= 40    | 11
+        5     < 0 :   ▂    ▂  ▂    ▂       ▂     ▂           : >= 40    | 6
+        6     < 0 :   ▂    ▂  ▂    ▂  ▂    ▂     ▂           : >= 40    | 7
+        7     < 0 :   ▂    ▂   ▂▂▂▂    ▂▂▂▂      ▂           : >= 40    | 11
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :      █                                   : >= 40    | 1
+        3     < 0 :      █                                   : >= 40    | 1
+        4     < 0 :      █                                   : >= 40    | 1
+        5     < 0 :      █                                   : >= 40    | 1
+        6     < 0 :      █                                   : >= 40    | 1
+        7     < 0 :      █                                   : >= 40    | 1
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   ▂▂▂▂▂    ▂▂▂▂                          : >= 40    | 9
+        3     < 0 :   ▃    ▃  ▃    ▃                         : >= 40    | 4
+        4     < 0 :   ▃    ▃  ▃    ▃                         : >= 40    | 4
+        5     < 0 :   ▃    ▃  ▃    ▃                         : >= 40    | 4
+        6     < 0 :   ▃    ▃  ▃    ▃                         : >= 40    | 4
+        7     < 0 :   ▂▂▂▂▂    ▂▂▂▂                          : >= 40    | 9
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :    ▂▂▂▂▂  ▂    ▂     ▂     ▂▂▂▂          : >= 40    | 12
+        3     < 0 :      ▂    ▂    ▂     ▂    ▂              : >= 40    | 5
+        4     < 0 :      ▂    ▂▂▂▂▂▂     ▂     ▂▂▂▂          : >= 40    | 12
+        5     < 0 :      ▂    ▂    ▂     ▂         ▂         : >= 40    | 5
+        6     < 0 :      ▂    ▂    ▂     ▂    ▂    ▂         : >= 40    | 6
+        7     < 0 :      ▂    ▂    ▂     ▂     ▂▂▂▂          : >= 40    | 8
+
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :      X                                   : >= 40    | 1
+        3     < 0 :      X                                   : >= 40    | 1
+        4     < 0 :      X                                   : >= 40    | 1
+        5     < 0 :      X                                   : >= 40    | 1
+        6     < 0 :      X                                   : >= 40    | 1
+        7     < 0 :      X                                   : >= 40    | 1
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :     XX    X    X                         : >= 40    | 4
+        3     < 0 :    X  X   XX  XX                         : >= 40    | 6
+        4     < 0 :   X    X  X XX X                         : >= 40    | 6
+        5     < 0 :   XXXXXX  X    X                         : >= 40    | 8
+        6     < 0 :   X    X  X    X                         : >= 40    | 4
+        7     < 0 :   X    X  X    X                         : >= 40    | 4
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   X    X   XXXX    XXXXX                 : >= 40    | 11
+        3     < 0 :   XX   X  X    X     X                   : >= 40    | 6
+        4     < 0 :   X X  X  X    X     X                   : >= 40    | 6
+        5     < 0 :   X  X X  X    X     X                   : >= 40    | 6
+        6     < 0 :   X   XX  X    X     X                   : >= 40    | 6
+        7     < 0 :   X    X   XXXX      X                   : >= 40    | 7
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   X    X  XXXXXX  X       X              : >= 40    | 10
+        3     < 0 :   X    X  X       X       X              : >= 40    | 5
+        4     < 0 :   X    X  XXXXX   X       X              : >= 40    | 9
+        5     < 0 :   X XX X  X       X       X              : >= 40    | 7
+        6     < 0 :   XX  XX  X       X       X              : >= 40    | 7
+        7     < 0 :   X    X  XXXXXX  XXXXXX  XXXXXX         : >= 40    | 20
+
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :    ████   ██████  █    █  █████          : >= 40    | 17
+        3     < 0 :   █       █       ██   █  █    █         : >= 40    | 7
+        4     < 0 :    ████   █████   █ █  █  █    █         : >= 40    | 14
+        5     < 0 :        █  █       █  █ █  █    █         : >= 40    | 7
+        6     < 0 :   █    █  █       █   ██  █    █         : >= 40    | 8
+        7     < 0 :    ████   ██████  █    █  █████          : >= 40    | 17
+
+
+      key     min .------------------------------------------. max      | count
+        2     < 0 :   █    █  ██████  █       █████          : >= 40    | 14
+        3     < 0 :   █    █  █       █       █    █         : >= 40    | 6
+        4     < 0 :   ██████  █████   █       █    █         : >= 40    | 14
+        5     < 0 :   █    █  █       █       █████          : >= 40    | 9
+        6     < 0 :   █    █  █       █       █              : >= 40    | 5
+        7     < 0 :   █    █  ██████  ██████  █              : >= 40    | 15
+
--- /dev/null	2014-01-14 16:48:10.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d	2014-01-14 16:48:10.587416229 -0500
@@ -0,0 +1,43 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ */
+
+#pragma D option encoding=ascii
+#pragma D option quiet
+
+tick-1ms
+/i++ < 30/
+{
+	@[1] = lquantize(i, 0, 40, 1, 1000);
+	@[2] = lquantize(i, 0, 40, 1, 1000);
+	@[3] = lquantize(i, 0, 40, 1, 1000);
+}
+
+tick-1ms
+/i == 40/
+{
+	@[1] = lquantize(0, 0, 40, 1, 1);
+	@[1] = lquantize(i, 0, 40, 1, 2000);
+	@[2] = lquantize(0, 0, 40, 1, 1);
+	@[2] = lquantize(i, 0, 40, 1, 2000);
+	@[3] = lquantize(0, 0, 40, 1, 1);
+	@[3] = lquantize(i, 0, 40, 1, 2000);
+
+	printa(@);
+	setopt("aggpack");
+	printa(@);
+	setopt("aggzoom");
+	printa(@);
+	exit(0);
+}
--- /dev/null	2014-01-14 16:48:10.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d.out	2014-01-14 16:48:10.786012836 -0500
@@ -0,0 +1,149 @@
+
+        1
+           value  ------------- Distribution ------------- count    
+             < 0 |                                         0        
+               0 |                                         1        
+               1 |@                                        1000     
+               2 |@                                        1000     
+               3 |@                                        1000     
+               4 |@                                        1000     
+               5 |@                                        1000     
+               6 |@                                        1000     
+               7 |@                                        1000     
+               8 |@                                        1000     
+               9 |@                                        1000     
+              10 |@                                        1000     
+              11 |@                                        1000     
+              12 |@                                        1000     
+              13 |@                                        1000     
+              14 |@                                        1000     
+              15 |@                                        1000     
+              16 |@                                        1000     
+              17 |@                                        1000     
+              18 |@                                        1000     
+              19 |@                                        1000     
+              20 |@                                        1000     
+              21 |@                                        1000     
+              22 |@                                        1000     
+              23 |@                                        1000     
+              24 |@                                        1000     
+              25 |@                                        1000     
+              26 |@                                        1000     
+              27 |@                                        1000     
+              28 |@                                        1000     
+              29 |@                                        1000     
+              30 |@                                        1000     
+              31 |                                         0        
+              32 |                                         0        
+              33 |                                         0        
+              34 |                                         0        
+              35 |                                         0        
+              36 |                                         0        
+              37 |                                         0        
+              38 |                                         0        
+              39 |                                         0        
+           >= 40 |@@                                       2000     
+
+        2
+           value  ------------- Distribution ------------- count    
+             < 0 |                                         0        
+               0 |                                         1        
+               1 |@                                        1000     
+               2 |@                                        1000     
+               3 |@                                        1000     
+               4 |@                                        1000     
+               5 |@                                        1000     
+               6 |@                                        1000     
+               7 |@                                        1000     
+               8 |@                                        1000     
+               9 |@                                        1000     
+              10 |@                                        1000     
+              11 |@                                        1000     
+              12 |@                                        1000     
+              13 |@                                        1000     
+              14 |@                                        1000     
+              15 |@                                        1000     
+              16 |@                                        1000     
+              17 |@                                        1000     
+              18 |@                                        1000     
+              19 |@                                        1000     
+              20 |@                                        1000     
+              21 |@                                        1000     
+              22 |@                                        1000     
+              23 |@                                        1000     
+              24 |@                                        1000     
+              25 |@                                        1000     
+              26 |@                                        1000     
+              27 |@                                        1000     
+              28 |@                                        1000     
+              29 |@                                        1000     
+              30 |@                                        1000     
+              31 |                                         0        
+              32 |                                         0        
+              33 |                                         0        
+              34 |                                         0        
+              35 |                                         0        
+              36 |                                         0        
+              37 |                                         0        
+              38 |                                         0        
+              39 |                                         0        
+           >= 40 |@@                                       2000     
+
+        3
+           value  ------------- Distribution ------------- count    
+             < 0 |                                         0        
+               0 |                                         1        
+               1 |@                                        1000     
+               2 |@                                        1000     
+               3 |@                                        1000     
+               4 |@                                        1000     
+               5 |@                                        1000     
+               6 |@                                        1000     
+               7 |@                                        1000     
+               8 |@                                        1000     
+               9 |@                                        1000     
+              10 |@                                        1000     
+              11 |@                                        1000     
+              12 |@                                        1000     
+              13 |@                                        1000     
+              14 |@                                        1000     
+              15 |@                                        1000     
+              16 |@                                        1000     
+              17 |@                                        1000     
+              18 |@                                        1000     
+              19 |@                                        1000     
+              20 |@                                        1000     
+              21 |@                                        1000     
+              22 |@                                        1000     
+              23 |@                                        1000     
+              24 |@                                        1000     
+              25 |@                                        1000     
+              26 |@                                        1000     
+              27 |@                                        1000     
+              28 |@                                        1000     
+              29 |@                                        1000     
+              30 |@                                        1000     
+              31 |                                         0        
+              32 |                                         0        
+              33 |                                         0        
+              34 |                                         0        
+              35 |                                         0        
+              36 |                                         0        
+              37 |                                         0        
+              38 |                                         0        
+              39 |                                         0        
+           >= 40 |@@                                       2000     
+
+
+
+      key     min .------------------------------------------. max      | count
+        1     < 0 : _______________________________         _: >= 40    | 32001
+        2     < 0 : _______________________________         _: >= 40    | 32001
+        3     < 0 : _______________________________         _: >= 40    | 32001
+
+
+      key     min .------------------------------------------. max      | count
+        1     < 0 : _xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         X: >= 40    | 32001
+        2     < 0 : _xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         X: >= 40    | 32001
+        3     < 0 : _xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         X: >= 40    | 32001
+
--- /dev/null	2014-01-14 16:48:11.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d	2014-01-14 16:48:10.999224147 -0500
@@ -0,0 +1,35 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ */
+
+#pragma D option encoding=ascii
+#pragma D option quiet
+
+tick-1ms
+/i++ < 90/
+{
+	@ = lquantize(i, 0, 100, 1, 1000);
+}
+
+tick-1ms
+/i == 100/
+{
+	@ = lquantize(i++, 0, 100, 1, 2000);
+	@ = lquantize(i++, 0, 100, 1, 3000);
+
+	printa(@);
+	setopt("aggzoom");
+	printa(@);
+	exit(0);
+}
--- /dev/null	2014-01-14 16:48:11.000000000 -0500
+++ new/usr/src/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d.out	2014-01-14 16:48:11.216817456 -0500
@@ -0,0 +1,211 @@
+
+
+           value  ------------- Distribution ------------- count    
+               0 |                                         0        
+               1 |                                         1000     
+               2 |                                         1000     
+               3 |                                         1000     
+               4 |                                         1000     
+               5 |                                         1000     
+               6 |                                         1000     
+               7 |                                         1000     
+               8 |                                         1000     
+               9 |                                         1000     
+              10 |                                         1000     
+              11 |                                         1000     
+              12 |                                         1000     
+              13 |                                         1000     
+              14 |                                         1000     
+              15 |                                         1000     
+              16 |                                         1000     
+              17 |                                         1000     
+              18 |                                         1000     
+              19 |                                         1000     
+              20 |                                         1000     
+              21 |                                         1000     
+              22 |                                         1000     
+              23 |                                         1000     
+              24 |                                         1000     
+              25 |                                         1000     
+              26 |                                         1000     
+              27 |                                         1000     
+              28 |                                         1000     
+              29 |                                         1000     
+              30 |                                         1000     
+              31 |                                         1000     
+              32 |                                         1000     
+              33 |                                         1000     
+              34 |                                         1000     
+              35 |                                         1000     
+              36 |                                         1000     
+              37 |                                         1000     
+              38 |                                         1000     
+              39 |                                         1000     
+              40 |                                         1000     
+              41 |                                         1000     
+              42 |                                         1000     
+              43 |                                         1000     
+              44 |                                         1000     
+              45 |                                         1000     
+              46 |                                         1000     
+              47 |                                         1000     
+              48 |                                         1000     
+              49 |                                         1000     
+              50 |                                         1000     
+              51 |                                         1000     
+              52 |                                         1000     
+              53 |                                         1000     
+              54 |                                         1000     
+              55 |                                         1000     
+              56 |                                         1000     
+              57 |                                         1000     
+              58 |                                         1000     
+              59 |                                         1000     
+              60 |                                         1000     
+              61 |                                         1000     
+              62 |                                         1000     
+              63 |                                         1000     
+              64 |                                         1000     
+              65 |                                         1000     
+              66 |                                         1000     
+              67 |                                         1000     
+              68 |                                         1000     
+              69 |                                         1000     
+              70 |                                         1000     
+              71 |                                         1000     
+              72 |                                         1000     
+              73 |                                         1000     
+              74 |                                         1000     
+              75 |                                         1000     
+              76 |                                         1000     
+              77 |                                         1000     
+              78 |                                         1000     
+              79 |                                         1000     
+              80 |                                         1000     
+              81 |                                         1000     
+              82 |                                         1000     
+              83 |                                         1000     
+              84 |                                         1000     
+              85 |                                         1000     
+              86 |                                         1000     
+              87 |                                         1000     
+              88 |                                         1000     
+              89 |                                         1000     
+              90 |                                         1000     
+              91 |                                         0        
+              92 |                                         0        
+              93 |                                         0        
+              94 |                                         0        
+              95 |                                         0        
+              96 |                                         0        
+              97 |                                         0        
+              98 |                                         0        
+              99 |                                         0        
+          >= 100 |@@                                       5000     
+
+
+
+           value  ------------- Distribution ------------- count    
+               0 |                                         0        
+               1 |@@@@@@@@                                 1000     
+               2 |@@@@@@@@                                 1000     
+               3 |@@@@@@@@                                 1000     
+               4 |@@@@@@@@                                 1000     
+               5 |@@@@@@@@                                 1000     
+               6 |@@@@@@@@                                 1000     
+               7 |@@@@@@@@                                 1000     
+               8 |@@@@@@@@                                 1000     
+               9 |@@@@@@@@                                 1000     
+              10 |@@@@@@@@                                 1000     
+              11 |@@@@@@@@                                 1000     
+              12 |@@@@@@@@                                 1000     
+              13 |@@@@@@@@                                 1000     
+              14 |@@@@@@@@                                 1000     
+              15 |@@@@@@@@                                 1000     
+              16 |@@@@@@@@                                 1000     
+              17 |@@@@@@@@                                 1000     
+              18 |@@@@@@@@                                 1000     
+              19 |@@@@@@@@                                 1000     
+              20 |@@@@@@@@                                 1000     
+              21 |@@@@@@@@                                 1000     
+              22 |@@@@@@@@                                 1000     
+              23 |@@@@@@@@                                 1000     
+              24 |@@@@@@@@                                 1000     
+              25 |@@@@@@@@                                 1000     
+              26 |@@@@@@@@                                 1000     
+              27 |@@@@@@@@                                 1000     
+              28 |@@@@@@@@                                 1000     
+              29 |@@@@@@@@                                 1000     
+              30 |@@@@@@@@                                 1000     
+              31 |@@@@@@@@                                 1000     
+              32 |@@@@@@@@                                 1000     
+              33 |@@@@@@@@                                 1000     
+              34 |@@@@@@@@                                 1000     
+              35 |@@@@@@@@                                 1000     
+              36 |@@@@@@@@                                 1000     
+              37 |@@@@@@@@                                 1000     
+              38 |@@@@@@@@                                 1000     
+              39 |@@@@@@@@                                 1000     
+              40 |@@@@@@@@                                 1000     
+              41 |@@@@@@@@                                 1000     
+              42 |@@@@@@@@                                 1000     
+              43 |@@@@@@@@                                 1000     
+              44 |@@@@@@@@                                 1000     
+              45 |@@@@@@@@                                 1000     
+              46 |@@@@@@@@                                 1000     
+              47 |@@@@@@@@                                 1000     
+              48 |@@@@@@@@                                 1000     
+              49 |@@@@@@@@                                 1000     
+              50 |@@@@@@@@                                 1000     
+              51 |@@@@@@@@                                 1000     
+              52 |@@@@@@@@                                 1000     
+              53 |@@@@@@@@                                 1000     
+              54 |@@@@@@@@                                 1000     
+              55 |@@@@@@@@                                 1000     
+              56 |@@@@@@@@                                 1000     
+              57 |@@@@@@@@                                 1000     
+              58 |@@@@@@@@                                 1000     
+              59 |@@@@@@@@                                 1000     
+              60 |@@@@@@@@                                 1000     
+              61 |@@@@@@@@                                 1000     
+              62 |@@@@@@@@                                 1000     
+              63 |@@@@@@@@                                 1000     
+              64 |@@@@@@@@                                 1000     
+              65 |@@@@@@@@                                 1000     
+              66 |@@@@@@@@                                 1000     
+              67 |@@@@@@@@                                 1000     
+              68 |@@@@@@@@                                 1000     
+              69 |@@@@@@@@                                 1000     
+              70 |@@@@@@@@                                 1000     
+              71 |@@@@@@@@                                 1000     
+              72 |@@@@@@@@                                 1000     
+              73 |@@@@@@@@                                 1000     
+              74 |@@@@@@@@                                 1000     
+              75 |@@@@@@@@                                 1000     
+              76 |@@@@@@@@                                 1000     
+              77 |@@@@@@@@                                 1000     
+              78 |@@@@@@@@                                 1000     
+              79 |@@@@@@@@                                 1000     
+              80 |@@@@@@@@                                 1000     
+              81 |@@@@@@@@                                 1000     
+              82 |@@@@@@@@                                 1000     
+              83 |@@@@@@@@                                 1000     
+              84 |@@@@@@@@                                 1000     
+              85 |@@@@@@@@                                 1000     
+              86 |@@@@@@@@                                 1000     
+              87 |@@@@@@@@                                 1000     
+              88 |@@@@@@@@                                 1000     
+              89 |@@@@@@@@                                 1000     
+              90 |@@@@@@@@                                 1000     
+              91 |                                         0        
+              92 |                                         0        
+              93 |                                         0        
+              94 |                                         0        
+              95 |                                         0        
+              96 |                                         0        
+              97 |                                         0        
+              98 |                                         0        
+              99 |                                         0        
+          >= 100 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   5000     
+
+
--- old/usr/src/lib/libdtrace/common/dt_aggregate.c	2014-01-14 16:48:11.452149906 -0500
+++ new/usr/src/lib/libdtrace/common/dt_aggregate.c	2014-01-14 16:48:11.465310637 -0500
@@ -25,7 +25,7 @@
  */
 
 /*
- * Copyright (c) 2011, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
  * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
@@ -1291,6 +1291,231 @@
 }
 
 static int
+dt_aggregate_total(dtrace_hdl_t *dtp, boolean_t clear)
+{
+	dt_ahashent_t *h;
+	dtrace_aggdata_t **total;
+	dtrace_aggid_t max = DTRACE_AGGVARIDNONE, id;
+	dt_aggregate_t *agp = &dtp->dt_aggregate;
+	dt_ahash_t *hash = &agp->dtat_hash;
+	uint32_t tflags;
+
+	tflags = DTRACE_A_TOTAL | DTRACE_A_HASNEGATIVES | DTRACE_A_HASPOSITIVES;
+
+	/*
+	 * If we need to deliver per-aggregation totals, we're going to take
+	 * three passes over the aggregate:  one to clear everything out and
+	 * determine our maximum aggregation ID, one to actually total
+	 * everything up, and a final pass to assign the totals to the
+	 * individual elements.
+	 */
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data;
+
+		if ((id = dt_aggregate_aggvarid(h)) > max)
+			max = id;
+
+		aggdata->dtada_total = 0;
+		aggdata->dtada_flags &= ~tflags;
+	}
+
+	if (clear || max == DTRACE_AGGVARIDNONE)
+		return (0);
+
+	total = dt_zalloc(dtp, (max + 1) * sizeof (dtrace_aggdata_t *));
+
+	if (total == NULL)
+		return (-1);
+
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data;
+		dtrace_aggdesc_t *agg = aggdata->dtada_desc;
+		dtrace_recdesc_t *rec;
+		caddr_t data;
+		int64_t val, *addr;
+
+		rec = &agg->dtagd_rec[agg->dtagd_nrecs - 1];
+		data = aggdata->dtada_data;
+		addr = (int64_t *)(uintptr_t)(data + rec->dtrd_offset);
+
+		switch (rec->dtrd_action) {
+		case DTRACEAGG_STDDEV:
+			val = dt_stddev((uint64_t *)addr, 1);
+			break;
+
+		case DTRACEAGG_SUM:
+		case DTRACEAGG_COUNT:
+			val = *addr;
+			break;
+
+		case DTRACEAGG_AVG:
+			val = addr[0] ? (addr[1] / addr[0]) : 0;
+			break;
+
+		default:
+			continue;
+		}
+
+		if (total[agg->dtagd_varid] == NULL) {
+			total[agg->dtagd_varid] = aggdata;
+			aggdata->dtada_flags |= DTRACE_A_TOTAL;
+		} else {
+			aggdata = total[agg->dtagd_varid];
+		}
+
+		if (val > 0)
+			aggdata->dtada_flags |= DTRACE_A_HASPOSITIVES;
+
+		if (val < 0) {
+			aggdata->dtada_flags |= DTRACE_A_HASNEGATIVES;
+			val = -val;
+		}
+
+		if (dtp->dt_options[DTRACEOPT_AGGZOOM] != DTRACEOPT_UNSET) {
+			val = (int64_t)((long double)val *
+			    (1 / DTRACE_AGGZOOM_MAX));
+
+			if (val > aggdata->dtada_total)
+				aggdata->dtada_total = val;
+		} else {
+			aggdata->dtada_total += val;
+		}
+	}
+
+	/*
+	 * And now one final pass to set everyone's total.
+	 */
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data, *t;
+		dtrace_aggdesc_t *agg = aggdata->dtada_desc;
+
+		if ((t = total[agg->dtagd_varid]) == NULL || aggdata == t)
+			continue;
+
+		aggdata->dtada_total = t->dtada_total;
+		aggdata->dtada_flags |= (t->dtada_flags & tflags);
+	}
+
+	dt_free(dtp, total);
+
+	return (0);
+}
+
+static int
+dt_aggregate_minmaxbin(dtrace_hdl_t *dtp, boolean_t clear)
+{
+	dt_ahashent_t *h;
+	dtrace_aggdata_t **minmax;
+	dtrace_aggid_t max = DTRACE_AGGVARIDNONE, id;
+	dt_aggregate_t *agp = &dtp->dt_aggregate;
+	dt_ahash_t *hash = &agp->dtat_hash;
+
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data;
+
+		if ((id = dt_aggregate_aggvarid(h)) > max)
+			max = id;
+
+		aggdata->dtada_minbin = 0;
+		aggdata->dtada_maxbin = 0;
+		aggdata->dtada_flags &= ~DTRACE_A_MINMAXBIN;
+	}
+
+	if (clear || max == DTRACE_AGGVARIDNONE)
+		return (0);
+
+	minmax = dt_zalloc(dtp, (max + 1) * sizeof (dtrace_aggdata_t *));
+
+	if (minmax == NULL)
+		return (-1);
+
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data;
+		dtrace_aggdesc_t *agg = aggdata->dtada_desc;
+		dtrace_recdesc_t *rec;
+		caddr_t data;
+		int64_t *addr;
+		int minbin = -1, maxbin = -1, i;
+		int start = 0, size;
+
+		rec = &agg->dtagd_rec[agg->dtagd_nrecs - 1];
+		size = rec->dtrd_size / sizeof (int64_t);
+		data = aggdata->dtada_data;
+		addr = (int64_t *)(uintptr_t)(data + rec->dtrd_offset);
+
+		switch (rec->dtrd_action) {
+		case DTRACEAGG_LQUANTIZE:
+			/*
+			 * For lquantize(), we always display the entire range
+			 * of the aggregation when aggpack is set.
+			 */
+			start = 1;
+			minbin = start;
+			maxbin = size - 1 - start;
+			break;
+
+		case DTRACEAGG_QUANTIZE:
+			for (i = start; i < size; i++) {
+				if (!addr[i])
+					continue;
+
+				if (minbin == -1)
+					minbin = i - start;
+
+				maxbin = i - start;
+			}
+
+			if (minbin == -1) {
+				/*
+				 * If we have no data (e.g., due to a clear()
+				 * or negative increments), we'll use the
+				 * zero bucket as both our min and max.
+				 */
+				minbin = maxbin = DTRACE_QUANTIZE_ZEROBUCKET;
+			}
+
+			break;
+
+		default:
+			continue;
+		}
+
+		if (minmax[agg->dtagd_varid] == NULL) {
+			minmax[agg->dtagd_varid] = aggdata;
+			aggdata->dtada_flags |= DTRACE_A_MINMAXBIN;
+			aggdata->dtada_minbin = minbin;
+			aggdata->dtada_maxbin = maxbin;
+			continue;
+		}
+
+		if (minbin < minmax[agg->dtagd_varid]->dtada_minbin)
+			minmax[agg->dtagd_varid]->dtada_minbin = minbin;
+
+		if (maxbin > minmax[agg->dtagd_varid]->dtada_maxbin)
+			minmax[agg->dtagd_varid]->dtada_maxbin = maxbin;
+	}
+
+	/*
+	 * And now one final pass to set everyone's minbin and maxbin.
+	 */
+	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
+		dtrace_aggdata_t *aggdata = &h->dtahe_data, *mm;
+		dtrace_aggdesc_t *agg = aggdata->dtada_desc;
+
+		if ((mm = minmax[agg->dtagd_varid]) == NULL || aggdata == mm)
+			continue;
+
+		aggdata->dtada_minbin = mm->dtada_minbin;
+		aggdata->dtada_maxbin = mm->dtada_maxbin;
+		aggdata->dtada_flags |= DTRACE_A_MINMAXBIN;
+	}
+
+	dt_free(dtp, minmax);
+
+	return (0);
+}
+
+static int
 dt_aggregate_walk_sorted(dtrace_hdl_t *dtp,
     dtrace_aggregate_f *func, void *arg,
     int (*sfunc)(const void *, const void *))
@@ -1299,6 +1524,23 @@
 	dt_ahashent_t *h, **sorted;
 	dt_ahash_t *hash = &agp->dtat_hash;
 	size_t i, nentries = 0;
+	int rval = -1;
+
+	agp->dtat_flags &= ~(DTRACE_A_TOTAL | DTRACE_A_MINMAXBIN);
+
+	if (dtp->dt_options[DTRACEOPT_AGGHIST] != DTRACEOPT_UNSET) {
+		agp->dtat_flags |= DTRACE_A_TOTAL;
+
+		if (dt_aggregate_total(dtp, B_FALSE) != 0)
+			return (-1);
+	}
+
+	if (dtp->dt_options[DTRACEOPT_AGGPACK] != DTRACEOPT_UNSET) {
+		agp->dtat_flags |= DTRACE_A_MINMAXBIN;
+
+		if (dt_aggregate_minmaxbin(dtp, B_FALSE) != 0)
+			return (-1);
+	}
 
 	for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall)
 		nentries++;
@@ -1306,7 +1548,7 @@
 	sorted = dt_alloc(dtp, nentries * sizeof (dt_ahashent_t *));
 
 	if (sorted == NULL)
-		return (-1);
+		goto out;
 
 	for (h = hash->dtah_all, i = 0; h != NULL; h = h->dtahe_nextall)
 		sorted[i++] = h;
@@ -1330,14 +1572,20 @@
 	for (i = 0; i < nentries; i++) {
 		h = sorted[i];
 
-		if (dt_aggwalk_rval(dtp, h, func(&h->dtahe_data, arg)) == -1) {
-			dt_free(dtp, sorted);
-			return (-1);
-		}
+		if (dt_aggwalk_rval(dtp, h, func(&h->dtahe_data, arg)) == -1)
+			goto out;
 	}
 
+	rval = 0;
+out:
+	if (agp->dtat_flags & DTRACE_A_TOTAL)
+		(void) dt_aggregate_total(dtp, B_TRUE);
+
+	if (agp->dtat_flags & DTRACE_A_MINMAXBIN)
+		(void) dt_aggregate_minmaxbin(dtp, B_TRUE);
+
 	dt_free(dtp, sorted);
-	return (0);
+	return (rval);
 }
 
 int
@@ -1860,6 +2108,8 @@
 {
 	dt_print_aggdata_t pd;
 
+	bzero(&pd, sizeof (pd));
+
 	pd.dtpa_dtp = dtp;
 	pd.dtpa_fp = fp;
 	pd.dtpa_allunprint = 1;
--- old/usr/src/lib/libdtrace/common/dt_consume.c	2014-01-14 16:48:12.050409311 -0500
+++ new/usr/src/lib/libdtrace/common/dt_consume.c	2014-01-14 16:48:12.063675805 -0500
@@ -24,7 +24,7 @@
  */
 
 /*
- * Copyright (c) 2011, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
  * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
@@ -54,6 +54,25 @@
 	return (x);
 }
 
+static int
+dt_ndigits(long long val)
+{
+	int rval = 1;
+	long long cmp = 10;
+
+	if (val < 0) {
+		val = val == INT64_MIN ? INT64_MAX : -val;
+		rval++;
+	}
+
+	while (val > cmp && cmp > 0) {
+		rval++;
+		cmp *= 10;
+	}
+
+	return (rval < 4 ? 4 : rval);
+}
+
 /*
  * 128-bit arithmetic functions needed to support the stddev() aggregating
  * action.
@@ -482,7 +501,125 @@
 	return (DTRACE_CONSUME_NEXT);
 }
 
-int
+static void
+dt_quantize_total(dtrace_hdl_t *dtp, int64_t datum, long double *total)
+{
+	long double val = dt_fabsl((long double)datum);
+
+	if (dtp->dt_options[DTRACEOPT_AGGZOOM] == DTRACEOPT_UNSET) {
+		*total += val;
+		return;
+	}
+
+	/*
+	 * If we're zooming in on an aggregation, we want the height of the
+	 * highest value to be approximately 95% of total bar height -- so we
+	 * adjust up by the reciprocal of DTRACE_AGGZOOM_MAX when comparing to
+	 * our highest value.
+	 */
+	val *= 1 / DTRACE_AGGZOOM_MAX;
+
+	if (*total < val)
+		*total = val;
+}
+
+static int
+dt_print_quanthdr(dtrace_hdl_t *dtp, FILE *fp, int width)
+{
+	return (dt_printf(dtp, fp, "\n%*s %41s %-9s\n",
+	    width ? width : 16, width ? "key" : "value",
+	    "------------- Distribution -------------", "count"));
+}
+
+static int
+dt_print_quanthdr_packed(dtrace_hdl_t *dtp, FILE *fp, int width,
+    const dtrace_aggdata_t *aggdata, dtrace_actkind_t action)
+{
+	int min = aggdata->dtada_minbin, max = aggdata->dtada_maxbin;
+	int minwidth, maxwidth, i;
+
+	assert(action == DTRACEAGG_QUANTIZE || action == DTRACEAGG_LQUANTIZE);
+
+	if (action == DTRACEAGG_QUANTIZE) {
+		if (min != 0 && min != DTRACE_QUANTIZE_ZEROBUCKET)
+			min--;
+
+		if (max < DTRACE_QUANTIZE_NBUCKETS - 1)
+			max++;
+
+		minwidth = dt_ndigits(DTRACE_QUANTIZE_BUCKETVAL(min));
+		maxwidth = dt_ndigits(DTRACE_QUANTIZE_BUCKETVAL(max));
+	} else {
+		maxwidth = 8;
+		minwidth = maxwidth - 1;
+		max++;
+	}
+
+	if (dt_printf(dtp, fp, "\n%*s %*s .",
+	    width, width > 0 ? "key" : "", minwidth, "min") < 0)
+		return (-1);
+
+	for (i = min; i <= max; i++) {
+		if (dt_printf(dtp, fp, "-") < 0)
+			return (-1);
+	}
+
+	return (dt_printf(dtp, fp, ". %*s | count\n", -maxwidth, "max"));
+}
+
+/*
+ * We use a subset of the Unicode Block Elements (U+2588 through U+258F,
+ * inclusive) to represent aggregations via UTF-8 -- which are expressed via
+ * 3-byte UTF-8 sequences.
+ */
+#define	DTRACE_AGGUTF8_FULL	0x2588
+#define	DTRACE_AGGUTF8_BASE	0x258f
+#define	DTRACE_AGGUTF8_LEVELS	8
+
+#define	DTRACE_AGGUTF8_BYTE0(val)	(0xe0 | ((val) >> 12))
+#define	DTRACE_AGGUTF8_BYTE1(val)	(0x80 | (((val) >> 6) & 0x3f))
+#define	DTRACE_AGGUTF8_BYTE2(val)	(0x80 | ((val) & 0x3f))
+
+static int
+dt_print_quantline_utf8(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
+    uint64_t normal, long double total)
+{
+	uint_t len = 40, i, whole, partial;
+	long double f = (dt_fabsl((long double)val) * len) / total;
+	const char *spaces = "                                        ";
+
+	whole = (uint_t)f;
+	partial = (uint_t)((f - (long double)(uint_t)f) *
+	    (long double)DTRACE_AGGUTF8_LEVELS);
+
+	if (dt_printf(dtp, fp, "|") < 0)
+		return (-1);
+
+	for (i = 0; i < whole; i++) {
+		if (dt_printf(dtp, fp, "%c%c%c",
+		    DTRACE_AGGUTF8_BYTE0(DTRACE_AGGUTF8_FULL),
+		    DTRACE_AGGUTF8_BYTE1(DTRACE_AGGUTF8_FULL),
+		    DTRACE_AGGUTF8_BYTE2(DTRACE_AGGUTF8_FULL)) < 0)
+			return (-1);
+	}
+
+	if (partial != 0) {
+		partial = DTRACE_AGGUTF8_BASE - (partial - 1);
+
+		if (dt_printf(dtp, fp, "%c%c%c",
+		    DTRACE_AGGUTF8_BYTE0(partial),
+		    DTRACE_AGGUTF8_BYTE1(partial),
+		    DTRACE_AGGUTF8_BYTE2(partial)) < 0)
+			return (-1);
+
+		i++;
+	}
+
+	return (dt_printf(dtp, fp, "%s %-9lld\n", spaces + i,
+	    (long long)val / normal));
+}
+
+static int
 dt_print_quantline(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
     uint64_t normal, long double total, char positives, char negatives)
 {
@@ -500,6 +637,11 @@
 
 	if (!negatives) {
 		if (positives) {
+			if (dtp->dt_encoding == DT_ENCODING_UTF8) {
+				return (dt_print_quantline_utf8(dtp, fp, val,
+				    normal, total));
+			}
+
 			f = (dt_fabsl((long double)val) * len) / total;
 			depth = (uint_t)(f + 0.5);
 		} else {
@@ -542,6 +684,72 @@
 	}
 }
 
+/*
+ * As with UTF-8 printing of aggregations, we use a subset of the Unicode
+ * Block Elements (U+2581 through U+2588, inclusive) to represent our packed
+ * aggregation.
+ */
+#define	DTRACE_AGGPACK_BASE	0x2581
+#define	DTRACE_AGGPACK_LEVELS	8
+
+static int
+dt_print_packed(dtrace_hdl_t *dtp, FILE *fp,
+    long double datum, long double total)
+{
+	static boolean_t utf8_checked = B_FALSE;
+	static boolean_t utf8;
+	char *ascii = "__xxxxXX";
+	char *neg = "vvvvVV";
+	unsigned int len;
+	long double val;
+
+	if (!utf8_checked) {
+		char *term;
+
+		/*
+		 * We want to determine if we can reasonably emit UTF-8 for our
+		 * packed aggregation.  To do this, we will check for terminals
+		 * that are known to be primitive to emit UTF-8 on these.
+		 */
+		utf8_checked = B_TRUE;
+
+		if (dtp->dt_encoding == DT_ENCODING_ASCII)
+			utf8 = B_FALSE;
+		else if (dtp->dt_encoding == DT_ENCODING_UTF8)
+			utf8 = B_TRUE;
+		else if ((term = getenv("TERM")) != NULL &&
+		    (strcmp(term, "sun") == 0 ||
+		    strcmp(term, "sun-color") == 0) ||
+		    strcmp(term, "dumb") == 0)
+			utf8 = B_FALSE;
+		else
+			utf8 = B_TRUE;
+	}
+
+	if (datum == 0)
+		return (dt_printf(dtp, fp, " "));
+
+	if (datum < 0) {
+		len = strlen(neg);
+		val = dt_fabsl(datum * (len - 1)) / total;
+		return (dt_printf(dtp, fp, "%c", neg[(uint_t)(val + 0.5)]));
+	}
+
+	if (utf8) {
+		int block = DTRACE_AGGPACK_BASE + (unsigned int)(((datum *
+		    (DTRACE_AGGPACK_LEVELS - 1)) / total) + 0.5);
+
+		return (dt_printf(dtp, fp, "%c%c%c",
+		    DTRACE_AGGUTF8_BYTE0(block),
+		    DTRACE_AGGUTF8_BYTE1(block),
+		    DTRACE_AGGUTF8_BYTE2(block)));
+	}
+
+	len = strlen(ascii);
+	val = (datum * (len - 1)) / total;
+	return (dt_printf(dtp, fp, "%c", ascii[(uint_t)(val + 0.5)]));
+}
+
 int
 dt_print_quantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
     size_t size, uint64_t normal)
@@ -559,9 +767,9 @@
 
 	if (first_bin == DTRACE_QUANTIZE_NBUCKETS - 1) {
 		/*
-		 * There isn't any data.  This is possible if (and only if)
-		 * negative increment values have been used.  In this case,
-		 * we'll print the buckets around 0.
+		 * There isn't any data.  This is possible if the aggregation
+		 * has been clear()'d or if negative increment values have been
+		 * used.  Regardless, we'll print the buckets around 0.
 		 */
 		first_bin = DTRACE_QUANTIZE_ZEROBUCKET - 1;
 		last_bin = DTRACE_QUANTIZE_ZEROBUCKET + 1;
@@ -579,11 +787,10 @@
 	for (i = first_bin; i <= last_bin; i++) {
 		positives |= (data[i] > 0);
 		negatives |= (data[i] < 0);
-		total += dt_fabsl((long double)data[i]);
+		dt_quantize_total(dtp, data[i], &total);
 	}
 
-	if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
-	    "------------- Distribution -------------", "count") < 0)
+	if (dt_print_quanthdr(dtp, fp, 0) < 0)
 		return (-1);
 
 	for (i = first_bin; i <= last_bin; i++) {
@@ -600,6 +807,48 @@
 }
 
 int
+dt_print_quantize_packed(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
+    size_t size, const dtrace_aggdata_t *aggdata)
+{
+	const int64_t *data = addr;
+	long double total = 0, count = 0;
+	int min = aggdata->dtada_minbin, max = aggdata->dtada_maxbin, i;
+	int64_t minval, maxval;
+
+	if (size != DTRACE_QUANTIZE_NBUCKETS * sizeof (uint64_t))
+		return (dt_set_errno(dtp, EDT_DMISMATCH));
+
+	if (min != 0 && min != DTRACE_QUANTIZE_ZEROBUCKET)
+		min--;
+
+	if (max < DTRACE_QUANTIZE_NBUCKETS - 1)
+		max++;
+
+	minval = DTRACE_QUANTIZE_BUCKETVAL(min);
+	maxval = DTRACE_QUANTIZE_BUCKETVAL(max);
+
+	if (dt_printf(dtp, fp, " %*lld :", dt_ndigits(minval),
+	    (long long)minval) < 0)
+		return (-1);
+
+	for (i = min; i <= max; i++) {
+		dt_quantize_total(dtp, data[i], &total);
+		count += data[i];
+	}
+
+	for (i = min; i <= max; i++) {
+		if (dt_print_packed(dtp, fp, data[i], total) < 0)
+			return (-1);
+	}
+
+	if (dt_printf(dtp, fp, ": %*lld | %lld\n",
+	    -dt_ndigits(maxval), (long long)maxval, (long long)count) < 0)
+		return (-1);
+
+	return (0);
+}
+
+int
 dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
     size_t size, uint64_t normal)
 {
@@ -646,7 +895,7 @@
 	for (i = first_bin; i <= last_bin; i++) {
 		positives |= (data[i] > 0);
 		negatives |= (data[i] < 0);
-		total += dt_fabsl((long double)data[i]);
+		dt_quantize_total(dtp, data[i], &total);
 	}
 
 	if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
@@ -658,8 +907,7 @@
 		int err;
 
 		if (i == 0) {
-			(void) snprintf(c, sizeof (c), "< %d",
-			    base / (uint32_t)normal);
+			(void) snprintf(c, sizeof (c), "< %d", base);
 			err = dt_printf(dtp, fp, "%16s ", c);
 		} else if (i == levels + 1) {
 			(void) snprintf(c, sizeof (c), ">= %d",
@@ -678,6 +926,59 @@
 	return (0);
 }
 
+/*ARGSUSED*/
+int
+dt_print_lquantize_packed(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
+    size_t size, const dtrace_aggdata_t *aggdata)
+{
+	const int64_t *data = addr;
+	long double total = 0, count = 0;
+	int min, max, base, err;
+	uint64_t arg;
+	uint16_t step, levels;
+	char c[32];
+	unsigned int i;
+
+	if (size < sizeof (uint64_t))
+		return (dt_set_errno(dtp, EDT_DMISMATCH));
+
+	arg = *data++;
+	size -= sizeof (uint64_t);
+
+	base = DTRACE_LQUANTIZE_BASE(arg);
+	step = DTRACE_LQUANTIZE_STEP(arg);
+	levels = DTRACE_LQUANTIZE_LEVELS(arg);
+
+	if (size != sizeof (uint64_t) * (levels + 2))
+		return (dt_set_errno(dtp, EDT_DMISMATCH));
+
+	min = 0;
+	max = levels + 1;
+
+	if (min == 0) {
+		(void) snprintf(c, sizeof (c), "< %d", base);
+		err = dt_printf(dtp, fp, "%8s :", c);
+	} else {
+		err = dt_printf(dtp, fp, "%8d :", base + (min - 1) * step);
+	}
+
+	if (err < 0)
+		return (-1);
+
+	for (i = min; i <= max; i++) {
+		dt_quantize_total(dtp, data[i], &total);
+		count += data[i];
+	}
+
+	for (i = min; i <= max; i++) {
+		if (dt_print_packed(dtp, fp, data[i], total) < 0)
+			return (-1);
+	}
+
+	(void) snprintf(c, sizeof (c), ">= %d", base + (levels * step));
+	return (dt_printf(dtp, fp, ": %-8s | %lld\n", c, (long long)count));
+}
+
 int
 dt_print_llquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
     size_t size, uint64_t normal)
@@ -735,7 +1036,7 @@
 	for (i = first_bin; i <= last_bin; i++) {
 		positives |= (data[i] > 0);
 		negatives |= (data[i] < 0);
-		total += dt_fabsl((long double)data[i]);
+		dt_quantize_total(dtp, data[i], &total);
 	}
 
 	if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
@@ -818,7 +1119,7 @@
 }
 
 /*ARGSUSED*/
-int
+static int
 dt_print_bytes(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr,
     size_t nbytes, int width, int quiet, int forceraw)
 {
@@ -871,10 +1172,12 @@
 			if (j != nbytes)
 				break;
 
-			if (quiet)
+			if (quiet) {
 				return (dt_printf(dtp, fp, "%s", c));
-			else
-				return (dt_printf(dtp, fp, "  %-*s", width, c));
+			} else {
+				return (dt_printf(dtp, fp, " %s%*s",
+				    width < 0 ? " " : "", width, c));
+			}
 		}
 
 		break;
@@ -1479,10 +1782,83 @@
 
 static int
 dt_print_datum(dtrace_hdl_t *dtp, FILE *fp, dtrace_recdesc_t *rec,
-    caddr_t addr, size_t size, uint64_t normal)
+    caddr_t addr, size_t size, const dtrace_aggdata_t *aggdata,
+    uint64_t normal, dt_print_aggdata_t *pd)
 {
-	int err;
+	int err, width;
 	dtrace_actkind_t act = rec->dtrd_action;
+	boolean_t packed = pd->dtpa_agghist || pd->dtpa_aggpack;
+	dtrace_aggdesc_t *agg = aggdata->dtada_desc;
+
+	static struct {
+		size_t size;
+		int width;
+		int packedwidth;
+	} *fmt, fmttab[] = {
+		{ sizeof (uint8_t),	3,	3 },
+		{ sizeof (uint16_t),	5,	5 },
+		{ sizeof (uint32_t),	8,	8 },
+		{ sizeof (uint64_t),	16,	16 },
+		{ 0,			-50,	16 }
+	};
+
+	if (packed && pd->dtpa_agghisthdr != agg->dtagd_varid) {
+		dtrace_recdesc_t *r;
+
+		width = 0;
+
+		/*
+		 * To print our quantization header for either an agghist or
+		 * aggpack aggregation, we need to iterate through all of our
+		 * of our records to determine their width.
+		 */
+		for (r = rec; !DTRACEACT_ISAGG(r->dtrd_action); r++) {
+			for (fmt = fmttab; fmt->size &&
+			    fmt->size != r->dtrd_size; fmt++)
+				continue;
+
+			width += fmt->packedwidth + 1;
+		}
+
+		if (pd->dtpa_agghist) {
+			if (dt_print_quanthdr(dtp, fp, width) < 0)
+				return (-1);
+		} else {
+			if (dt_print_quanthdr_packed(dtp, fp,
+			    width, aggdata, r->dtrd_action) < 0)
+				return (-1);
+		}
+
+		pd->dtpa_agghisthdr = agg->dtagd_varid;
+	}
+
+	if (pd->dtpa_agghist && DTRACEACT_ISAGG(act)) {
+		char positives = aggdata->dtada_flags & DTRACE_A_HASPOSITIVES;
+		char negatives = aggdata->dtada_flags & DTRACE_A_HASNEGATIVES;
+		int64_t val;
+
+		assert(act == DTRACEAGG_SUM || act == DTRACEAGG_COUNT);
+		val = (long long)*((uint64_t *)addr);
+
+		if (dt_printf(dtp, fp, " ") < 0)
+			return (-1);
+
+		return (dt_print_quantline(dtp, fp, val, normal,
+		    aggdata->dtada_total, positives, negatives));
+	}
+
+	if (pd->dtpa_aggpack && DTRACEACT_ISAGG(act)) {
+		switch (act) {
+		case DTRACEAGG_QUANTIZE:
+			return (dt_print_quantize_packed(dtp,
+			    fp, addr, size, aggdata));
+		case DTRACEAGG_LQUANTIZE:
+			return (dt_print_lquantize_packed(dtp,
+			    fp, addr, size, aggdata));
+		default:
+			break;
+		}
+	}
 
 	switch (act) {
 	case DTRACEACT_STACK:
@@ -1525,28 +1901,33 @@
 		break;
 	}
 
+	for (fmt = fmttab; fmt->size && fmt->size != size; fmt++)
+		continue;
+
+	width = packed ? fmt->packedwidth : fmt->width;
+
 	switch (size) {
 	case sizeof (uint64_t):
-		err = dt_printf(dtp, fp, " %16lld",
+		err = dt_printf(dtp, fp, " %*lld", width,
 		    /* LINTED - alignment */
 		    (long long)*((uint64_t *)addr) / normal);
 		break;
 	case sizeof (uint32_t):
 		/* LINTED - alignment */
-		err = dt_printf(dtp, fp, " %8d", *((uint32_t *)addr) /
+		err = dt_printf(dtp, fp, " %*d", width, *((uint32_t *)addr) /
 		    (uint32_t)normal);
 		break;
 	case sizeof (uint16_t):
 		/* LINTED - alignment */
-		err = dt_printf(dtp, fp, " %5d", *((uint16_t *)addr) /
+		err = dt_printf(dtp, fp, " %*d", width, *((uint16_t *)addr) /
 		    (uint32_t)normal);
 		break;
 	case sizeof (uint8_t):
-		err = dt_printf(dtp, fp, " %3d", *((uint8_t *)addr) /
+		err = dt_printf(dtp, fp, " %*d", width, *((uint8_t *)addr) /
 		    (uint32_t)normal);
 		break;
 	default:
-		err = dt_print_bytes(dtp, fp, addr, size, 50, 0, 0);
+		err = dt_print_bytes(dtp, fp, addr, size, width, 0, 0);
 		break;
 	}
 
@@ -1567,6 +1948,9 @@
 	caddr_t addr;
 	size_t size;
 
+	pd->dtpa_agghist = (aggdata->dtada_flags & DTRACE_A_TOTAL);
+	pd->dtpa_aggpack = (aggdata->dtada_flags & DTRACE_A_MINMAXBIN);
+
 	/*
 	 * Iterate over each record description in the key, printing the traced
 	 * data, skipping the first datum (the tuple member created by the
@@ -1583,7 +1967,8 @@
 			break;
 		}
 
-		if (dt_print_datum(dtp, fp, rec, addr, size, 1) < 0)
+		if (dt_print_datum(dtp, fp, rec, addr,
+		    size, aggdata, 1, pd) < 0)
 			return (-1);
 
 		if (dt_buffered_flush(dtp, NULL, rec, aggdata,
@@ -1606,7 +1991,8 @@
 		assert(DTRACEACT_ISAGG(act));
 		normal = aggdata->dtada_normal;
 
-		if (dt_print_datum(dtp, fp, rec, addr, size, normal) < 0)
+		if (dt_print_datum(dtp, fp, rec, addr,
+		    size, aggdata, normal, pd) < 0)
 			return (-1);
 
 		if (dt_buffered_flush(dtp, NULL, rec, aggdata,
@@ -1617,8 +2003,10 @@
 			agg->dtagd_flags |= DTRACE_AGD_PRINTED;
 	}
 
-	if (dt_printf(dtp, fp, "\n") < 0)
-		return (-1);
+	if (!pd->dtpa_agghist && !pd->dtpa_aggpack) {
+		if (dt_printf(dtp, fp, "\n") < 0)
+			return (-1);
+	}
 
 	if (dt_buffered_flush(dtp, NULL, NULL, aggdata,
 	    DTRACE_BUFDATA_AGGFORMAT | DTRACE_BUFDATA_AGGLAST) < 0)
@@ -2075,7 +2463,7 @@
 				}
 
 				n = dt_print_bytes(dtp, fp, addr,
-				    tracememsize, 33, quiet, 1);
+				    tracememsize, -33, quiet, 1);
 
 				tracememsize = 0;
 
@@ -2108,7 +2496,7 @@
 				break;
 			default:
 				n = dt_print_bytes(dtp, fp, addr,
-				    rec->dtrd_size, 33, quiet, 0);
+				    rec->dtrd_size, -33, quiet, 0);
 				break;
 			}
 
--- old/usr/src/lib/libdtrace/common/dt_impl.h	2014-01-14 16:48:12.687138032 -0500
+++ new/usr/src/lib/libdtrace/common/dt_impl.h	2014-01-14 16:48:12.700361454 -0500
@@ -180,6 +180,9 @@
 	dtrace_aggvarid_t dtpa_id;	/* aggregation variable of interest */
 	FILE *dtpa_fp;			/* file pointer */
 	int dtpa_allunprint;		/* print only unprinted aggregations */
+	int dtpa_agghist;		/* print aggregation as histogram */
+	int dtpa_agghisthdr;		/* aggregation histogram hdr printed */
+	int dtpa_aggpack;		/* pack quantized aggregations */
 } dt_print_aggdata_t;
 
 typedef struct dt_dirpath {
@@ -274,6 +277,7 @@
 	uint_t dt_linktype;	/* dtrace link output file type (see below) */
 	uint_t dt_xlatemode;	/* dtrace translator linking mode (see below) */
 	uint_t dt_stdcmode;	/* dtrace stdc compatibility mode (see below) */
+	uint_t dt_encoding;	/* dtrace output encoding (see below) */
 	uint_t dt_treedump;	/* dtrace tree debug bitmap (see below) */
 	uint64_t dt_options[DTRACEOPT_MAX]; /* dtrace run-time options */
 	int dt_version;		/* library version requested by client */
@@ -357,6 +361,14 @@
 #define	DT_STDC_XT	3	/* ISO C + K&R C compat with ISO: __STDC__=0 */
 
 /*
+ * Values for the dt_encoding property, which is used to force a particular
+ * character encoding (overriding default behavior and/or automatic detection).
+ */
+#define	DT_ENCODING_UNSET	0
+#define	DT_ENCODING_ASCII	1
+#define	DT_ENCODING_UTF8	2
+
+/*
  * Macro to test whether a given pass bit is set in the dt_treedump bit-vector.
  * If the bit for pass 'p' is set, the D compiler displays the parse tree for
  * the program by printing it to stderr at the end of compiler pass 'p'.
--- old/usr/src/lib/libdtrace/common/dt_open.c	2014-01-14 16:48:13.212967704 -0500
+++ new/usr/src/lib/libdtrace/common/dt_open.c	2014-01-14 16:48:13.226223458 -0500
@@ -114,8 +114,9 @@
 #define	DT_VERS_1_10	DT_VERSION_NUMBER(1, 10, 0)
 #define	DT_VERS_1_11	DT_VERSION_NUMBER(1, 11, 0)
 #define	DT_VERS_1_12	DT_VERSION_NUMBER(1, 12, 0)
-#define	DT_VERS_LATEST	DT_VERS_1_11
-#define	DT_VERS_STRING	"Sun D 1.12"
+#define	DT_VERS_1_12_1	DT_VERSION_NUMBER(1, 12, 1)
+#define	DT_VERS_LATEST	DT_VERS_1_12_1
+#define	DT_VERS_STRING	"Sun D 1.12.1"
 
 const dt_version_t _dtrace_versions[] = {
 	DT_VERS_1_0,	/* D API 1.0.0 (PSARC 2001/466) Solaris 10 FCS */
@@ -140,6 +141,7 @@
 	DT_VERS_1_10,	/* D API 1.10 */
 	DT_VERS_1_11,	/* D API 1.11 */
 	DT_VERS_1_12,	/* D API 1.12 */
+	DT_VERS_1_12_1,	/* D API 1.12.1 */
 	0
 };
 
@@ -940,6 +942,7 @@
 	dtp->dt_linktype = DT_LTYP_ELF;
 	dtp->dt_xlatemode = DT_XL_STATIC;
 	dtp->dt_stdcmode = DT_STDC_XA;
+	dtp->dt_encoding = DT_ENCODING_UNSET;
 	dtp->dt_version = version;
 	dtp->dt_fd = dtfd;
 	dtp->dt_ftfd = ftfd;
--- old/usr/src/lib/libdtrace/common/dt_options.c	2014-01-14 16:48:14.031053868 -0500
+++ new/usr/src/lib/libdtrace/common/dt_options.c	2014-01-14 16:48:14.044082027 -0500
@@ -25,6 +25,7 @@
  */
 
 /*
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
  * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
@@ -336,6 +337,23 @@
 
 /*ARGSUSED*/
 static int
+dt_opt_encoding(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
+{
+	if (arg == NULL)
+		return (dt_set_errno(dtp, EDT_BADOPTVAL));
+
+	if (strcmp(arg, "ascii") == 0)
+		dtp->dt_encoding = DT_ENCODING_ASCII;
+	else if (strcmp(arg, "utf8") == 0)
+		dtp->dt_encoding = DT_ENCODING_UTF8;
+	else
+		return (dt_set_errno(dtp, EDT_BADOPTVAL));
+
+	return (0);
+}
+
+/*ARGSUSED*/
+static int
 dt_opt_evaltime(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
 {
 	if (arg == NULL)
@@ -917,6 +935,7 @@
 	{ "define", dt_opt_cpp_opts, (uintptr_t)"-D" },
 	{ "droptags", dt_opt_droptags },
 	{ "empty", dt_opt_cflags, DTRACE_C_EMPTY },
+	{ "encoding", dt_opt_encoding },
 	{ "errtags", dt_opt_cflags, DTRACE_C_ETAGS },
 	{ "evaltime", dt_opt_evaltime },
 	{ "incdir", dt_opt_cpp_opts, (uintptr_t)"-I" },
@@ -977,11 +996,14 @@
  * Dynamic run-time options.
  */
 static const dt_option_t _dtrace_drtoptions[] = {
+	{ "agghist", dt_opt_runtime, DTRACEOPT_AGGHIST },
+	{ "aggpack", dt_opt_runtime, DTRACEOPT_AGGPACK },
 	{ "aggrate", dt_opt_rate, DTRACEOPT_AGGRATE },
 	{ "aggsortkey", dt_opt_runtime, DTRACEOPT_AGGSORTKEY },
 	{ "aggsortkeypos", dt_opt_runtime, DTRACEOPT_AGGSORTKEYPOS },
 	{ "aggsortpos", dt_opt_runtime, DTRACEOPT_AGGSORTPOS },
 	{ "aggsortrev", dt_opt_runtime, DTRACEOPT_AGGSORTREV },
+	{ "aggzoom", dt_opt_runtime, DTRACEOPT_AGGZOOM },
 	{ "flowindent", dt_opt_runtime, DTRACEOPT_FLOWINDENT },
 	{ "quiet", dt_opt_runtime, DTRACEOPT_QUIET },
 	{ "rawbytes", dt_opt_runtime, DTRACEOPT_RAWBYTES },
--- old/usr/src/lib/libdtrace/common/dtrace.h	2014-01-14 16:48:14.562936717 -0500
+++ new/usr/src/lib/libdtrace/common/dtrace.h	2014-01-14 16:48:14.576141066 -0500
@@ -353,6 +353,12 @@
 #define	DTRACE_A_PERCPU		0x0001
 #define	DTRACE_A_KEEPDELTA	0x0002
 #define	DTRACE_A_ANONYMOUS	0x0004
+#define	DTRACE_A_TOTAL		0x0008
+#define	DTRACE_A_MINMAXBIN	0x0010
+#define	DTRACE_A_HASNEGATIVES	0x0020
+#define	DTRACE_A_HASPOSITIVES	0x0040
+
+#define	DTRACE_AGGZOOM_MAX		0.95	/* height of max bar */
 
 #define	DTRACE_AGGWALK_ERROR		-1	/* error while processing */
 #define	DTRACE_AGGWALK_NEXT		0	/* proceed to next element */
@@ -373,6 +379,10 @@
 	caddr_t dtada_delta;			/* delta data, if available */
 	caddr_t *dtada_percpu;			/* per CPU data, if avail */
 	caddr_t *dtada_percpu_delta;		/* per CPU delta, if avail */
+	int64_t dtada_total;			/* per agg total, if avail */
+	uint16_t dtada_minbin;			/* minimum bin, if avail */
+	uint16_t dtada_maxbin;			/* maximum bin, if avail */
+	uint32_t dtada_flags;			/* flags */
 };
 
 typedef int dtrace_aggregate_f(const dtrace_aggdata_t *, void *);
--- old/usr/src/pkg/manifests/system-dtrace-tests.mf	2014-01-14 16:48:15.122665865 -0500
+++ new/usr/src/pkg/manifests/system-dtrace-tests.mf	2014-01-14 16:48:15.137377993 -0500
@@ -250,6 +250,18 @@
 file path=opt/SUNWdtrt/tst/common/aggs/err.D_TRUNC_PROTO.badmany.d mode=0444
 file path=opt/SUNWdtrt/tst/common/aggs/err.D_TRUNC_PROTO.badnone.d mode=0444
 file path=opt/SUNWdtrt/tst/common/aggs/err.D_TRUNC_SCALAR.bad.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggencoding.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggencoding.d.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.agghist.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.agghist.d.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpack.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpack.d.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpackbanner.ksh mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpackbanner.ksh.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpackzoom.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggpackzoom.d.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggzoom.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.aggzoom.d.out mode=0444
 file path=opt/SUNWdtrt/tst/common/aggs/tst.allquant.d mode=0444
 file path=opt/SUNWdtrt/tst/common/aggs/tst.allquant.d.out mode=0444
 file path=opt/SUNWdtrt/tst/common/aggs/tst.avg.d mode=0444
--- old/usr/src/uts/common/sys/dtrace.h	2014-01-14 16:48:15.729872521 -0500
+++ new/usr/src/uts/common/sys/dtrace.h	2014-01-14 16:48:15.743259387 -0500
@@ -1023,7 +1023,11 @@
 #define	DTRACEOPT_AGGSORTPOS	25	/* agg. position to sort on */
 #define	DTRACEOPT_AGGSORTKEYPOS	26	/* agg. key position to sort on */
 #define	DTRACEOPT_TEMPORAL	27	/* temporally ordered output */
-#define	DTRACEOPT_MAX		28	/* number of options */
+#define	DTRACEOPT_AGGHIST	28	/* histogram aggregation output */
+#define	DTRACEOPT_AGGPACK	29	/* packed aggregation output */
+#define	DTRACEOPT_AGGZOOM	30	/* zoomed aggregation scaling */
+#define	DTRACEOPT_ZONE		31	/* zone in which to enable probes */
+#define	DTRACEOPT_MAX		32	/* number of options */
 
 #define	DTRACEOPT_UNSET		(dtrace_optval_t)-2	/* unset option */
 
