ae115bc77f6fcde83175c75b4206dc2e50747966mrj * CDDL HEADER START
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * The contents of this file are subject to the terms of the
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Common Development and Distribution License (the "License").
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * You may not use this file except in compliance with the License.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * See the License for the specific language governing permissions
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * and limitations under the License.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * When distributing Covered Code, include this CDDL HEADER in each
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * If applicable, add the following below this CDDL HEADER, with the
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * fields enclosed by brackets "[]" replaced with your own identifying
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * information: Portions Copyright [yyyy] [name of copyright owner]
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * CDDL HEADER END
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Use is subject to license terms.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj#pragma ident "%Z%%M% %I% %E% SMI"
ae115bc77f6fcde83175c75b4206dc2e50747966mrjstatic char *image; /* pointer to the ELF file in memory */
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Extract the PT_LOAD bits and format them into a .s
ae115bc77f6fcde83175c75b4206dc2e50747966mrjstatic void
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: not ET_EXEC, e_type = 0x%x\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: no program headers\n", pname);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Get the program headers.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: Failed to get %d program hdrs\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Find the PT_LOAD section
ae115bc77f6fcde83175c75b4206dc2e50747966mrj /*LINTED [ELF program header alignment]*/
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (c % cnt == 0)
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (c % cnt == 0) {
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: Failed finding PT_LOAD section\n", pname);
ae115bc77f6fcde83175c75b4206dc2e50747966mrjstatic void
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: not ET_EXEC, e_type = 0x%x\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: no program headers\n", pname);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Get the program headers.
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: Failed to get %d program hdrs\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * Find the PT_LOAD section
ae115bc77f6fcde83175c75b4206dc2e50747966mrj /*LINTED [ELF program header alignment]*/
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (c % cnt == 0)
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (c % cnt == 0) {
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: Failed finding PT_LOAD section\n", pname);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * we expect one argument -- the elf file
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "usage: %s <unix-elf-file>\n", argv[0]);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (fd < 0) {
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: open(%s, O_RDONLY) failed, %s\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: stat(%s, ...) failed, %s\n",
ae115bc77f6fcde83175c75b4206dc2e50747966mrj * mmap the file
ae115bc77f6fcde83175c75b4206dc2e50747966mrj ident = ELFSEEK(0);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj if (ident[EI_MAG0] != ELFMAG0 || ident[EI_MAG1] != ELFMAG1 ||
ae115bc77f6fcde83175c75b4206dc2e50747966mrj ident[EI_MAG2] != ELFMAG2 || ident[EI_MAG3] != ELFMAG3) {
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: not an ELF file!\n", pname);
ae115bc77f6fcde83175c75b4206dc2e50747966mrj (void) fprintf(stderr, "%s: Wrong ELF class 0x%x\n", pname,
ae115bc77f6fcde83175c75b4206dc2e50747966mrj return (0);