This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
>Clearly gas should not silently replace the section type. That sounds >like a bug. This patch attempts to address this. Built and tested on i686-pc-linux-gnu. Jan bfd/ 2004-08-27 Jan Beulich <jbeulich@novell.com> * elf.c (_bfd_elf_new_section_hook): Only set various section characteristics on new sections. gas/config/ 2004-08-27 Jan Beulich <jbeulich@novell.com> * confif/obj-elf.c (obj_elf_change_section): Only set type and attributes on new sections. Emit warning when type on re-declared section doesn't match. gas/testsuite/ 2004-08-27 Jan Beulich <jbeulich@novell.com> * section5.*: New. --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/bfd/elf.c 2004-08-19 11:03:15.000000000 +0200 +++ 2004-08-27.13.46-elf-segments/bfd/elf.c 2004-08-27 18:17:12.337508784 +0200 @@ -2224,18 +2224,18 @@ _bfd_elf_new_section_hook (bfd *abfd, as if (sdata == NULL) return FALSE; sec->used_by_bfd = sdata; - } - elf_section_type (sec) = SHT_NULL; - ssect = _bfd_elf_get_sec_type_attr (abfd, sec->name); - if (ssect != NULL) - { - elf_section_type (sec) = ssect->type; - elf_section_flags (sec) = ssect->attr; - } + elf_section_type (sec) = SHT_NULL; + ssect = _bfd_elf_get_sec_type_attr (abfd, sec->name); + if (ssect != NULL) + { + elf_section_type (sec) = ssect->type; + elf_section_flags (sec) = ssect->attr; + } - /* Indicate whether or not this section should use RELA relocations. */ - sec->use_rela_p = get_elf_backend_data (abfd)->default_use_rela_p; + /* Indicate whether or not this section should use RELA relocations. */ + sec->use_rela_p = get_elf_backend_data (abfd)->default_use_rela_p; + } return TRUE; } --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/gas/config/obj-elf.c 2004-06-16 15:22:54.000000000 +0200 +++ 2004-08-27.13.46-elf-segments/gas/config/obj-elf.c 2004-08-27 18:26:53.325185232 +0200 @@ -616,11 +616,6 @@ obj_elf_change_section (const char *name attr |= ssect->attr; } - if (type != SHT_NULL) - elf_section_type (sec) = type; - if (attr != 0) - elf_section_flags (sec) = attr; - /* Convert ELF type and flags to BFD flags. */ flags = (SEC_RELOC | ((attr & SHF_WRITE) ? 0 : SEC_READONLY) @@ -641,6 +636,9 @@ obj_elf_change_section (const char *name { symbolS *secsym; + elf_section_type (sec) = type; + elf_section_flags (sec) = attr; + /* Prevent SEC_HAS_CONTENTS from being inadvertently set. */ if (type == SHT_NOBITS) seg_info (sec)->bss = 1; @@ -657,19 +655,26 @@ obj_elf_change_section (const char *name else symbol_table_insert (section_symbol (sec)); } - else if (attr != 0) + else { - /* If section attributes are specified the second time we see a - particular section, then check that they are the same as we - saw the first time. */ - if (((old_sec->flags ^ flags) - & (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE - | SEC_EXCLUDE | SEC_SORT_ENTRIES | SEC_MERGE | SEC_STRINGS - | SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD - | SEC_THREAD_LOCAL))) - as_warn (_("ignoring changed section attributes for %s"), name); - if ((flags & SEC_MERGE) && old_sec->entsize != (unsigned) entsize) - as_warn (_("ignoring changed section entity size for %s"), name); + if (type != SHT_NULL + && (unsigned) type != elf_section_type (old_sec)) + as_warn (_("ignoring changed section type for %s"), name); + + if (attr != 0) + { + /* If section attributes are specified the second time we see a + particular section, then check that they are the same as we + saw the first time. */ + if (((old_sec->flags ^ flags) + & (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE + | SEC_EXCLUDE | SEC_SORT_ENTRIES | SEC_MERGE | SEC_STRINGS + | SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD + | SEC_THREAD_LOCAL))) + as_warn (_("ignoring changed section attributes for %s"), name); + if ((flags & SEC_MERGE) && old_sec->entsize != (unsigned) entsize) + as_warn (_("ignoring changed section entity size for %s"), name); + } } #ifdef md_elf_section_change_hook --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/gas/testsuite/gas/elf/elf.exp 2004-08-02 10:52:10.000000000 +0200 +++ 2004-08-27.13.46-elf-segments/gas/testsuite/gas/elf/elf.exp 2004-08-27 18:20:31.896171256 +0200 @@ -2,7 +2,7 @@ # elf tests # -proc run_list_test { name suffix opts readelf_pipe } { +proc run_list_test { name suffix opts readelf_opts readelf_pipe } { global READELF global srcdir subdir set testname "elf $name list" @@ -14,8 +14,8 @@ proc run_list_test { name suffix opts re verbose "output is [file_contents "dump.out"]" 2 return } - send_log "$READELF -s dump.o > dump.out\n" - catch "exec $READELF -s dump.o $readelf_pipe > dump.out\n" comp_output + send_log "$READELF $readelf_opts dump.o $readelf_pipe > dump.out\n" + catch "exec $READELF $readelf_opts dump.o $readelf_pipe > dump.out\n" comp_output if ![string match "" $comp_output] then { send_log "$comp_output\n" fail $testname @@ -56,9 +56,10 @@ if { ([istarget "*-*-elf*"] run_dump_test "group1b" run_dump_test "section0" run_dump_test "section1" - run_list_test "section2" "$target_machine" "-al" "" - run_dump_test "section3" + run_list_test "section2" "$target_machine" "-al" "-s" "" + run_dump_test "section3" run_dump_test "section4" + run_list_test "section5" "" "-al" "-S" "| grep \"\\\\.test\\\[\\\[:digit:\\\]\\\]\"" run_dump_test "symver" - run_list_test "type" "" "" "| grep \"1 \\\[FONT\\\]\"" + run_list_test "type" "" "" "-s" "| grep \"1 \\\[FONT\\\]\"" } --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/gas/testsuite/gas/elf/section5.e 1970-01-01 01:00:00.000000000 +0100 +++ 2004-08-27.13.46-elf-segments/gas/testsuite/gas/elf/section5.e 2004-08-27 17:25:29.000000000 +0200 @@ -0,0 +1,8 @@ +.* \.test0[ ]+PROGBITS[ ]+([[:xdigit:]]+[ ]+){4}[ ]+[[:digit:]]+.* +.* \.test1[ ]+PROGBITS[ ]+([[:xdigit:]]+[ ]+){4}[ ]+[[:digit:]]+.* +.* \.rel\.test1[ ]+REL[ ]+.* +.* \.test2[ ]+PROGBITS[ ]+([[:xdigit:]]+[ ]+){4}[ ]+[[:digit:]]+.* +.* \.rel\.test2[ ]+REL[ ]+.* +.* \.test3[ ]+PROGBITS[ ]+([[:xdigit:]]+[ ]+){4}WA[ ]+[[:digit:]]+.* +.* \.rel\.test3[ ]+REL[ ]+.* +.* \.test4[ ]+NOBITS[ ]+([[:xdigit:]]+[ ]+){4}WA[ ]+[[:digit:]]+.* --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/gas/testsuite/gas/elf/section5.l 1970-01-01 01:00:00.000000000 +0100 +++ 2004-08-27.13.46-elf-segments/gas/testsuite/gas/elf/section5.l 2004-08-27 18:09:29.000000000 +0200 @@ -0,0 +1,37 @@ +.*: Assembler messages: +.*:7: Warning: .* +.*:7: Warning: .* +.*:10: Warning: .* +.*:13: Warning: .* +.*:16: Warning: .* +.*:18: Warning: .* +.*:20: Warning: .* +.*:22: Warning: .* +.*:24: Warning: .* +.*GAS.* + + +[ ]+[[:digit:]]+[ ]+.section[ ]+.test0[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test1,[ ]*"",[ ]*@progbits[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test2[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test3,[ ]*"aw"[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test4,[ ]*"aw",[ ]*@nobits[ ]* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test1,[ ]*"aw",[ ]*@nobits[ ]* +[ ]+[[:digit:]]+[ ]+.* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test2,[ ]*"w"[ ]* +[ ]+[[:digit:]]+[ ]+.* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test3,[ ]*"aw",[ ]*@progbits[ ]* +[ ]+[[:digit:]]+[ ]+.* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.test4,[ ]*"aw"[ ]* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.data,[ ]*"a"[ ]* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.bss,[ ]*"a"[ ]* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.data,[ ]*"aw",[ ]*@nobits[ ]* +[ ]+[[:digit:]]+[ ]* +[ ]+[[:digit:]]+[ ]+.section[ ]+.bss,[ ]*"aw",[ ]*@progbits[ ]* --- /home/jbeulich/src/binutils/mainline/2004-08-27.13.46/gas/testsuite/gas/elf/section5.s 1970-01-01 01:00:00.000000000 +0100 +++ 2004-08-27.13.46-elf-segments/gas/testsuite/gas/elf/section5.s 2004-08-27 18:06:16.000000000 +0200 @@ -0,0 +1,24 @@ +.section .test0 +.section .test1, "", @progbits +.section .test2 +.section .test3, "aw" +.section .test4, "aw", @nobits + +.section .test1, "aw", @nobits +test1: .long test1 + +.section .test2, "w" +test2: .long test2 + +.section .test3, "aw", @progbits +test3: .long test3 + +.section .test4, "aw" + +.section .data, "a" + +.section .bss, "a" + +.section .data, "aw", @nobits + +.section .bss, "aw", @progbits
Attachment:
binutils-mainline-elf-section.patch
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |