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. 9361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich 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. 14de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard 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-tst2-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 = 96, 46b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper .e_ehsize = sizeof (Elf32_Ehdr), 47b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper .e_shentsize = sizeof (Elf32_Shdr), 48b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper .e_shnum = 3, 49b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper .e_shstrndx = 2 50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic const char *scnnames[3] = 54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper [0] = "", 56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper [1] = ".data", 57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper [2] = ".shstrtab" 58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperint 62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Dreppermain (void) 63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper AsmCtx_t *ctx; 65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper AsmScn_t *scn1; 66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper AsmScn_t *scn2; 67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int result = 0; 68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int fd; 69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf *elf; 70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Ehdr ehdr_mem; 71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Ehdr *ehdr; 72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t cnt; 73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper elf_version (EV_CURRENT); 75b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 76a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper Ebl *ebl = ebl_openbackend_machine (EM_386); 77a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper if (ebl == NULL) 78a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper { 79a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper puts ("cannot open backend library"); 80a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper return 1; 81a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper } 82a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper 83a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper ctx = asm_begin (fname, ebl, false); 84b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (ctx == NULL) 85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); 87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return 1; 88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Create two sections. */ 91b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper scn1 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); 92b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper scn2 = asm_newsubscn (scn1, 1); 93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (scn1 == NULL || scn2 == NULL) 94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot create section in output file: %s\n", asm_errmsg (-1)); 96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper asm_abort (ctx); 97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return 1; 98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Special alignment for the .text section. */ 101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (asm_align (scn1, 16) != 0) 102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot align .text section: %s\n", asm_errmsg (-1)); 104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Add a few strings. */ 108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (asm_addstrz (scn1, "one", 4) != 0) 109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot insert first string: %s\n", asm_errmsg (-1)); 111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 113b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (asm_addstrz (scn2, "three", 0) != 0) 114b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 115b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot insert second string: %s\n", asm_errmsg (-1)); 116b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 117b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 118b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (asm_addstrz (scn1, "two", 4) != 0) 119b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 120b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot insert third string: %s\n", asm_errmsg (-1)); 121b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 122b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 123b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Create the output file. */ 125b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (asm_end (ctx) != 0) 126b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 127b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot create output file: %s\n", asm_errmsg (-1)); 128b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper asm_abort (ctx); 129b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return 1; 130b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 131b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 132b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Check the file. */ 133b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper fd = open (fname, O_RDONLY); 134b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (fd == -1) 135b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 136b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot open generated file: %m\n"); 137b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 138b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper goto out; 139b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 140b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 141b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper elf = elf_begin (fd, ELF_C_READ, NULL); 142b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (elf == NULL) 143b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 144b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); 145b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 146b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper goto out_close; 147b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 148b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (elf_kind (elf) != ELF_K_ELF) 149b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 150b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper puts ("not a valid ELF file"); 151b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 152b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper goto out_close2; 153b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 154b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 155b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ehdr = gelf_getehdr (elf, &ehdr_mem); 156b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (ehdr == NULL) 157b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 158b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper printf ("cannot get ELF header: %s\n", elf_errmsg (-1)); 159b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 160b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper goto out_close2; 161b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 162b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 163b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0) 164b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 165b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper puts ("ELF header does not match"); 166b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 167b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper goto out_close2; 168b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 169b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 170b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper for (cnt = 1; cnt < 3; ++cnt) 171b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 172b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf_Scn *scn; 173b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Shdr shdr_mem; 174b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Shdr *shdr; 175b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 176b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper scn = elf_getscn (elf, cnt); 177b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (scn == NULL) 178b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 1792ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("cannot get section %zd: %s\n", cnt, elf_errmsg (-1)); 180b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 181b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper continue; 182b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 183b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 184b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper shdr = gelf_getshdr (scn, &shdr_mem); 185b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr == NULL) 186b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 1872ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("cannot get section header for section %zd: %s\n", 188b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper cnt, elf_errmsg (-1)); 189b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 190b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper continue; 191b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 192b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 193b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), 194b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper scnnames[cnt]) != 0) 195b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 1962ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's name differs: %s vs %s\n", cnt, 197b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), 198b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper scnnames[cnt]); 199b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 200b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 201b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 202b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr->sh_type != (cnt == 2 ? SHT_STRTAB : SHT_PROGBITS)) 203b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2042ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's type differs\n", cnt); 205b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 206b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 207b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 208b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE)) 209b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper || (cnt == 2 && shdr->sh_flags != 0)) 210b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2112ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's flags differs\n", cnt); 212b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 213b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 214b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 215b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr->sh_addr != 0) 216b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2172ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's address differs\n", cnt); 218b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 219b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 220b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 221b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if ((cnt == 1 && shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 15) & ~15)) 222b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper || (cnt == 2 223b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper && shdr->sh_offset != (((sizeof (Elf32_Ehdr) + 15) & ~15) 224b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper + strlen ("one") + 1 225b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper + strlen ("two") + 1 226b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper + strlen ("three") + 1))) 227b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2282ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's offset differs\n", cnt); 229b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 230b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 231b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 232b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if ((cnt == 1 && shdr->sh_size != (strlen ("one") + 1 233b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper + strlen ("two") + 1 234b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper + strlen ("three") + 1)) 235b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper || (cnt == 2 && shdr->sh_size != 17)) 236b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2372ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's size differs\n", cnt); 238b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 239b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 240b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 241b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr->sh_link != 0) 242b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2432ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's link differs\n", cnt); 244b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 245b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 246b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 247b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr->sh_info != 0) 248b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2492ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's info differs\n", cnt); 250b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 251b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 252b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 253b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if ((cnt == 1 && shdr->sh_addralign != 16) 254b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper || (cnt != 1 && shdr->sh_addralign != 1)) 255b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2562ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's addralign differs\n", cnt); 257b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 258b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 259b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 260b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (shdr->sh_entsize != 0) 261b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 2622ec957327cdfae6cee592a52958a9c937ea4b13cChih-Hung Hsieh printf ("section %zd's entsize differs\n", cnt); 263b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper result = 1; 264b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 265b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } 266b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 267b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out_close2: 268b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper elf_end (elf); 269b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out_close: 270b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper close (fd); 271b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper out: 272b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* We don't need the file anymore. */ 273b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unlink (fname); 274b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 275a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper ebl_closebackend (ebl); 276a38998e815ccde5d90ff0800c31da255eb3430d3Ulrich Drepper 277b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return result; 278b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 279