mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
bfd_get_size cache
We have calls to bfd_get_size when swapping in ELF section headers. Since object files can have a large number of sections, it's worth caching the file size rather than making lots of stat system calls. * bfd.c (struct bfd): Move format and direction to other bitfields. Add "size". * bfdio.c (bfd_get_size): Cache size when not writing file. * opncls.c (bfd_get_debug_link_info_1): Allow for bfd_get_size returning zero, ie. unknown. (bfd_get_alt_debug_link_info): Likewise. * bfd-in2.h: Regenerate.
This commit is contained in:
19
bfd/bfd.c
19
bfd/bfd.c
@@ -85,12 +85,6 @@ CODE_FRAGMENT
|
||||
. {* A unique identifier of the BFD *}
|
||||
. unsigned int id;
|
||||
.
|
||||
. {* The format which belongs to the BFD. (object, core, etc.) *}
|
||||
. ENUM_BITFIELD (bfd_format) format : 3;
|
||||
.
|
||||
. {* The direction with which the BFD was opened. *}
|
||||
. ENUM_BITFIELD (bfd_direction) direction : 2;
|
||||
.
|
||||
. {* Format_specific flags. *}
|
||||
. flagword flags;
|
||||
.
|
||||
@@ -194,6 +188,12 @@ CODE_FRAGMENT
|
||||
. | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
|
||||
. | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
|
||||
.
|
||||
. {* The format which belongs to the BFD. (object, core, etc.) *}
|
||||
. ENUM_BITFIELD (bfd_format) format : 3;
|
||||
.
|
||||
. {* The direction with which the BFD was opened. *}
|
||||
. ENUM_BITFIELD (bfd_direction) direction : 2;
|
||||
.
|
||||
. {* Is the file descriptor being cached? That is, can it be closed as
|
||||
. needed, and re-opened when accessed later? *}
|
||||
. unsigned int cacheable : 1;
|
||||
@@ -283,7 +283,7 @@ CODE_FRAGMENT
|
||||
.
|
||||
. {* Symbol table for output BFD (with symcount entries).
|
||||
. Also used by the linker to cache input BFD symbols. *}
|
||||
. struct bfd_symbol **outsymbols;
|
||||
. struct bfd_symbol **outsymbols;
|
||||
.
|
||||
. {* Used for input and output. *}
|
||||
. unsigned int symcount;
|
||||
@@ -294,6 +294,11 @@ CODE_FRAGMENT
|
||||
. {* Pointer to structure which contains architecture information. *}
|
||||
. const struct bfd_arch_info *arch_info;
|
||||
.
|
||||
. {* Cached length of file for bfd_get_size. 0 until bfd_get_size is
|
||||
. called, 1 if stat returns an error or the file size is too large to
|
||||
. return in ufile_ptr. Both 0 and 1 should be treated as "unknown". *}
|
||||
. ufile_ptr size;
|
||||
.
|
||||
. {* Stuff only useful for archives. *}
|
||||
. void *arelt_data;
|
||||
. struct bfd *my_archive; {* The containing archive BFD. *}
|
||||
|
||||
Reference in New Issue
Block a user