Reorganise struct bfd

for better packing.  Removes a field and a flag that are never set.

bfd/
	* bfd.c (struct bfd): Reorganise for better packing.  Delete
	"ifd" field.  Make "format", "direction" and "flags" bitfields.
	(HAS_LOAD_PAGE): Delete, renumber following flags.
	* bfd-in2.h: Regenerate.
	* coff-tic4x.c: Remove HAS_LOAD_PAGE from extra flags in target vecs.
binutils/
	* objdump.c (dump_bfd_header): Don't print HAS_LOAD_PAGE.
This commit is contained in:
Alan Modra 2014-07-01 20:43:14 +09:30
parent 7341d5e22f
commit b6a1c03a95
6 changed files with 124 additions and 125 deletions

View File

@ -1,3 +1,11 @@
2014-07-01 Alan Modra <amodra@gmail.com>
* bfd.c (struct bfd): Reorganise for better packing. Delete
"ifd" field. Make "format", "direction" and "flags" bitfields.
(HAS_LOAD_PAGE): Delete, renumber following flags.
* bfd-in2.h: Regenerate.
* coff-tic4x.c: Remove HAS_LOAD_PAGE from extra flags in target vecs.
2014-07-01 Alan Modra <amodra@gmail.com> 2014-07-01 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc_stub_type): Add ppc_stub_global_entry. * elf64-ppc.c (ppc_stub_type): Add ppc_stub_global_entry.

View File

