Print this page
7713 fabric-xlate fmd(1m) module isn't 64-bit safe

*** 19,36 **** --- 19,39 ---- * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2016 Jason King */ + #include <strings.h> #include <fm/topo_hc.h> #include <sys/fm/util.h> #include <libxml/xpath.h> #include <libxml/parser.h> #include <libxml/xpathInternals.h> #include <libxml/tree.h> + #include <sys/debug.h> #include "fabric-xlate.h" #define HAS_PROP(node, name) xmlHasProp(node, (const xmlChar *)name) #define GET_PROP(node, name) ((char *)xmlGetProp(node, (const xmlChar *)name))
*** 182,199 **** void fab_send_erpt(fmd_hdl_t *hdl, fab_data_t *data, fab_err_tbl_t *tbl) { fab_erpt_tbl_t *erpt_tbl, *entry; nvlist_t *erpt; uint32_t reg; erpt_tbl = tbl->erpt_tbl; if (tbl->reg_size == 16) { ! reg = (uint32_t)*((uint16_t *) ! ((uint32_t)data + tbl->reg_offset)); } else { ! reg = *((uint32_t *)((uint32_t)data + tbl->reg_offset)); } for (entry = erpt_tbl; entry->err_class; entry++) { if (!(reg & entry->reg_bit)) continue; --- 185,205 ---- void fab_send_erpt(fmd_hdl_t *hdl, fab_data_t *data, fab_err_tbl_t *tbl) { fab_erpt_tbl_t *erpt_tbl, *entry; nvlist_t *erpt; + uintptr_t addr; uint32_t reg; erpt_tbl = tbl->erpt_tbl; + addr = (uintptr_t)data + tbl->reg_offset; + if (tbl->reg_size == 16) { ! reg = (uint32_t)*((uint16_t *)addr); } else { ! ASSERT3U(tbl->reg_size, ==, 32); ! reg = *((uint32_t *)addr); } for (entry = erpt_tbl; entry->err_class; entry++) { if (!(reg & entry->reg_bit)) continue;