mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-28 04:25:10 +08:00
Fix: Output section type does not been applied to section forced output by . = .
assignment
PR 30875 * ldlang.c (get_os_init_flag): New function. (exp_init_os, map_input_to_output_sections): Use it.
This commit is contained in:
parent
da0784f961
commit
193327db9f
@ -1,3 +1,9 @@
|
||||
2023-09-27 Hsinyuan Xavier <TheLastLin@hotmail.com>
|
||||
|
||||
PR 30875
|
||||
* ldlang.c (get_os_init_flag): New function.
|
||||
(exp_init_os, map_input_to_output_sections): Use it.
|
||||
|
||||
2023-07-24 Johannes Schauer Marin Rodrigues <josch@debian.org>
|
||||
|
||||
* pe-dll.c (fill_edata): If inserting a timestamp, use the value
|
||||
|
20
ld/ldlang.c
20
ld/ldlang.c
@ -2443,6 +2443,20 @@ init_os (lang_output_section_statement_type *s, flagword flags)
|
||||
"section alignment");
|
||||
}
|
||||
|
||||
static flagword
|
||||
get_os_init_flag (lang_output_section_statement_type * os)
|
||||
{
|
||||
if (os != NULL)
|
||||
switch (os->sectype)
|
||||
{
|
||||
case readonly_section: return SEC_READONLY;
|
||||
case noload_section: return SEC_NEVER_LOAD;
|
||||
default: break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure that all output sections mentioned in an expression are
|
||||
initialized. */
|
||||
|
||||
@ -2486,7 +2500,7 @@ exp_init_os (etree_type *exp)
|
||||
|
||||
os = lang_output_section_find (exp->name.name);
|
||||
if (os != NULL && os->bfd_section == NULL)
|
||||
init_os (os, 0);
|
||||
init_os (os, get_os_init_flag (os));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -4262,14 +4276,16 @@ map_input_to_output_sections
|
||||
if (os != NULL && os->bfd_section == NULL)
|
||||
init_os (os, 0);
|
||||
break;
|
||||
|
||||
case lang_assignment_statement_enum:
|
||||
if (os != NULL && os->bfd_section == NULL)
|
||||
init_os (os, 0);
|
||||
init_os (os, get_os_init_flag (os));
|
||||
|
||||
/* Make sure that any sections mentioned in the assignment
|
||||
are initialized. */
|
||||
exp_init_os (s->assignment_statement.exp);
|
||||
break;
|
||||
|
||||
case lang_address_statement_enum:
|
||||
/* Mark the specified section with the supplied address.
|
||||
If this section was actually a segment marker, then the
|
||||
|
Loading…
Reference in New Issue
Block a user