@ -6226,9 +6226,6 @@ enum bfd_direction
struct bfd struct bfd
{ {
/* A unique identifier of the BFD */
unsigned int id;
/* The filename the application opened the BFD with. */ /* The filename the application opened the BFD with. */
const char *filename; const char *filename;
@ -6251,17 +6248,17 @@ struct bfd
/* File modified time, if mtime_set is TRUE. */ /* File modified time, if mtime_set is TRUE. */
long mtime; long mtime;
/* Reserved for an unimplemented file locking extension. */ /* A unique identifier of the BFD */
int ifd; unsigned int id;
/* The format which belongs to the BFD. (object, core, etc.) */ /* The format which belongs to the BFD. (object, core, etc.) */
bfd_format format; ENUM_BITFIELD (bfd_format) format : 3;
/* The direction with which the BFD was opened. */ /* The direction with which the BFD was opened. */
enum bfd_direction direction; ENUM_BITFIELD (bfd_direction) direction : 2;
/* Format_specific flags. */ /* Format_specific flags. */
flagword flags; flagword flags : 17;
/* Values that may appear in the flags field of a BFD. These also /* Values that may appear in the flags field of a BFD. These also
appear in the object_flags field of the bfd_target structure, where appear in the object_flags field of the bfd_target structure, where
@ -6320,26 +6317,23 @@ struct bfd
struct. */ struct. */
#define BFD_IN_MEMORY 0x800 #define BFD_IN_MEMORY 0x800
/* The sections in this BFD specify a memory page. */
#define HAS_LOAD_PAGE 0x1000
/* This BFD has been created by the linker and doesn't correspond /* This BFD has been created by the linker and doesn't correspond
to any input file. */ to any input file. */
#define BFD_LINKER_CREATED 0x2000 #define BFD_LINKER_CREATED 0x1000
/* This may be set before writing out a BFD to request that it /* This may be set before writing out a BFD to request that it
be written using values for UIDs, GIDs, timestamps, etc. that be written using values for UIDs, GIDs, timestamps, etc. that
will be consistent from run to run. */ will be consistent from run to run. */
#define BFD_DETERMINISTIC_OUTPUT 0x4000 #define BFD_DETERMINISTIC_OUTPUT 0x2000
/* Compress sections in this BFD. */ /* Compress sections in this BFD. */
#define BFD_COMPRESS 0x8000 #define BFD_COMPRESS 0x4000
/* Decompress sections in this BFD. */ /* Decompress sections in this BFD. */
#define BFD_DECOMPRESS 0x10000 #define BFD_DECOMPRESS 0x8000
/* BFD is a dummy, for plugins. */ /* BFD is a dummy, for plugins. */
#define BFD_PLUGIN 0x20000 #define BFD_PLUGIN 0x10000
/* Flags bits to be saved in bfd_preserve_save. */ /* Flags bits to be saved in bfd_preserve_save. */
#define BFD_FLAGS_SAVED \ #define BFD_FLAGS_SAVED \
@ -6350,6 +6344,42 @@ struct bfd
(BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
| BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)
/* Is the file descriptor being cached? That is, can it be closed as
needed, and re-opened when accessed later? */
unsigned int cacheable : 1;
/* Marks whether there was a default target specified when the
BFD was opened. This is used to select which matching algorithm
to use to choose the back end. */
unsigned int target_defaulted : 1;
/* ... and here: (``once'' means at least once). */
unsigned int opened_once : 1;
/* Set if we have a locally maintained mtime value, rather than
getting it from the file each time. */
unsigned int mtime_set : 1;
/* Flag set if symbols from this BFD should not be exported. */
unsigned int no_export : 1;
/* Remember when output has begun, to stop strange things
from happening. */
unsigned int output_has_begun : 1;
/* Have archive map. */
unsigned int has_armap : 1;
/* Set if this is a thin archive. */
unsigned int is_thin_archive : 1;
/* Set if only required symbols should be added in the link hash table for
this object. Used by VMS linkers. */
unsigned int selective_search : 1;
/* Set if this is the linker output BFD. */
unsigned int is_linker_output : 1;
/* Currently my_archive is tested before adding origin to /* Currently my_archive is tested before adding origin to
anything. I believe that this can become always an add of anything. I believe that this can become always an add of
origin, with origin set to 0 for non archive files. */ origin, with origin set to 0 for non archive files. */
@ -6374,17 +6404,21 @@ struct bfd
/* The number of sections. */ /* The number of sections. */
unsigned int section_count; unsigned int section_count;
/* A field used by _bfd_generic_link_add_archive_symbols. This will
be used only for archive elements. */
int archive_pass;
/* Stuff only useful for object files: /* Stuff only useful for object files:
The start address. */ The start address. */
bfd_vma start_address; bfd_vma start_address;
/* Used for input and output. */
unsigned int symcount;
/* Symbol table for output BFD (with symcount entries). /* Symbol table for output BFD (with symcount entries).
Also used by the linker to cache input BFD symbols. */ 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;
/* Used for slurped dynamic symbol tables. */ /* Used for slurped dynamic symbol tables. */
unsigned int dynsymcount; unsigned int dynsymcount;
@ -6406,10 +6440,6 @@ struct bfd
struct bfd_link_hash_table *hash; struct bfd_link_hash_table *hash;
} link; } link;
/* A field used by _bfd_generic_link_add_archive_symbols. This will
be used only for archive elements. */
int archive_pass;
/* Used by the back end to hold private data. */ /* Used by the back end to hold private data. */
union union
{ {
@ -6460,42 +6490,6 @@ struct bfd
struct objalloc *, but we use void * to avoid requiring the inclusion struct objalloc *, but we use void * to avoid requiring the inclusion
of objalloc.h. */ of objalloc.h. */
void *memory; void *memory;
/* Is the file descriptor being cached? That is, can it be closed as
needed, and re-opened when accessed later? */
unsigned int cacheable : 1;
/* Marks whether there was a default target specified when the
BFD was opened. This is used to select which matching algorithm
to use to choose the back end. */
unsigned int target_defaulted : 1;
/* ... and here: (``once'' means at least once). */
unsigned int opened_once : 1;
/* Set if we have a locally maintained mtime value, rather than
getting it from the file each time. */
unsigned int mtime_set : 1;
/* Flag set if symbols from this BFD should not be exported. */
unsigned int no_export : 1;
/* Remember when output has begun, to stop strange things
from happening. */
unsigned int output_has_begun : 1;
/* Have archive map. */
unsigned int has_armap : 1;
/* Set if this is a thin archive. */
unsigned int is_thin_archive : 1;
/* Set if only required symbols should be added in the link hash table for
this object. Used by VMS linkers. */
unsigned int selective_search : 1;
/* Set if this is the linker output BFD. */
unsigned int is_linker_output : 1;
}; };
/* See note beside bfd_set_section_userdata. */ /* See note beside bfd_set_section_userdata. */

