@@ -1,3 +1,26 @@
+2022-05-21 Guillermo E. Martinez <guillermo.e.martinez@oracle.com>
+
+ * libebl/eblsectionstripp.c (ebl_section_strip_p): Use
+ remove_ctf argument.
+ (SECTION_STRIP_P): Likewise.
+ * libebl/libebl.h (ebl_section_strip_p): Likewise.
+ * libelf/elf-knowledge.h (SECTION_STRIP_P): Update macro
+ definition to use remove_ctf to determine whether .ctf
+ section is stripped out.
+ * libelf/elf32_checksum.c (elfw2): Use false value for
+ remove_ctf parameter.
+ * src/elfcmp.c (main): Likewise.
+ * src/strip.c (options): Add --remove-ctf option set by
+ remove_ctf variable.
+ (set_remove_special_section_opt): Add new function.
+ (erratic_special_section_opt): Likewise.
+ (parse_opt): Parse new --remove-ctf option.
+ (handle_elf): Adjust .comment and use remove_ctf argument.
+ * tests/Makefile.am (TEST): Add run-strip-remove-keep-ctf.sh
+ and testfile-ctf.bz2.
+ * tests/run-strip-remove-keep-ctf.sh: Add new testcase.
+ * tests/testfile-ctf.bz2: Add new test harness.
+
2022-05-02 Mark Wielaard <mark@klomp.org>
* Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Remove
@@ -37,7 +37,7 @@
bool
ebl_section_strip_p (Ebl *ebl, const GElf_Shdr *shdr,
const char *name, bool remove_comment,
- bool only_remove_debug)
+ bool only_remove_debug, bool remove_ctf)
{
/* If only debug information should be removed check the name. There
is unfortunately no other way. */
@@ -66,5 +66,5 @@ ebl_section_strip_p (Ebl *ebl, const GElf_Shdr *shdr,
return false;
}
- return SECTION_STRIP_P (shdr, name, remove_comment);
+ return SECTION_STRIP_P (shdr, name, remove_comment, remove_ctf);
}
@@ -205,7 +205,7 @@ extern bool ebl_relative_reloc_p (Ebl *ebl, int reloc);
/* Check whether section should be stripped. */
extern bool ebl_section_strip_p (Ebl *ebl,
const GElf_Shdr *shdr, const char *name,
- bool remove_comment, bool only_remove_debug);
+ bool remove_comment, bool only_remove_debug, bool remove_ctf);
/* Check if backend uses a bss PLT in this file. */
extern bool ebl_bss_plt_p (Ebl *ebl);
@@ -34,7 +34,7 @@
/* Test whether a section can be stripped or not. */
-#define SECTION_STRIP_P(shdr, name, remove_comment) \
+#define SECTION_STRIP_P(shdr, name, remove_comment, remove_ctf) \
/* Sections which are allocated are not removed. */ \
(((shdr)->sh_flags & SHF_ALLOC) == 0 \
/* We never remove .note sections. */ \
@@ -45,7 +45,10 @@
&& strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0\
/* We remove .comment sections only if explicitly told to do so. */\
&& (remove_comment \
- || strcmp (name, ".comment") != 0))))
+ || strcmp (name, ".comment") != 0) \
+ /* We remove .ctf sections only if explicitly told to do so. */\
+ && (remove_ctf \
+ || strcmp (name, ".ctf") != 0))))
/* Test whether `sh_info' field in section header contains a section
@@ -105,7 +105,7 @@ elfw2(LIBELFBITS,checksum) (Elf *elf)
if (SECTION_STRIP_P (shdr,
INTUSE(elf_strptr) (elf, shstrndx, shdr->sh_name),
- true))
+ true, false))
/* The section can be stripped. Don't use it. */
continue;
@@ -270,7 +270,7 @@ main (int argc, char *argv[])
sname1 = elf_strptr (elf1, shstrndx1, shdr1->sh_name);
}
while (scn1 != NULL && shdr1 != NULL
- && ebl_section_strip_p (ebl1, shdr1, sname1, true, false));
+ && ebl_section_strip_p (ebl1, shdr1, sname1, true, false, false));
GElf_Shdr shdr2_mem;
GElf_Shdr *shdr2;
@@ -283,7 +283,7 @@ main (int argc, char *argv[])
sname2 = elf_strptr (elf2, shstrndx2, shdr2->sh_name);
}
while (scn2 != NULL && shdr2 != NULL
- && ebl_section_strip_p (ebl2, shdr2, sname2, true, false));
+ && ebl_section_strip_p (ebl2, shdr2, sname2, true, false, false));
if (scn1 == NULL || scn2 == NULL || shdr1 == NULL || shdr2 == NULL)
break;
@@ -62,6 +62,7 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
#define OPT_RELOC_DEBUG 0x103
#define OPT_KEEP_SECTION 0x104
#define OPT_RELOC_DEBUG_ONLY 0x105
+#define OPT_REMOVE_CTF 0x106
/* Definitions of arguments for argp functions. */
@@ -87,6 +88,8 @@ static const struct argp_option options[] =
N_("Similar to --reloc-debug-sections, but resolve all trivial relocations between debug sections in place. No other stripping is performed (operation is not reversible, incompatible with -f, -g, --remove-comment and --remove-section)"), 0 },
{ "remove-comment", OPT_REMOVE_COMMENT, NULL, 0,
N_("Remove .comment section"), 0 },
+ { "remove-ctf", OPT_REMOVE_CTF, NULL, 0,
+ N_("Remove .ctf section"), 0 },
{ "remove-section", 'R', "SECTION", 0, N_("Remove the named section. SECTION is an extended wildcard pattern. May be given more than once. Only non-allocated sections can be removed."), 0 },
{ "keep-section", OPT_KEEP_SECTION, "SECTION", 0, N_("Keep the named section. SECTION is an extended wildcard pattern. May be given more than once."), 0 },
{ "permissive", OPT_PERMISSIVE, NULL, 0,
@@ -150,6 +153,9 @@ static bool preserve_dates;
/* If true .comment sections will be removed. */
static bool remove_comment;
+/* If true .ctf sections will be removed. */
+static bool remove_ctf;
+
/* If true remove all debug sections. */
static bool remove_debug;
@@ -217,6 +223,48 @@ section_name_matches (struct section_pattern *patterns, const char *name)
return false;
}
+static void
+set_remove_special_section_opt (const char *arg)
+{
+ if (fnmatch (arg, ".comment", FNM_EXTMATCH) == 0)
+ remove_comment = true;
+ else if (fnmatch (arg, ".ctf", FNM_EXTMATCH) == 0)
+ remove_ctf = true;
+}
+
+static error_t
+erratic_special_section_opt (struct argp_state *state)
+{
+ int s;
+ struct {
+ const char *name;
+ bool remove;
+ } special_secs[] = {
+ {
+ .name = ".comment",
+ .remove = remove_comment
+ },
+ {
+ .name = ".ctf",
+ .remove = remove_ctf
+ },
+ {
+ .name = NULL,
+ }
+ };
+
+ for (s = 0; special_secs[s].name; ++s)
+ if (special_secs[s].remove == true
+ && section_name_matches (keep_secs, special_secs[s].name))
+ {
+ argp_error (state,
+ _("cannot both keep and remove %s section"),
+ special_secs[s].name);
+ return EINVAL;
+ }
+
+ return 0;
+}
int
main (int argc, char *argv[])
@@ -325,9 +373,12 @@ parse_opt (int key, char *arg, struct argp_state *state)
remove_comment = true;
break;
+ case OPT_REMOVE_CTF:
+ remove_ctf = true;
+ break;
+
case 'R':
- if (fnmatch (arg, ".comment", FNM_EXTMATCH) == 0)
- remove_comment = true;
+ set_remove_special_section_opt (arg);
add_pattern (&remove_secs, arg);
break;
@@ -353,13 +404,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
break;
case ARGP_KEY_SUCCESS:
- if (remove_comment == true
- && section_name_matches (keep_secs, ".comment"))
- {
- argp_error (state,
- _("cannot both keep and remove .comment section"));
- return EINVAL;
- }
+ if (erratic_special_section_opt (state))
+ return EINVAL;
break;
default:
@@ -1358,7 +1404,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
all sections which are not used at runtime are stripped out. But
there are a few exceptions:
- - special sections named ".comment" and ".note" are kept
+ - special sections named ".comment", ".note" and ".ctf" are kept
- OS or architecture specific sections are kept since we might not
know how to handle them
- if a section is referred to from a section which is not removed
@@ -1371,7 +1417,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (remove_shdrs ? !(shdr_info[cnt].shdr.sh_flags & SHF_ALLOC)
: (ebl_section_strip_p (ebl, &shdr_info[cnt].shdr,
shdr_info[cnt].name, remove_comment,
- remove_debug)
+ remove_debug, remove_ctf)
|| cnt == shstrndx
|| section_name_matches (remove_secs, shdr_info[cnt].name)))
{
@@ -1534,7 +1580,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
&shdr_info[scnidx].shdr,
shdr_info[scnidx].name,
remove_comment,
- remove_debug)
+ remove_debug,
+ remove_ctf)
&& ebl_data_marker_symbol (ebl, sym,
elf_strptr (elf,
shdr_info[cnt].shdr.sh_link,
@@ -197,7 +197,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
msg_tst system-elf-libelf-test \
$(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \
run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
- run-readelf-dw-form-indirect.sh run-strip-largealign.sh
+ run-readelf-dw-form-indirect.sh run-strip-largealign.sh \
+ run-strip-remove-keep-ctf.sh
if !BIARCH
export ELFUTILS_DISABLE_BIARCH = 1
@@ -580,7 +581,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \
run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
testfile_nvidia_linemap.bz2 \
- testfile-largealign.o.bz2 run-strip-largealign.sh
+ testfile-largealign.o.bz2 run-strip-largealign.sh \
+ testfile-ctf.bz2 run-strip-remove-keep-ctf.sh
if USE_VALGRIND
new file mode 100755
@@ -0,0 +1,212 @@
+#! /bin/sh
+# Copyright (C) 2022 Oracle, Inc.
+# This file is part of elfutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# elfutils is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. $srcdir/test-subr.sh
+
+# - testfile-ctf.c
+# int
+# main ()
+# {
+# return 0;
+# }
+#
+# gcc -gctf -g -o testfile-ctf testfile-ctf.c
+# eu-strip testfile-ctf
+
+# strip -o output and -f debug files
+tempfiles testfile.elf testfile.debug
+
+# A random 32bit testfile
+testfiles testfile-ctf
+
+# strip should keep .ctf section
+echo strip testfile-ctf
+testrun ${abs_top_builddir}/src/strip -o testfile.elf -f testfile.debug testfile-ctf
+echo elflint testfile.elf
+testrun ${abs_top_builddir}/src/elflint --gnu testfile.elf
+echo elflint testfile.debug
+testrun ${abs_top_builddir}/src/elflint --gnu -d testfile.debug
+echo readelf testfile.elf
+testrun_compare ${abs_top_builddir}/src/readelf -S testfile.elf <<\EOF
+There are 28 section headers, starting at offset 0x31d8:
+
+Section Headers:
+[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
+[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0
+[ 1] .interp PROGBITS 0000000000400318 00000318 0000001c 0 A 0 0 1
+[ 2] .note.gnu.property NOTE 0000000000400338 00000338 00000020 0 A 0 0 8
+[ 3] .note.ABI-tag NOTE 0000000000400358 00000358 00000020 0 A 0 0 4
+[ 4] .hash HASH 0000000000400378 00000378 00000018 4 A 6 0 8
+[ 5] .gnu.hash GNU_HASH 0000000000400390 00000390 0000001c 0 A 6 0 8
+[ 6] .dynsym DYNSYM 00000000004003b0 000003b0 00000048 24 A 7 1 8
+[ 7] .dynstr STRTAB 00000000004003f8 000003f8 00000038 0 A 0 0 1
+[ 8] .gnu.version GNU_versym 0000000000400430 00000430 00000006 2 A 6 0 2
+[ 9] .gnu.version_r GNU_verneed 0000000000400438 00000438 00000020 0 A 7 1 8
+[10] .rela.dyn RELA 0000000000400458 00000458 00000030 24 A 6 0 8
+[11] .init PROGBITS 0000000000401000 00001000 00000017 0 AX 0 0 4
+[12] .text PROGBITS 0000000000401020 00001020 00000191 0 AX 0 0 16
+[13] .fini PROGBITS 00000000004011b4 000011b4 00000009 0 AX 0 0 4
+[14] .rodata PROGBITS 0000000000402000 00002000 00000004 4 AM 0 0 4
+[15] .eh_frame_hdr PROGBITS 0000000000402004 00002004 00000034 0 A 0 0 4
+[16] .eh_frame PROGBITS 0000000000402038 00002038 000000d8 0 A 0 0 8
+[17] .init_array INIT_ARRAY 0000000000403e40 00002e40 00000008 8 WA 0 0 8
+[18] .fini_array FINI_ARRAY 0000000000403e48 00002e48 00000008 8 WA 0 0 8
+[19] .dynamic DYNAMIC 0000000000403e50 00002e50 000001a0 16 WA 7 0 8
+[20] .got PROGBITS 0000000000403ff0 00002ff0 00000010 8 WA 0 0 8
+[21] .got.plt PROGBITS 0000000000404000 00003000 00000018 8 WA 0 0 8
+[22] .data PROGBITS 0000000000404018 00003018 00000010 0 WA 0 0 8
+[23] .bss NOBITS 0000000000404028 00003028 00000008 0 WA 0 0 1
+[24] .comment PROGBITS 0000000000000000 00003028 0000002a 1 MS 0 0 1
+[25] .ctf PROGBITS 0000000000000000 00003052 00000071 0 0 0 1
+[26] .gnu_debuglink PROGBITS 0000000000000000 000030c4 00000014 0 0 0 4
+[27] .shstrtab STRTAB 0000000000000000 000030d8 000000fd 0 0 0 1
+
+EOF
+echo readelf testfile.debug
+testrun_compare ${abs_top_builddir}/src/readelf -S testfile.debug <<\EOF
+There are 35 section headers, starting at offset 0xb80:
+
+Section Headers:
+[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
+[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0
+[ 1] .interp NOBITS 0000000000400318 00000318 0000001c 0 A 0 0 1
+[ 2] .note.gnu.property NOTE 0000000000400338 00000318 00000020 0 A 0 0 8
+[ 3] .note.ABI-tag NOTE 0000000000400358 00000338 00000020 0 A 0 0 4
+[ 4] .hash NOBITS 0000000000400378 00000358 00000018 4 A 6 0 8
+[ 5] .gnu.hash NOBITS 0000000000400390 00000358 0000001c 0 A 6 0 8
+[ 6] .dynsym NOBITS 00000000004003b0 00000358 00000048 24 A 7 1 8
+[ 7] .dynstr NOBITS 00000000004003f8 00000358 00000038 0 A 0 0 1
+[ 8] .gnu.version NOBITS 0000000000400430 00000358 00000006 2 A 6 0 2
+[ 9] .gnu.version_r NOBITS 0000000000400438 00000358 00000020 0 A 7 1 8
+[10] .rela.dyn NOBITS 0000000000400458 00000358 00000030 24 A 6 0 8
+[11] .init NOBITS 0000000000401000 00000358 00000017 0 AX 0 0 4
+[12] .text NOBITS 0000000000401020 00000360 00000191 0 AX 0 0 16
+[13] .fini NOBITS 00000000004011b4 00000360 00000009 0 AX 0 0 4
+[14] .rodata NOBITS 0000000000402000 00000360 00000004 4 AM 0 0 4
+[15] .eh_frame_hdr NOBITS 0000000000402004 00000360 00000034 0 A 0 0 4
+[16] .eh_frame NOBITS 0000000000402038 00000360 000000d8 0 A 0 0 8
+[17] .init_array NOBITS 0000000000403e40 00000360 00000008 8 WA 0 0 8
+[18] .fini_array NOBITS 0000000000403e48 00000360 00000008 8 WA 0 0 8
+[19] .dynamic NOBITS 0000000000403e50 00000360 000001a0 16 WA 7 0 8
+[20] .got NOBITS 0000000000403ff0 00000360 00000010 8 WA 0 0 8
+[21] .got.plt NOBITS 0000000000404000 00000360 00000018 8 WA 0 0 8
+[22] .data NOBITS 0000000000404018 00000360 00000010 0 WA 0 0 8
+[23] .bss NOBITS 0000000000404028 00000360 00000008 0 WA 0 0 1
+[24] .comment NOBITS 0000000000000000 00000360 0000002a 1 MS 0 0 1
+[25] .ctf NOBITS 0000000000000000 00000360 00000071 0 0 0 1
+[26] .debug_aranges PROGBITS 0000000000000000 00000360 00000030 0 0 0 1
+[27] .debug_info PROGBITS 0000000000000000 00000390 00000054 0 0 0 1
+[28] .debug_abbrev PROGBITS 0000000000000000 000003e4 00000038 0 0 0 1
+[29] .debug_line PROGBITS 0000000000000000 0000041c 0000004f 0 0 0 1
+[30] .debug_str PROGBITS 0000000000000000 0000046b 0000005f 1 MS 0 0 1
+[31] .debug_line_str PROGBITS 0000000000000000 000004ca 0000001c 1 MS 0 0 1
+[32] .symtab SYMTAB 0000000000000000 000004e8 00000378 24 33 20 8
+[33] .strtab STRTAB 0000000000000000 00000860 000001cb 0 0 0 1
+[34] .shstrtab STRTAB 0000000000000000 00000a2b 0000014e 0 0 0 1
+
+EOF
+
+# gcc -gctf -g -o testfile-ctf testfile-ctf.c
+# eu-strip --remove-ctf testfile-ctf
+
+# Explicitly removes .ctf section
+echo strip --remove-ctf testfile-ctf
+testrun ${abs_top_builddir}/src/strip --remove-ctf -o testfile.elf -f testfile.debug testfile-ctf
+echo elflint testfile.elf
+testrun ${abs_top_builddir}/src/elflint --gnu testfile.elf
+echo elflint testfile.debug
+testrun ${abs_top_builddir}/src/elflint --gnu -d testfile.debug
+echo readelf testfile.elf
+testrun_compare ${abs_top_builddir}/src/readelf -S testfile.elf <<\EOF
+There are 27 section headers, starting at offset 0x3160:
+
+Section Headers:
+[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
+[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0
+[ 1] .interp PROGBITS 0000000000400318 00000318 0000001c 0 A 0 0 1
+[ 2] .note.gnu.property NOTE 0000000000400338 00000338 00000020 0 A 0 0 8
+[ 3] .note.ABI-tag NOTE 0000000000400358 00000358 00000020 0 A 0 0 4
+[ 4] .hash HASH 0000000000400378 00000378 00000018 4 A 6 0 8
+[ 5] .gnu.hash GNU_HASH 0000000000400390 00000390 0000001c 0 A 6 0 8
+[ 6] .dynsym DYNSYM 00000000004003b0 000003b0 00000048 24 A 7 1 8
+[ 7] .dynstr STRTAB 00000000004003f8 000003f8 00000038 0 A 0 0 1
+[ 8] .gnu.version GNU_versym 0000000000400430 00000430 00000006 2 A 6 0 2
+[ 9] .gnu.version_r GNU_verneed 0000000000400438 00000438 00000020 0 A 7 1 8
+[10] .rela.dyn RELA 0000000000400458 00000458 00000030 24 A 6 0 8
+[11] .init PROGBITS 0000000000401000 00001000 00000017 0 AX 0 0 4
+[12] .text PROGBITS 0000000000401020 00001020 00000191 0 AX 0 0 16
+[13] .fini PROGBITS 00000000004011b4 000011b4 00000009 0 AX 0 0 4
+[14] .rodata PROGBITS 0000000000402000 00002000 00000004 4 AM 0 0 4
+[15] .eh_frame_hdr PROGBITS 0000000000402004 00002004 00000034 0 A 0 0 4
+[16] .eh_frame PROGBITS 0000000000402038 00002038 000000d8 0 A 0 0 8
+[17] .init_array INIT_ARRAY 0000000000403e40 00002e40 00000008 8 WA 0 0 8
+[18] .fini_array FINI_ARRAY 0000000000403e48 00002e48 00000008 8 WA 0 0 8
+[19] .dynamic DYNAMIC 0000000000403e50 00002e50 000001a0 16 WA 7 0 8
+[20] .got PROGBITS 0000000000403ff0 00002ff0 00000010 8 WA 0 0 8
+[21] .got.plt PROGBITS 0000000000404000 00003000 00000018 8 WA 0 0 8
+[22] .data PROGBITS 0000000000404018 00003018 00000010 0 WA 0 0 8
+[23] .bss NOBITS 0000000000404028 00003028 00000008 0 WA 0 0 1
+[24] .comment PROGBITS 0000000000000000 00003028 0000002a 1 MS 0 0 1
+[25] .gnu_debuglink PROGBITS 0000000000000000 00003054 00000014 0 0 0 4
+[26] .shstrtab STRTAB 0000000000000000 00003068 000000f8 0 0 0 1
+
+EOF
+echo readelf testfile.debug
+testrun_compare ${abs_top_builddir}/src/readelf -S testfile.debug <<\EOF
+There are 35 section headers, starting at offset 0xbf0:
+
+Section Headers:
+[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
+[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0
+[ 1] .interp NOBITS 0000000000400318 00000318 0000001c 0 A 0 0 1
+[ 2] .note.gnu.property NOTE 0000000000400338 00000318 00000020 0 A 0 0 8
+[ 3] .note.ABI-tag NOTE 0000000000400358 00000338 00000020 0 A 0 0 4
+[ 4] .hash NOBITS 0000000000400378 00000358 00000018 4 A 6 0 8
+[ 5] .gnu.hash NOBITS 0000000000400390 00000358 0000001c 0 A 6 0 8
+[ 6] .dynsym NOBITS 00000000004003b0 00000358 00000048 24 A 7 1 8
+[ 7] .dynstr NOBITS 00000000004003f8 00000358 00000038 0 A 0 0 1
+[ 8] .gnu.version NOBITS 0000000000400430 00000358 00000006 2 A 6 0 2
+[ 9] .gnu.version_r NOBITS 0000000000400438 00000358 00000020 0 A 7 1 8
+[10] .rela.dyn NOBITS 0000000000400458 00000358 00000030 24 A 6 0 8
+[11] .init NOBITS 0000000000401000 00000358 00000017 0 AX 0 0 4
+[12] .text NOBITS 0000000000401020 00000360 00000191 0 AX 0 0 16
+[13] .fini NOBITS 00000000004011b4 00000360 00000009 0 AX 0 0 4
+[14] .rodata NOBITS 0000000000402000 00000360 00000004 4 AM 0 0 4
+[15] .eh_frame_hdr NOBITS 0000000000402004 00000360 00000034 0 A 0 0 4
+[16] .eh_frame NOBITS 0000000000402038 00000360 000000d8 0 A 0 0 8
+[17] .init_array NOBITS 0000000000403e40 00000360 00000008 8 WA 0 0 8
+[18] .fini_array NOBITS 0000000000403e48 00000360 00000008 8 WA 0 0 8
+[19] .dynamic NOBITS 0000000000403e50 00000360 000001a0 16 WA 7 0 8
+[20] .got NOBITS 0000000000403ff0 00000360 00000010 8 WA 0 0 8
+[21] .got.plt NOBITS 0000000000404000 00000360 00000018 8 WA 0 0 8
+[22] .data NOBITS 0000000000404018 00000360 00000010 0 WA 0 0 8
+[23] .bss NOBITS 0000000000404028 00000360 00000008 0 WA 0 0 1
+[24] .comment NOBITS 0000000000000000 00000360 0000002a 1 MS 0 0 1
+[25] .ctf PROGBITS 0000000000000000 00000360 00000071 0 0 0 1
+[26] .debug_aranges PROGBITS 0000000000000000 000003d1 00000030 0 0 0 1
+[27] .debug_info PROGBITS 0000000000000000 00000401 00000054 0 0 0 1
+[28] .debug_abbrev PROGBITS 0000000000000000 00000455 00000038 0 0 0 1
+[29] .debug_line PROGBITS 0000000000000000 0000048d 0000004f 0 0 0 1
+[30] .debug_str PROGBITS 0000000000000000 000004dc 0000005f 1 MS 0 0 1
+[31] .debug_line_str PROGBITS 0000000000000000 0000053b 0000001c 1 MS 0 0 1
+[32] .symtab SYMTAB 0000000000000000 00000558 00000378 24 33 20 8
+[33] .strtab STRTAB 0000000000000000 000008d0 000001cb 0 0 0 1
+[34] .shstrtab STRTAB 0000000000000000 00000a9b 0000014e 0 0 0 1
+
+EOF
+
+exit 0
new file mode 100755