1a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper/* Copyright (C) 2002, 2005 Red Hat, Inc.
2de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is part of elfutils.
3b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
5de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is free software; you can redistribute it and/or modify
6de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   it under the terms of the GNU General Public License as published by
7de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   the Free Software Foundation; either version 3 of the License, or
8de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   (at your option) any later version.
9b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
10de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   elfutils is distributed in the hope that it will be useful, but
11361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   WITHOUT ANY WARRANTY; without even the implied warranty of
12de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   GNU General Public License for more details.
14361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper
15de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   You should have received a copy of the GNU General Public License
16de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
18d7f8d0caa7a357f9f4765e5dc93255f5057eba2eRoland McGrath#ifdef HAVE_CONFIG_H
19d7f8d0caa7a357f9f4765e5dc93255f5057eba2eRoland McGrath# include <config.h>
20d7f8d0caa7a357f9f4765e5dc93255f5057eba2eRoland McGrath#endif
21d7f8d0caa7a357f9f4765e5dc93255f5057eba2eRoland McGrath
22b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <fcntl.h>
23d7f8d0caa7a357f9f4765e5dc93255f5057eba2eRoland McGrath#include ELFUTILS_HEADER(asm)
24b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libelf.h>
25b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdio.h>
26b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <string.h>
27b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <unistd.h>
28b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
29b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
30b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic const char fname[] = "asm-tst1-out.o";
31b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
32b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
33b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic const GElf_Ehdr expected_ehdr =
34b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  {
35b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_ident = { [EI_MAG0] = ELFMAG0,
36b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_MAG1] = ELFMAG1,
37b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_MAG2] = ELFMAG2,
38b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_MAG3] = ELFMAG3,
39b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_CLASS] = ELFCLASS32,
40b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_DATA] = ELFDATA2LSB,
41b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		 [EI_VERSION] = EV_CURRENT },
42b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_type = ET_REL,
43b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_machine = EM_386,
44b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_version = EV_CURRENT,
45b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_shoff = 88,
46b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_ehsize = sizeof (Elf32_Ehdr),
47b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_shentsize = sizeof (Elf32_Shdr),
48b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_shnum = 4,
49b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    .e_shstrndx = 3
50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  };
51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic const char *scnnames[4] =
54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  {
55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    [0] = "",
56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    [1] = ".text",
57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    [2] = ".data",
58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    [3] = ".shstrtab"
59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  };
60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperint
63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Dreppermain (void)
64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{
65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  AsmCtx_t *ctx;
66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  AsmScn_t *scn1;
67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  AsmScn_t *scn2;
68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  int fd;
69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  Elf *elf;
70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  GElf_Ehdr ehdr_mem;
71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  GElf_Ehdr *ehdr;
72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  int result = 0;
73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  size_t cnt;
74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
75b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  elf_version (EV_CURRENT);
76b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
77a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper  Ebl *ebl = ebl_openbackend_machine (EM_386);
78a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper  if (ebl == NULL)
79a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper    {
80a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper      puts ("cannot open backend library");
81a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper      return 1;
82a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper    }
83a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper
84a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper  ctx = asm_begin (fname, ebl, false);
85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (ctx == NULL)
86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      return 1;
89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
91b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Create two sections.  */
92b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  scn1 = asm_newscn (ctx, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR);
93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  scn2 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (scn1 == NULL || scn2 == NULL)
95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot create section in output file: %s\n", asm_errmsg (-1));
97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      asm_abort (ctx);
98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      return 1;
99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Special alignment for the .text section.  */
102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (asm_align (scn1, 32) != 0)
103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot align .text section: %s\n", asm_errmsg (-1));
105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Create the output file.  */
109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (asm_end (ctx) != 0)
110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot create output file: %s\n", asm_errmsg (-1));
112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      asm_abort (ctx);
113b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      return 1;
114b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
115b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
116b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Check the file.  */
117b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  fd = open (fname, O_RDONLY);
118b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (fd == -1)
119b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
120b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot open generated file: %m\n");
121b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
122b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      goto out;
123b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
125b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  elf = elf_begin (fd, ELF_C_READ, NULL);
126b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (elf == NULL)
127b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
128b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
129b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
130b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      goto out_close;
131b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
132b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (elf_kind (elf) != ELF_K_ELF)
133b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
134b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      puts ("not a valid ELF file");
135b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
136b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      goto out_close2;
137b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
138b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
139b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  ehdr = gelf_getehdr (elf, &ehdr_mem);
140b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (ehdr == NULL)
141b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
142b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      printf ("cannot get ELF header: %s\n", elf_errmsg (-1));
143b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
144b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      goto out_close2;
145b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
146b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
147b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0)
148b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
149b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      puts ("ELF header does not match");
150b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      result = 1;
151b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      goto out_close2;
152b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
153b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
154b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  for (cnt = 1; cnt < 4; ++cnt)
155b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
156b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      Elf_Scn *scn;
157b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      GElf_Shdr shdr_mem;
158b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      GElf_Shdr *shdr;
159b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
160b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      scn = elf_getscn (elf, cnt);
161b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (scn == NULL)
162b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
1632ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("cannot get section %zd: %s\n", cnt, elf_errmsg (-1));
164b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
165b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  continue;
166b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
167b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
168b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      shdr = gelf_getshdr (scn, &shdr_mem);
169b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr == NULL)
170b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
1712ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("cannot get section header for section %zd: %s\n",
172b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		  cnt, elf_errmsg (-1));
173b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
174b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  continue;
175b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
176b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
177b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
178b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		  scnnames[cnt]) != 0)
179b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
1802ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's name differs: %s vs %s\n", cnt,
181b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		  elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
182b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		  scnnames[cnt]);
183b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
184b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
185b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
186b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_type != (cnt == 3 ? SHT_STRTAB : SHT_PROGBITS))
187b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
1882ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's type differs\n", cnt);
189b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
190b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
191b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
192b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_EXECINSTR))
193b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  || (cnt == 2 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE))
194b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  || (cnt == 3 && shdr->sh_flags != 0))
195b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
1962ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's flags differs\n", cnt);
197b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
198b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
199b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
200b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_addr != 0)
201b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2022ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's address differs\n", cnt);
203b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
204b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
205b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
206b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 31) & ~31))
207b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2082ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's offset differs\n", cnt);
209b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
210b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
211b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
212b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if ((cnt != 3 && shdr->sh_size != 0)
213b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  || (cnt == 3 && shdr->sh_size != 23))
214b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2152ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's size differs\n", cnt);
216b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
217b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
218b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
219b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_link != 0)
220b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2212ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's link differs\n", cnt);
222b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
223b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
224b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
225b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_info != 0)
226b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2272ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's info differs\n", cnt);
228b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
229b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
230b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
231b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if ((cnt == 1 && shdr->sh_addralign != 32)
232b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  || (cnt != 1 && shdr->sh_addralign != 1))
233b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2342ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's addralign differs\n", cnt);
235b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
236b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
237b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
238b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (shdr->sh_entsize != 0)
239b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
2402ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh	  printf ("section %zd's entsize differs\n", cnt);
241b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = 1;
242b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
243b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
244b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
245b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out_close2:
246b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  elf_end (elf);
247b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out_close:
248b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  close (fd);
249b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out:
250b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* We don't need the file anymore.  */
251b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  unlink (fname);
252b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
253a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper  ebl_closebackend (ebl);
254a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper
255b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  return result;
256b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}
257