112
bfd/bfd.c
View File

@ -46,9 +46,6 @@ CODE_FRAGMENT
. .
.struct bfd .struct bfd
.{ .{
. {* A unique identifier of the BFD *}
. unsigned int id;
.
. {* The filename the application opened the BFD with. *} . {* The filename the application opened the BFD with. *}
. const char *filename; . const char *filename;
. .
@ -71,17 +68,17 @@ CODE_FRAGMENT
. {* File modified time, if mtime_set is TRUE. *} . {* File modified time, if mtime_set is TRUE. *}
. long mtime; . long mtime;
. .
. {* Reserved for an unimplemented file locking extension. *} . {* A unique identifier of the BFD *}
. int ifd; . unsigned int id;
. .
. {* The format which belongs to the BFD. (object, core, etc.) *} . {* The format which belongs to the BFD. (object, core, etc.) *}
. bfd_format format; . ENUM_BITFIELD (bfd_format) format : 3;
. .
. {* The direction with which the BFD was opened. *} . {* The direction with which the BFD was opened. *}
. enum bfd_direction direction; . ENUM_BITFIELD (bfd_direction) direction : 2;
. .
. {* Format_specific flags. *} . {* Format_specific flags. *}
. flagword flags; . flagword flags : 17;
. .
. {* Values that may appear in the flags field of a BFD. These also . {* Values that may appear in the flags field of a BFD. These also
. appear in the object_flags field of the bfd_target structure, where . appear in the object_flags field of the bfd_target structure, where
@ -140,26 +137,23 @@ CODE_FRAGMENT
. struct. *} . struct. *}
.#define BFD_IN_MEMORY 0x800 .#define BFD_IN_MEMORY 0x800
. .
. {* The sections in this BFD specify a memory page. *}
.#define HAS_LOAD_PAGE 0x1000
.
. {* This BFD has been created by the linker and doesn't correspond . {* This BFD has been created by the linker and doesn't correspond
. to any input file. *} . to any input file. *}
.#define BFD_LINKER_CREATED 0x2000 .#define BFD_LINKER_CREATED 0x1000
. .
. {* This may be set before writing out a BFD to request that it . {* This may be set before writing out a BFD to request that it
. be written using values for UIDs, GIDs, timestamps, etc. that . be written using values for UIDs, GIDs, timestamps, etc. that
. will be consistent from run to run. *} . will be consistent from run to run. *}
.#define BFD_DETERMINISTIC_OUTPUT 0x4000 .#define BFD_DETERMINISTIC_OUTPUT 0x2000
. .
. {* Compress sections in this BFD. *} . {* Compress sections in this BFD. *}
.#define BFD_COMPRESS 0x8000 .#define BFD_COMPRESS 0x4000
. .
. {* Decompress sections in this BFD. *} . {* Decompress sections in this BFD. *}
.#define BFD_DECOMPRESS 0x10000 .#define BFD_DECOMPRESS 0x8000
. .
. {* BFD is a dummy, for plugins. *} . {* BFD is a dummy, for plugins. *}
.#define BFD_PLUGIN 0x20000 .#define BFD_PLUGIN 0x10000
. .
. {* Flags bits to be saved in bfd_preserve_save. *} . {* Flags bits to be saved in bfd_preserve_save. *}
.#define BFD_FLAGS_SAVED \ .#define BFD_FLAGS_SAVED \
@ -170,6 +164,42 @@ CODE_FRAGMENT
. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
. | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) . | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)
. .
. {* Is the file descriptor being cached? That is, can it be closed as
. needed, and re-opened when accessed later? *}
. unsigned int cacheable : 1;
.
. {* Marks whether there was a default target specified when the
. BFD was opened. This is used to select which matching algorithm
. to use to choose the back end. *}
. unsigned int target_defaulted : 1;
.
. {* ... and here: (``once'' means at least once). *}
. unsigned int opened_once : 1;
.
. {* Set if we have a locally maintained mtime value, rather than
. getting it from the file each time. *}
. unsigned int mtime_set : 1;
.
. {* Flag set if symbols from this BFD should not be exported. *}
. unsigned int no_export : 1;
.
. {* Remember when output has begun, to stop strange things
. from happening. *}
. unsigned int output_has_begun : 1;
.
. {* Have archive map. *}
. unsigned int has_armap : 1;
.
. {* Set if this is a thin archive. *}
. unsigned int is_thin_archive : 1;
.
. {* Set if only required symbols should be added in the link hash table for
. this object. Used by VMS linkers. *}
. unsigned int selective_search : 1;
.
. {* Set if this is the linker output BFD. *}
. unsigned int is_linker_output : 1;
.
. {* Currently my_archive is tested before adding origin to . {* Currently my_archive is tested before adding origin to
. anything. I believe that this can become always an add of . anything. I believe that this can become always an add of
. origin, with origin set to 0 for non archive files. *} . origin, with origin set to 0 for non archive files. *}
@ -194,17 +224,21 @@ CODE_FRAGMENT
. {* The number of sections. *} . {* The number of sections. *}
. unsigned int section_count; . unsigned int section_count;
. .
. {* A field used by _bfd_generic_link_add_archive_symbols. This will
. be used only for archive elements. *}
. int archive_pass;
.
. {* Stuff only useful for object files: . {* Stuff only useful for object files:
. The start address. *} . The start address. *}
. bfd_vma start_address; . bfd_vma start_address;
. .
. {* Used for input and output. *}
. unsigned int symcount;
.
. {* Symbol table for output BFD (with symcount entries). . {* Symbol table for output BFD (with symcount entries).
. Also used by the linker to cache input BFD symbols. *} . 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;
.
. {* Used for slurped dynamic symbol tables. *} . {* Used for slurped dynamic symbol tables. *}
. unsigned int dynsymcount; . unsigned int dynsymcount;
. .
@ -226,10 +260,6 @@ CODE_FRAGMENT
. struct bfd_link_hash_table *hash; . struct bfd_link_hash_table *hash;
. } link; . } link;
. .
. {* A field used by _bfd_generic_link_add_archive_symbols. This will
. be used only for archive elements. *}
. int archive_pass;
.
. {* Used by the back end to hold private data. *} . {* Used by the back end to hold private data. *}
. union . union
. { . {
@ -280,42 +310,6 @@ CODE_FRAGMENT
. struct objalloc *, but we use void * to avoid requiring the inclusion . struct objalloc *, but we use void * to avoid requiring the inclusion
. of objalloc.h. *} . of objalloc.h. *}
. void *memory; . void *memory;
.
. {* Is the file descriptor being cached? That is, can it be closed as
. needed, and re-opened when accessed later? *}
. unsigned int cacheable : 1;
.
. {* Marks whether there was a default target specified when the
. BFD was opened. This is used to select which matching algorithm
. to use to choose the back end. *}
. unsigned int target_defaulted : 1;
.
. {* ... and here: (``once'' means at least once). *}
. unsigned int opened_once : 1;
.
. {* Set if we have a locally maintained mtime value, rather than
. getting it from the file each time. *}
. unsigned int mtime_set : 1;
.
. {* Flag set if symbols from this BFD should not be exported. *}
. unsigned int no_export : 1;
.
. {* Remember when output has begun, to stop strange things
. from happening. *}
. unsigned int output_has_begun : 1;
.
. {* Have archive map. *}
. unsigned int has_armap : 1;
.
. {* Set if this is a thin archive. *}
. unsigned int is_thin_archive : 1;
.
. {* Set if only required symbols should be added in the link hash table for
. this object. Used by VMS linkers. *}
. unsigned int selective_search : 1;
.
. {* Set if this is the linker output BFD. *}
. unsigned int is_linker_output : 1;
.}; .};
. .
.{* See note beside bfd_set_section_userdata. *} .{* See note beside bfd_set_section_userdata. *}

