From b6a1c03a9547590a35fccda9ae358fb1cfd8befa Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 1 Jul 2014 20:43:14 +0930 Subject: [PATCH] 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. --- bfd/ChangeLog | 8 ++++ bfd/bfd-in2.h | 112 +++++++++++++++++++++++++---------------------------- bfd/bfd.c | 112 +++++++++++++++++++++++++---------------------------- bfd/coff-tic4x.c | 12 +++--- binutils/ChangeLog | 4 ++ binutils/objdump.c | 1 - 6 files changed, 124 insertions(+), 125 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d41d9e4..44ce846 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,13 @@ 2014-07-01 Alan Modra + * 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 + * elf64-ppc.c (ppc_stub_type): Add ppc_stub_global_entry. (struct ppc_link_hash_table): Increase size of stub_count array. (build_global_entry_stubs): Emit symbol on global entry stub. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 09182cf..9efc368 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -6226,9 +6226,6 @@ enum bfd_direction struct bfd { - /* A unique identifier of the BFD */ - unsigned int id; - /* The filename the application opened the BFD with. */ const char *filename; @@ -6251,17 +6248,17 @@ struct bfd /* File modified time, if mtime_set is TRUE. */ long mtime; - /* Reserved for an unimplemented file locking extension. */ - int ifd; + /* A unique identifier of the BFD */ + unsigned int id; /* 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. */ - enum bfd_direction direction; + ENUM_BITFIELD (bfd_direction) direction : 2; /* Format_specific flags. */ - flagword flags; + flagword flags : 17; /* 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 @@ -6320,26 +6317,23 @@ struct bfd struct. */ #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 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 be written using values for UIDs, GIDs, timestamps, etc. that will be consistent from run to run. */ -#define BFD_DETERMINISTIC_OUTPUT 0x4000 +#define BFD_DETERMINISTIC_OUTPUT 0x2000 /* Compress sections in this BFD. */ -#define BFD_COMPRESS 0x8000 +#define BFD_COMPRESS 0x4000 /* Decompress sections in this BFD. */ -#define BFD_DECOMPRESS 0x10000 +#define BFD_DECOMPRESS 0x8000 /* BFD is a dummy, for plugins. */ -#define BFD_PLUGIN 0x20000 +#define BFD_PLUGIN 0x10000 /* Flags bits to be saved in bfd_preserve_save. */ #define BFD_FLAGS_SAVED \ @@ -6350,6 +6344,42 @@ struct bfd (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ | 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 anything. I believe that this can become always an add of origin, with origin set to 0 for non archive files. */ @@ -6374,17 +6404,21 @@ struct bfd /* The number of sections. */ 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: The start address. */ bfd_vma start_address; - /* Used for input and output. */ - unsigned int symcount; - /* Symbol table for output BFD (with symcount entries). Also used by the linker to cache input BFD symbols. */ struct bfd_symbol **outsymbols; + /* Used for input and output. */ + unsigned int symcount; + /* Used for slurped dynamic symbol tables. */ unsigned int dynsymcount; @@ -6406,10 +6440,6 @@ struct bfd struct bfd_link_hash_table *hash; } 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. */ union { @@ -6460,42 +6490,6 @@ struct bfd struct objalloc *, but we use void * to avoid requiring the inclusion of objalloc.h. */ 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. */ diff --git a/bfd/bfd.c b/bfd/bfd.c index e19bcf7..8b60911 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -46,9 +46,6 @@ CODE_FRAGMENT . .struct bfd .{ -. {* A unique identifier of the BFD *} -. unsigned int id; -. . {* The filename the application opened the BFD with. *} . const char *filename; . @@ -71,17 +68,17 @@ CODE_FRAGMENT . {* File modified time, if mtime_set is TRUE. *} . long mtime; . -. {* Reserved for an unimplemented file locking extension. *} -. int ifd; +. {* A unique identifier of the BFD *} +. unsigned int id; . . {* 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. *} -. enum bfd_direction direction; +. ENUM_BITFIELD (bfd_direction) direction : 2; . . {* Format_specific flags. *} -. flagword flags; +. flagword flags : 17; . . {* 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 @@ -140,26 +137,23 @@ CODE_FRAGMENT . struct. *} .#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 . 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 . be written using values for UIDs, GIDs, timestamps, etc. that . will be consistent from run to run. *} -.#define BFD_DETERMINISTIC_OUTPUT 0x4000 +.#define BFD_DETERMINISTIC_OUTPUT 0x2000 . . {* Compress sections in this BFD. *} -.#define BFD_COMPRESS 0x8000 +.#define BFD_COMPRESS 0x4000 . . {* Decompress sections in this BFD. *} -.#define BFD_DECOMPRESS 0x10000 +.#define BFD_DECOMPRESS 0x8000 . . {* BFD is a dummy, for plugins. *} -.#define BFD_PLUGIN 0x20000 +.#define BFD_PLUGIN 0x10000 . . {* Flags bits to be saved in bfd_preserve_save. *} .#define BFD_FLAGS_SAVED \ @@ -170,6 +164,42 @@ CODE_FRAGMENT . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ . | 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 . anything. I believe that this can become always an add of . origin, with origin set to 0 for non archive files. *} @@ -194,17 +224,21 @@ CODE_FRAGMENT . {* The number of sections. *} . 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: . The start address. *} . bfd_vma start_address; . -. {* Used for input and output. *} -. unsigned int symcount; -. . {* Symbol table for output BFD (with symcount entries). . Also used by the linker to cache input BFD symbols. *} . struct bfd_symbol **outsymbols; . +. {* Used for input and output. *} +. unsigned int symcount; +. . {* Used for slurped dynamic symbol tables. *} . unsigned int dynsymcount; . @@ -226,10 +260,6 @@ CODE_FRAGMENT . struct bfd_link_hash_table *hash; . } 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. *} . union . { @@ -280,42 +310,6 @@ CODE_FRAGMENT . struct objalloc *, but we use void * to avoid requiring the inclusion . of objalloc.h. *} . 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. *} diff --git a/bfd/coff-tic4x.c b/bfd/coff-tic4x.c index 36a8901..1e7166f 100644 --- a/bfd/coff-tic4x.c +++ b/bfd/coff-tic4x.c @@ -261,30 +261,30 @@ tic4x_reloc_processing (arelent *relent, /* TI COFF v0, DOS tools (little-endian headers). */ 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); /* TI COFF v0, SPARC tools (big-endian headers). */ 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); /* TI COFF v1, DOS tools (little-endian headers). */ 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); /* TI COFF v1, SPARC tools (big-endian headers). */ 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); /* TI COFF v2, TI DOS tools output (little-endian headers). */ 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); /* TI COFF v2, TI SPARC tools output (big-endian headers). */ 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); diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 081c060..e81c97a 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2014-07-01 Alan Modra + + * objdump.c (dump_bfd_header): Don't print HAS_LOAD_PAGE. + 2014-06-26 Erik Akermann * strings.c: Add -w/--include-all-whitespace option to include any diff --git a/binutils/objdump.c b/binutils/objdump.c index 14f4122..5086a15 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -2629,7 +2629,6 @@ dump_bfd_header (bfd *abfd) PF (WP_TEXT, "WP_TEXT"); PF (D_PAGED, "D_PAGED"); PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE"); - PF (HAS_LOAD_PAGE, "HAS_LOAD_PAGE"); printf (_("\nstart address 0x")); bfd_printf_vma (abfd, abfd->start_address); printf ("\n"); -- 2.7.4