aboutsummaryrefslogtreecommitdiff
path: root/bfd/coffcode.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-01-06 18:59:20 +1030
committerAlan Modra <amodra@gmail.com>2023-01-06 21:06:15 +1030
commit22a95e1a37aff28238e9d40bbe4441aa554a14c6 (patch)
tree1f23719284f052d698cc11a3ed971d0d2ae8ec29 /bfd/coffcode.h
parentbb391cb24d8f92ecad10bb6a60abdf0b880de0dd (diff)
downloadgdb-22a95e1a37aff28238e9d40bbe4441aa554a14c6.zip
gdb-22a95e1a37aff28238e9d40bbe4441aa554a14c6.tar.gz
gdb-22a95e1a37aff28238e9d40bbe4441aa554a14c6.tar.bz2
Make coff backend data read-only
The bfd_coff_backend_data struct should be read-only, the only thing preventing this is that objcopy writes to one of the fields, _bfd_coff_long_section_names. This patch creates a copy of the field in bfd coff_obj_tdata, which makes more sense anyway. When enabling long section names the intent is to do so for a particular bfd, not for all bfds that might happen to be using the target xvec. bfd/ * coffcode.h: Update coff long section name comment. (bfd_coff_set_long_section_names_allowed): Use macro accessor to set flag. (bfd_coff_set_long_section_names_disallowed): Tidy. (coff_backend_info): Return a const pointer. (bfd_coff_std_swap_table, ticoff0_swap_table, ticoff1_swap_table), (bigobj_swap_table): Make const. (bfd_coff_long_section_names): Use tdata copy. (coff_mkobject): Set long_section_names from coff_backend_info. * coff-go32.c (_bfd_go32_mkobject): Likewise. * peicode.h (pe_mkobject): Likewise. * coff-sh.c (bfd_coff_small_swap_table): Make const. * libcoff-in.h (struct coff_tdata): Add long_section_names, reorder fields. * libcoff.h: Regenerate. binutils/ * objcopy.c (set_long_section_mode): Move earlier in file. (copy_object): Call set_long_section_mode here, after setting output format. (copy_file): Don't call set_long_section_mode.
Diffstat (limited to 'bfd/coffcode.h')
-rw-r--r--bfd/coffcode.h29
1 files changed, 16 insertions, 13 deletions
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 81d5cb0..e952bd7 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -134,9 +134,10 @@ SUBSUBSECTION
in output BFDs at runtime; if it is false, as it will be by default
when generating an executable image, long section names are truncated;
if true, the long section names extension is employed. The hook
- points to a function that allows the value of the flag to be altered
- at runtime, on formats that support long section names at all; on
- other formats it points to a stub that returns an error indication.
+ points to a function that allows the value of a copy of the flag
+ in coff object tdata to be altered at runtime, on formats that
+ support long section names at all; on other formats it points
+ to a stub that returns an error indication.
With input BFDs, the flag is set according to whether any long section
names are detected while reading the section headers. For a completely
@@ -462,15 +463,14 @@ static bool ticoff1_bad_format_hook
static bool
bfd_coff_set_long_section_names_allowed (bfd *abfd, int enable)
{
- coff_backend_info (abfd)->_bfd_coff_long_section_names = enable;
+ bfd_coff_long_section_names (abfd) = enable;
return true;
}
#else /* !defined (COFF_LONG_SECTION_NAMES) */
static bool
-bfd_coff_set_long_section_names_disallowed (bfd *abfd, int enable)
+bfd_coff_set_long_section_names_disallowed (bfd *abfd ATTRIBUTE_UNUSED,
+ int enable ATTRIBUTE_UNUSED)
{
- (void) abfd;
- (void) enable;
return false;
}
#endif /* defined (COFF_LONG_SECTION_NAMES) */
@@ -1541,7 +1541,7 @@ Special entry points for gdb to swap in coff symbol table parts:
.} bfd_coff_backend_data;
.
.#define coff_backend_info(abfd) \
-. ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
+. ((const bfd_coff_backend_data *) (abfd)->xvec->backend_data)
.
.#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
. ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
@@ -1584,7 +1584,7 @@ Special entry points for gdb to swap in coff symbol table parts:
.#define bfd_coff_long_filenames(abfd) \
. (coff_backend_info (abfd)->_bfd_coff_long_filenames)
.#define bfd_coff_long_section_names(abfd) \
-. (coff_backend_info (abfd)->_bfd_coff_long_section_names)
+. (coff_data (abfd)->long_section_names)
.#define bfd_coff_set_long_section_names(abfd, enable) \
. ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
.#define bfd_coff_default_section_alignment_power(abfd) \
@@ -2067,6 +2067,9 @@ coff_mkobject (bfd * abfd)
coff->relocbase = 0;
coff->local_toc_sym_map = 0;
+ bfd_coff_long_section_names (abfd)
+ = coff_backend_info (abfd)->_bfd_coff_long_section_names;
+
/* make_abs_section(abfd);*/
return true;
@@ -5445,7 +5448,7 @@ coff_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED,
#define coff_SWAP_scnhdr_in coff_swap_scnhdr_in
#endif
-static bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
+static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
{
coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
coff_SWAP_aux_out, coff_SWAP_sym_out,
@@ -5486,7 +5489,7 @@ static bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
#ifdef TICOFF
/* COFF0 differs in file/section header size and relocation entry size. */
-static bfd_coff_backend_data ticoff0_swap_table =
+static const bfd_coff_backend_data ticoff0_swap_table =
{
coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
coff_SWAP_aux_out, coff_SWAP_sym_out,
@@ -5528,7 +5531,7 @@ static bfd_coff_backend_data ticoff0_swap_table =
#ifdef TICOFF
/* COFF1 differs in section header size. */
-static bfd_coff_backend_data ticoff1_swap_table =
+static const bfd_coff_backend_data ticoff1_swap_table =
{
coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
coff_SWAP_aux_out, coff_SWAP_sym_out,
@@ -5789,7 +5792,7 @@ coff_bigobj_swap_aux_out (bfd * abfd,
return AUXESZ;
}
-static bfd_coff_backend_data bigobj_swap_table =
+static const bfd_coff_backend_data bigobj_swap_table =
{
coff_bigobj_swap_aux_in, coff_bigobj_swap_sym_in, coff_SWAP_lineno_in,
coff_bigobj_swap_aux_out, coff_bigobj_swap_sym_out,