View File

@ -261,30 +261,30 @@ tic4x_reloc_processing (arelent *relent,
/* TI COFF v0, DOS tools (little-endian headers). */ /* TI COFF v0, DOS tools (little-endian headers). */
CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff0_vec, "coff0-tic4x", CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff0_vec, "coff0-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
NULL, &ticoff0_swap_table); NULL, &ticoff0_swap_table);
/* TI COFF v0, SPARC tools (big-endian headers). */ /* TI COFF v0, SPARC tools (big-endian headers). */
CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff0_beh_vec, "coff0-beh-tic4x", CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff0_beh_vec, "coff0-beh-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
&tic4x_coff0_vec, &ticoff0_swap_table); &tic4x_coff0_vec, &ticoff0_swap_table);
/* TI COFF v1, DOS tools (little-endian headers). */ /* TI COFF v1, DOS tools (little-endian headers). */
CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff1_vec, "coff1-tic4x", CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff1_vec, "coff1-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
&tic4x_coff0_beh_vec, &ticoff1_swap_table); &tic4x_coff0_beh_vec, &ticoff1_swap_table);
/* TI COFF v1, SPARC tools (big-endian headers). */ /* TI COFF v1, SPARC tools (big-endian headers). */
CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff1_beh_vec, "coff1-beh-tic4x", CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff1_beh_vec, "coff1-beh-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
&tic4x_coff1_vec, &ticoff1_swap_table); &tic4x_coff1_vec, &ticoff1_swap_table);
/* TI COFF v2, TI DOS tools output (little-endian headers). */ /* TI COFF v2, TI DOS tools output (little-endian headers). */
CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff2_vec, "coff2-tic4x", CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff2_vec, "coff2-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
&tic4x_coff1_beh_vec, COFF_SWAP_TABLE); &tic4x_coff1_beh_vec, COFF_SWAP_TABLE);
/* TI COFF v2, TI SPARC tools output (big-endian headers). */ /* TI COFF v2, TI SPARC tools output (big-endian headers). */
CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff2_beh_vec, "coff2-beh-tic4x", CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff2_beh_vec, "coff2-beh-tic4x",
HAS_LOAD_PAGE, SEC_CODE | SEC_READONLY, '_', 0, SEC_CODE | SEC_READONLY, '_',
&tic4x_coff2_vec, COFF_SWAP_TABLE); &tic4x_coff2_vec, COFF_SWAP_TABLE);

View File

@ -1,3 +1,7 @@
2014-07-01 Alan Modra <amodra@gmail.com>
* objdump.c (dump_bfd_header): Don't print HAS_LOAD_PAGE.
2014-06-26 Erik Akermann <kurterikackermann@gmail.com> 2014-06-26 Erik Akermann <kurterikackermann@gmail.com>
* strings.c: Add -w/--include-all-whitespace option to include any * strings.c: Add -w/--include-all-whitespace option to include any

View File

@ -2629,7 +2629,6 @@ dump_bfd_header (bfd *abfd)
PF (WP_TEXT, "WP_TEXT"); PF (WP_TEXT, "WP_TEXT");
PF (D_PAGED, "D_PAGED"); PF (D_PAGED, "D_PAGED");
PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE"); PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
PF (HAS_LOAD_PAGE, "HAS_LOAD_PAGE");
printf (_("\nstart address 0x")); printf (_("\nstart address 0x"));
bfd_printf_vma (abfd, abfd->start_address); bfd_printf_vma (abfd, abfd->start_address);
printf ("\n"); printf ("\n");