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