unsigned int
_bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out,
- const asection *section ATTRIBUTE_UNUSED)
+ const asection *section)
{
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
SCNHDR *scnhdr_ext = (SCNHDR *) out;
sections (.idata, .data, .bss, .CRT) must have IMAGE_SCN_MEM_WRITE set
(this is especially important when dealing with the .idata section since
the addresses for routines from .dlls must be overwritten). If .reloc
- section data is ever generated, we must add IMAGE_SCN_MEM_DISCARDABLE
- (0x02000000). Also, the resource data should also be read and
- writable. */
+ section data is ever generated, we generally need to add
+ IMAGE_SCN_MEM_DISCARDABLE (0x02000000). */
/* FIXME: Alignment is also encoded in this field, at least on
ARM-WINCE. Although - how do we get the original alignment field
p++)
if (memcmp (scnhdr_int->s_name, p->section_name, SCNNMLEN) == 0)
{
+ unsigned long must_have = p->must_have;
+
if (memcmp (scnhdr_int->s_name, ".text", sizeof ".text")
|| (bfd_get_file_flags (abfd) & WP_TEXT))
scnhdr_int->s_flags &= ~IMAGE_SCN_MEM_WRITE;
- scnhdr_int->s_flags |= p->must_have;
+ /* Avoid forcing in the discardable flag if the section itself is
+ allocated. */
+ if (section->flags & SEC_ALLOC)
+ must_have &= ~IMAGE_SCN_MEM_DISCARDABLE;
+ scnhdr_int->s_flags |= must_have;
break;
}
run_dump_test "set"
+run_dump_test "reloc"
+
if { [istarget "aarch64-*-*"] || [istarget "arm*-*-*"] || [istarget "i*86-*-*"]
|| [istarget "x86_64-*-*"] } then {
run_dump_test "cv_comp"
--- /dev/null
+#as: --no-pad-sections
+#objdump: -wPsections
+#name: .reloc section attributes
+
+.*: .*
+
+Section headers.*:
+ # Name *paddr *vaddr *size .* Flags
+ 1 \.text *0*0000 0*0000 0*0(4|10) .* Align: (4|16) EXECUTE,READ,CODE
+ 2 \.data *0*0000 0*0000 0*0(8|10) .* Align: (4|16) READ,WRITE,INITIALIZED DATA
+ 3 \.bss .*
+ 4 \.rdata *0*0000 0*0000 0*0(8|10) .* Align: (4|16) READ,INITIALIZED DATA
+ 5 \.reloc *0*0000 0*0000 0*00c .* Align: 4 READ,INITIALIZED DATA
--- /dev/null
+ .text
+ .global _start
+_start:
+ .nop
+
+ .section .rdata, "r"
+ .dc.a _start
+ .dc.a .
+
+ .data
+.L1: .rva _start
+.L2: .rva .
+
+ .section .reloc, "r"
+ .p2align 2
+ .rva .data
+ .long 2 * 4 + 2 * 2
+ .short .L1 - .data + (3 << 12)
+ .short .L2 - .data + (3 << 12)
run_dump_test "orphan_nu"
run_dump_test "reloc"
+run_dump_test "reloc2a"
+run_dump_test "reloc2b"
+run_dump_test "reloc2c"
run_dump_test "weakdef-1"
--- /dev/null
+ .text
+ .global _start
+_start:
+ .nop
+
+ .section .rdata, "r"
+ .dc.a _start
+ .dc.a .
+
+ .data
+.L1: .rva _start
+.L2: .rva .
+
+ .section .reloc, "r"
+ .p2align 2
+ .rva .data
+ .long 2 * 4 + 2 * 2
+ .short .L1 - .data + (3 << 12)
+ .short .L2 - .data + (3 << 12)
--- /dev/null
+#source: reloc2.s
+#as: --no-pad-sections
+#name: PE .reloc section attributes (builtin+custom)
+#ld: --enable-reloc-section --section-align=0x1000 -e _start
+#objdump: -hpwPsections
+
+.*: file format .*
+
+#...
+PE File Base Relocations.*
+Virtual Address: .* Number of fixups 2
+[ ]*reloc 0 offset 0 .* HIGHLOW
+[ ]*reloc 1 offset [48] .* HIGHLOW
+
+Virtual Address: .* Number of fixups 2
+[ ]*reloc 0 offset 0 .* (HIGHLOW|DIR64)
+[ ]*reloc 1 offset [48] .* (HIGHLOW|DIR64)
+
+#?private flags = .*
+
+Section headers.*:
+ # Name *paddr *vaddr *size .* Flags
+ 1 \.text *0000.* 0.*000 0*200 .* EXECUTE,READ,CODE
+ 2 \.data *0000.* 0.*000 0*200 .* READ,WRITE,INITIALIZED DATA
+ 3 \.rdata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 4 \.idata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 5 \.reloc *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+
+Sections:
+Idx Name *Size *VMA *LMA *File off .* Flags
+ 0 \.text *0*(1?4|8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data *0*(8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rdata *0*0000.. .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 \.idata *0*1(4|8) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 4 \.reloc *0*000018 .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
--- /dev/null
+#source: reloc2.s RUN_OBJCOPY
+#as: --no-pad-sections
+#name: PE .reloc section attributes (builtin only)
+#objcopy_objects: --rename-section .reloc=.rdata$1
+#ld: --enable-reloc-section --section-align=0x1000 -e _start
+#objdump: -hpwPsections
+
+.*: file format .*
+
+#...
+PE File Base Relocations.*
+Virtual Address: .* Number of fixups 2
+[ ]*reloc 0 offset 0 .* (HIGHLOW|DIR64)
+[ ]*reloc 1 offset [48] .* (HIGHLOW|DIR64)
+
+#?private flags = .*
+
+Section headers.*:
+ # Name *paddr *vaddr *size .* Flags
+ 1 \.text *0000.* 0.*000 0*200 .* EXECUTE,READ,CODE
+ 2 \.data *0000.* 0.*000 0*200 .* READ,WRITE,INITIALIZED DATA
+ 3 \.rdata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 4 \.idata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 5 \.reloc *0000.* 0.*000 0*200 .* DISCARDABLE,READ,INITIALIZED DATA
+
+Sections:
+Idx Name *Size *VMA *LMA *File off .* Flags
+ 0 \.text *0*(1?4|8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data *0*(8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rdata *0*0000.. .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 \.idata *0*1(4|8) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 4 \.reloc *0*00000c .*000 .*000 0*0000... .* CONTENTS, LOAD, READONLY, DATA
--- /dev/null
+#source: reloc2.s
+#as: --no-pad-sections
+#name: PE .reloc section attributes (custom only)
+#ld: --disable-reloc-section --section-align=0x1000 -e _start
+#objdump: -hpwPsections
+
+.*: file format .*
+
+#...
+PE File Base Relocations.*
+Virtual Address: .* Number of fixups 2
+[ ]*reloc 0 offset 0 .* HIGHLOW
+[ ]*reloc 1 offset [48] .* HIGHLOW
+
+#?private flags = .*
+
+Section headers.*:
+ # Name *paddr *vaddr *size .* Flags
+ 1 \.text *0000.* 0.*000 0*200 .* EXECUTE,READ,CODE
+ 2 \.data *0000.* 0.*000 0*200 .* READ,WRITE,INITIALIZED DATA
+ 3 \.rdata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 4 \.idata *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+ 5 \.reloc *0000.* 0.*000 0*200 .* READ,INITIALIZED DATA
+
+Sections:
+Idx Name *Size *VMA *LMA *File off .* Flags
+ 0 \.text *0*(1?4|8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 \.data *0*(8|10) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, DATA
+ 2 \.rdata *0*0000.. .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 \.idata *0*1(4|8) .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 4 \.reloc *0*00000c .*000 .*000 0*0000... .* CONTENTS, ALLOC, LOAD, READONLY, DATA