c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * CDDL HEADER START
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * The contents of this file are subject to the terms of the
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Common Development and Distribution License (the "License").
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * You may not use this file except in compliance with the License.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * See the License for the specific language governing permissions
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * and limitations under the License.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * When distributing Covered Code, include this CDDL HEADER in each
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * If applicable, add the following below this CDDL HEADER, with the
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * fields enclosed by brackets "[]" replaced with your own identifying
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * information: Portions Copyright [yyyy] [name of copyright owner]
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * CDDL HEADER END
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Use is subject to license terms.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <_elfdump.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Functions for extracting and formatting numeric values from
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * structure data.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Extract the integral field into the value union given and
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * perform any necessary byte swapping to make the result readable
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * on the elfdump host.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87absl_extract_num_field(const char *data, int do_swap, const sl_field_t *fdesc,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Copy the value bytes into our union */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Do byte swapping as necessary */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Extract the given integer field, and return its value, cast
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * to Word. Note that this operation must not be used on values
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * that can be negative, or larger than 32-bits, as information
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * can be lost.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87absl_extract_as_word(const char *data, int do_swap, const sl_field_t *fdesc)
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Extract the value from the raw data */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* This should not be reached */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab return (0);
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Extract the given integer field, and return its value, cast
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe * to Lword. Note that this operation must not be used on values
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * that can be negative, as information can be lost.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87absl_extract_as_lword(const char *data, int do_swap, const sl_field_t *fdesc)
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Extract the value from the raw data */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* This should not be reached */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab return (0);
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Extract the given integer field, and return its value, cast
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * to int32_t. Note that this operation must not be used on unsigned
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * values larger than 31-bits, or on signed values larger than 32-bits,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * as information can be lost.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87absl_extract_as_sword(const char *data, int do_swap, const sl_field_t *fdesc)
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Extract the value from the raw data */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* This should not be reached */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab return (0);
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Extract the integral field and format it into the supplied buffer.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abconst char *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87absl_fmt_num(const char *data, int do_swap, const sl_field_t *fdesc,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * These static arrays are indexed by [fdesc->slf_sign][fmt_type]
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * to get a format string to use for the specified combination.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Extract the value from the raw data */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Format into the buffer. Note that we depend on the signed
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * and unsigned versions of each width being equivalent as long
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * as the format specifies the proper formatting.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab fmt_i16[fdesc->slf_sign][fmt_type], (uint32_t)v.sld_ui16);
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Return structure layout definition for the given machine type,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * or NULL if the specified machine is not supported.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab switch (mach) {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Unsupported architecture */