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