summaryrefslogtreecommitdiff
path: root/bfd/section.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/section.c')
-rw-r--r--bfd/section.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/bfd/section.c b/bfd/section.c
index 70727ac74d..e178f5830a 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -424,13 +424,14 @@ CODE_FRAGMENT
. size of <<.bss>>). *}
. bfd_size_type size;
.
-. {* The original size on disk of the section, in octets. This field
-. is used by the linker relaxation code. It is currently only set
-. for sections where the linker relaxation scheme doesn't cache
-. altered section and reloc contents (stabs, eh_frame, SEC_MERGE),
-. and thus the original size needs to be kept to read the section
-. multiple times. If non-zero, rawsize will be used in address
-. checks during relocation and to read section contents. *}
+. {* For input sections, the original size on disk of the section, in
+. octets. This field is used by the linker relaxation code. It is
+. currently only set for sections where the linker relaxation scheme
+. doesn't cache altered section and reloc contents (stabs, eh_frame,
+. SEC_MERGE, some coff relaxing targets), and thus the original size
+. needs to be kept to read the section multiple times.
+. For output sections, rawsize holds the section size calculated on
+. a previous linker relaxation pass. *}
. bfd_size_type rawsize;
.
. {* If this section is going to be output, then this value is the
@@ -1379,7 +1380,7 @@ bfd_malloc_and_get_section (bfd *abfd, sec_ptr sec, bfd_byte **buf)
if (sz == 0)
return TRUE;
- p = bfd_malloc (sz);
+ p = bfd_malloc (sec->rawsize > sec->size ? sec->rawsize : sec->size);
if (p == NULL)
return FALSE;
*buf = p;