1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Test program for elf_update function. 2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Copyright (C) 2000, 2002, 2005 Red Hat, Inc. 3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng This file is part of Red Hat elfutils. 4441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Written by Ulrich Drepper <drepper@redhat.com>, 2000. 5441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is free software; you can redistribute it and/or modify 7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng it under the terms of the GNU General Public License as published by the 8cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Free Software Foundation; version 2 of the License. 9441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is distributed in the hope that it will be useful, but 11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng WITHOUT ANY WARRANTY; without even the implied warranty of 12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng General Public License for more details. 14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng You should have received a copy of the GNU General Public License along 16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng with Red Hat elfutils; if not, write to the Free Software Foundation, 17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is an included package of the Open Invention Network. 20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng An included package of the Open Invention Network is a package for which 21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Open Invention Network licensees cross-license their patents. No patent 22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng license is granted, either expressly or impliedly, by designation as an 23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng included package. Should you wish to participate in the Open Invention 24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Network licensing program, please visit www.openinventionnetwork.com 25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng <http://www.openinventionnetwork.com>. */ 26441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 27441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifdef HAVE_CONFIG_H 28441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# include <config.h> 29441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif 30441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 31441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <errno.h> 32441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <fcntl.h> 33441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libelf.h> 34441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdio.h> 35441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdlib.h> 36441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <string.h> 37441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#include ELFUTILS_HEADER(ebl) 39441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 40441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 41441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectint 42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengmain (int argc, char *argv[] __attribute__ ((unused))) 43441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 44441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project const char *fname = "xxx"; 45441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int fd; 46441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf *elf; 47441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf32_Ehdr *ehdr; 48441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf32_Phdr *phdr; 49441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf_Scn *scn; 50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf32_Shdr *shdr; 51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf_Data *data; 52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Ebl_Strtab *shst; 53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Ebl_Strent *shstrtabse; 54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int i; 55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666); 57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (fd == -1) 58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot open `%s': %s\n", fname, strerror (errno)); 60441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project elf_version (EV_CURRENT); 64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 65441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project elf_fill (0x42); 66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 67441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project elf = elf_begin (fd, ELF_C_WRITE, NULL); 68441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (elf == NULL) 69441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); 71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Create an ELF header. */ 75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr = elf32_newehdr (elf); 76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (ehdr == NULL) 77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); 79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Print the ELF header values. */ 83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (argc > 1) 84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 85441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project for (i = 0; i < EI_NIDENT; ++i) 86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf (" %02x", ehdr->e_ident[i]); 87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("\ 88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" 89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" 90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", 91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, 92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, 93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, 94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_shnum, ehdr->e_shstrndx); 95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 96441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_ident[0] = 42; 98441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_ident[4] = 1; 99441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_ident[5] = 1; 100441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_ident[6] = 2; 101441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_type = ET_EXEC; 102441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_version = 1; 103441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_ehsize = 1; 104441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY); 105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Create the program header. */ 107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr = elf32_newphdr (elf, 1); 108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (phdr == NULL) 109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot create program header: %s\n", elf_errmsg (-1)); 111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_type = PT_PHDR; 115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY); 116441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 117441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shst = ebl_strtabinit (true); 118441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project scn = elf_newscn (elf); 120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (scn == NULL) 121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot create SHSTRTAB section: %s\n", elf_errmsg (-1)); 123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr = elf32_getshdr (scn); 126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (shdr == NULL) 127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot get header for SHSTRTAB section: %s\n", elf_errmsg (-1)); 129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shstrtabse = ebl_strtabadd (shst, ".shstrtab", 0); 133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_type = SHT_STRTAB; 135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_flags = 0; 136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_addr = 0; 137441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_link = SHN_UNDEF; 138441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_info = SHN_UNDEF; 139441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_addralign = 1; 140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_entsize = 0; 141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* We have to store the section index in the ELF header. */ 143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_shstrndx = elf_ndxscn (scn); 144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project data = elf_newdata (scn); 146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (data == NULL) 147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("cannot create data SHSTRTAB section: %s\n", elf_errmsg (-1)); 149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* No more sections, finalize the section header string table. */ 153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ebl_strtabfinalize (shst, data); 154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project shdr->sh_name = ebl_strtaboffset (shstrtabse); 156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Let the library compute the internal structure information. */ 158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (elf_update (elf, ELF_C_NULL) < 0) 159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1)); 161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr = elf32_getehdr (elf); 165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 166441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_offset = ehdr->e_phoff; 167441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_offset = ehdr->e_phoff; 168441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_vaddr = ehdr->e_phoff; 169441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_paddr = ehdr->e_phoff; 170441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_flags = PF_R | PF_X; 171441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); 172441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); 173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project phdr[0].p_align = sizeof (Elf32_Word); 174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Write out the file. */ 176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (elf_update (elf, ELF_C_WRITE) < 0) 177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1)); 179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 182441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* We don't need the string table anymore. */ 183441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ebl_strtabfree (shst); 184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* And the data allocated in the .shstrtab section. */ 186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project free (data->d_buf); 187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Print the ELF header values. */ 189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (argc > 1) 190441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project for (i = 0; i < EI_NIDENT; ++i) 192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf (" %02x", ehdr->e_ident[i]); 193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("\ 194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" 195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" 196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", 197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, 198441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, 199441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, 200441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ehdr->e_shnum, ehdr->e_shstrndx); 201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 202441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (elf_end (elf) != 0) 204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 205441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("failure in elf_end: %s\n", elf_errmsg (-1)); 206441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project exit (1); 207441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 208441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project return 0; 210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} 211