View | Details | Raw Unified | Return to bug 14397 | Differences between
and this patch

Collapse All | Expand All

(-)a/bfd/elf32-arm.c (-1 / +10 lines)
Lines 14083-14089 elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info Link Here
14083
	      name = RELOC_SECTION (htab, ".plt");
14083
	      name = RELOC_SECTION (htab, ".plt");
14084
	    get_vma:
14084
	    get_vma:
14085
	      s = bfd_get_section_by_name (output_bfd, name);
14085
	      s = bfd_get_section_by_name (output_bfd, name);
14086
	      BFD_ASSERT (s != NULL);
14086
	      if (s == NULL)
14087
		{
14088
		  /* PR ld/14397: Issue an error message if a required section
14089
		     is missing.  */
14090
		  (*_bfd_error_handler)
14091
		    (_("error: required section '%s' not found in the linker "
14092
		       "script"), name);
14093
		  bfd_set_error (bfd_error_invalid_operation);
14094
		  return FALSE;
14095
		}
14087
	      if (!htab->symbian_p)
14096
	      if (!htab->symbian_p)
14088
		dyn.d_un.d_ptr = s->vma;
14097
		dyn.d_un.d_ptr = s->vma;
14089
	      else
14098
	      else
(-)a/ld/testsuite/ld-arm/arm-elf.exp (+6 lines)
Lines 283-288 set armelftests_nonacl { Link Here
283
    {"Simple dynamic application" "tmpdir/arm-lib.so" "" {arm-app.s}
283
    {"Simple dynamic application" "tmpdir/arm-lib.so" "" {arm-app.s}
284
     {{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
284
     {{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
285
     "arm-app"}
285
     "arm-app"}
286
    {"Simple static application without .rel.plt in linker script" "-T arm-no-rel-plt.ld" "" {arm-static-app.s}
287
     {{objdump -fdw arm-static-app.d} {objdump -rw arm-static-app.r}}
288
     "arm-static-app"}
289
    {"Simple dynamic application without .rel.plt in linker script" "tmpdir/arm-lib.so -T arm-no-rel-plt.ld" "" {arm-app.s}
290
     {{ld arm-no-rel-plt.out}}
291
     "arm-app"}
286
    {"Non-pcrel function reference" "tmpdir/arm-lib.so" "" {arm-app-abs32.s}
292
    {"Non-pcrel function reference" "tmpdir/arm-lib.so" "" {arm-app-abs32.s}
287
     {{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
293
     {{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
288
     "arm-app-abs32"}
294
     "arm-app-abs32"}
(-)a/ld/testsuite/ld-arm/arm-no-rel-plt.ld (+233 lines)
Line 0 Link Here
1
/* Script for -z combreloc: combine and sort reloc sections */
2
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
3
	      "elf32-littlearm")
4
OUTPUT_ARCH(arm)
5
ENTRY(_start)
6
SEARCH_DIR("/home/meadori/Code/install/arm-none-eabi/lib");
7
SECTIONS
8
{
9
  /* Read-only sections, merged into text segment: */
10
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
11
  .interp         : { *(.interp) }
12
  .note.gnu.build-id : { *(.note.gnu.build-id) }
13
  .hash           : { *(.hash) }
14
  .gnu.hash       : { *(.gnu.hash) }
15
  .dynsym         : { *(.dynsym) }
16
  .dynstr         : { *(.dynstr) }
17
  .gnu.version    : { *(.gnu.version) }
18
  .gnu.version_d  : { *(.gnu.version_d) }
19
  .gnu.version_r  : { *(.gnu.version_r) }
20
  .rel.dyn        :
21
    {
22
      *(.rel.init)
23
      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
24
      *(.rel.fini)
25
      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
26
      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
27
      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
28
      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
29
      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
30
      *(.rel.ctors)
31
      *(.rel.dtors)
32
      *(.rel.got)
33
      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
34
      PROVIDE_HIDDEN (__rel_iplt_start = .);
35
      *(.rel.iplt)
36
      PROVIDE_HIDDEN (__rel_iplt_end = .);
37
      PROVIDE_HIDDEN (__rela_iplt_start = .);
38
      PROVIDE_HIDDEN (__rela_iplt_end = .);
39
    }
40
  .rela.dyn       :
41
    {
42
      *(.rela.init)
43
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
44
      *(.rela.fini)
45
      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
46
      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
47
      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
48
      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
49
      *(.rela.ctors)
50
      *(.rela.dtors)
51
      *(.rela.got)
52
      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
53
      PROVIDE_HIDDEN (__rel_iplt_start = .);
54
      PROVIDE_HIDDEN (__rel_iplt_end = .);
55
      PROVIDE_HIDDEN (__rela_iplt_start = .);
56
      *(.rela.iplt)
57
      PROVIDE_HIDDEN (__rela_iplt_end = .);
58
    }
59
  .init           :
60
  {
61
    KEEP (*(.init))
62
  }
63
  .plt            : { *(.plt) }
64
  .iplt           : { *(.iplt) }
65
  .text           :
66
  {
67
    *(.text.unlikely .text.*_unlikely)
68
    *(.text.exit .text.exit.*)
69
    *(.text.startup .text.startup.*)
70
    *(.text.hot .text.hot.*)
71
    *(.text .stub .text.* .gnu.linkonce.t.*)
72
    /* .gnu.warning sections are handled specially by elf32.em.  */
73
    *(.gnu.warning)
74
    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
75
  }
76
  .fini           :
77
  {
78
    KEEP (*(.fini))
79
  }
80
  PROVIDE (__etext = .);
81
  PROVIDE (_etext = .);
82
  PROVIDE (etext = .);
83
  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
84
  .rodata1        : { *(.rodata1) }
85
  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
86
   PROVIDE_HIDDEN (__exidx_start = .);
87
  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
88
   PROVIDE_HIDDEN (__exidx_end = .);
89
  .eh_frame_hdr : { *(.eh_frame_hdr) }
90
  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
91
  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
92
  .gcc_except_table.*) }
93
  /* These sections are generated by the Sun/Oracle C++ compiler.  */
94
  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
95
  .exception_ranges*) }
96
  /* Adjust the address for the data segment.  We want to adjust up to
97
     the same address within the page on the next page up.  */
98
  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
99
  /* Exception handling  */
100
  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
101
  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
102
  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
103
  /* Thread Local Storage sections  */
104
  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
105
  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
106
  .preinit_array     :
107
  {
108
    PROVIDE_HIDDEN (__preinit_array_start = .);
109
    KEEP (*(.preinit_array))
110
    PROVIDE_HIDDEN (__preinit_array_end = .);
111
  }
112
  .init_array     :
113
  {
114
    PROVIDE_HIDDEN (__init_array_start = .);
115
    KEEP (*(SORT(.init_array.*)))
116
    KEEP (*(.init_array))
117
    PROVIDE_HIDDEN (__init_array_end = .);
118
  }
119
  .fini_array     :
120
  {
121
    PROVIDE_HIDDEN (__fini_array_start = .);
122
    KEEP (*(SORT(.fini_array.*)))
123
    KEEP (*(.fini_array))
124
    PROVIDE_HIDDEN (__fini_array_end = .);
125
  }
126
  .ctors          :
127
  {
128
    /* gcc uses crtbegin.o to find the start of
129
       the constructors, so we make sure it is
130
       first.  Because this is a wildcard, it
131
       doesn't matter if the user does not
132
       actually link against crtbegin.o; the
133
       linker won't look for a file to match a
134
       wildcard.  The wildcard also means that it
135
       doesn't matter which directory crtbegin.o
136
       is in.  */
137
    KEEP (*crtbegin.o(.ctors))
138
    KEEP (*crtbegin?.o(.ctors))
139
    /* We don't want to include the .ctor section from
140
       the crtend.o file until after the sorted ctors.
141
       The .ctor section from the crtend file contains the
142
       end of ctors marker and it must be last */
143
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
144
    KEEP (*(SORT(.ctors.*)))
145
    KEEP (*(.ctors))
146
  }
147
  .dtors          :
148
  {
149
    KEEP (*crtbegin.o(.dtors))
150
    KEEP (*crtbegin?.o(.dtors))
151
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
152
    KEEP (*(SORT(.dtors.*)))
153
    KEEP (*(.dtors))
154
  }
155
  .jcr            : { KEEP (*(.jcr)) }
156
  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
157
  .dynamic        : { *(.dynamic) }
158
  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
159
  .data           :
160
  {
161
    __data_start = . ;
162
    *(.data .data.* .gnu.linkonce.d.*)
163
    SORT(CONSTRUCTORS)
164
  }
165
  .data1          : { *(.data1) }
166
  _edata = .; PROVIDE (edata = .);
167
  . = .;
168
  __bss_start = .;
169
  __bss_start__ = .;
170
  .bss            :
171
  {
172
   *(.dynbss)
173
   *(.bss .bss.* .gnu.linkonce.b.*)
174
   *(COMMON)
175
   /* Align here to ensure that the .bss section occupies space up to
176
      _end.  Align after .bss to ensure correct alignment even if the
177
      .bss section disappears because there are no input sections.
178
      FIXME: Why do we need it? When there is no .bss section, we don't
179
      pad the .data section.  */
180
   . = ALIGN(. != 0 ? 32 / 8 : 1);
181
  }
182
  _bss_end__ = . ; __bss_end__ = . ;
183
  . = ALIGN(32 / 8);
184
  . = ALIGN(32 / 8);
185
  __end__ = . ;
186
  _end = .; PROVIDE (end = .);
187
  /* Stabs debugging sections.  */
188
  .stab          0 : { *(.stab) }
189
  .stabstr       0 : { *(.stabstr) }
190
  .stab.excl     0 : { *(.stab.excl) }
191
  .stab.exclstr  0 : { *(.stab.exclstr) }
192
  .stab.index    0 : { *(.stab.index) }
193
  .stab.indexstr 0 : { *(.stab.indexstr) }
194
  .comment       0 : { *(.comment) }
195
  /* DWARF debug sections.
196
     Symbols in the DWARF debugging sections are relative to the beginning
197
     of the section so we begin them at 0.  */
198
  /* DWARF 1 */
199
  .debug          0 : { *(.debug) }
200
  .line           0 : { *(.line) }
201
  /* GNU DWARF 1 extensions */
202
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
203
  .debug_sfnames  0 : { *(.debug_sfnames) }
204
  /* DWARF 1.1 and DWARF 2 */
205
  .debug_aranges  0 : { *(.debug_aranges) }
206
  .debug_pubnames 0 : { *(.debug_pubnames) }
207
  /* DWARF 2 */
208
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
209
  .debug_abbrev   0 : { *(.debug_abbrev) }
210
  .debug_line     0 : { *(.debug_line) }
211
  .debug_frame    0 : { *(.debug_frame) }
212
  .debug_str      0 : { *(.debug_str) }
213
  .debug_loc      0 : { *(.debug_loc) }
214
  .debug_macinfo  0 : { *(.debug_macinfo) }
215
  /* SGI/MIPS DWARF 2 extensions */
216
  .debug_weaknames 0 : { *(.debug_weaknames) }
217
  .debug_funcnames 0 : { *(.debug_funcnames) }
218
  .debug_typenames 0 : { *(.debug_typenames) }
219
  .debug_varnames  0 : { *(.debug_varnames) }
220
  /* DWARF 3 */
221
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
222
  .debug_ranges   0 : { *(.debug_ranges) }
223
  /* DWARF Extension.  */
224
  .debug_macro    0 : { *(.debug_macro) }
225
    .stack         0x80000 :
226
  {
227
    _stack = .;
228
    *(.stack)
229
  }
230
  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
231
  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
232
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
233
}
(-)a/ld/testsuite/ld-arm/arm-no-rel-plt.out (+2 lines)
Line 0 Link Here
1
.*: error: required section '.rel.plt' not found in the linker script
2
.*: final link failed: Invalid operation

Return to bug 14397