[PATCH] [NFC] Mark locally used symbols as static.

Yuri Gribov posted 1 patch 3 years ago
Failed in applying to current master (apply log)
There is a newer version of this series
disas/alpha.c                                 | 16 ++--
disas/m68k.c                                  | 78 ++++++++---------
disas/mips.c                                  | 14 ++--
disas/nios2.c                                 | 84 +++++++++----------
disas/ppc.c                                   | 26 +++---
disas/riscv.c                                 |  2 +-
pc-bios/optionrom/linuxboot_dma.c             |  4 +-
scripts/tracetool/format/c.py                 |  2 +-
target/hexagon/gen_dectree_import.c           |  2 +-
target/hexagon/opcodes.c                      |  2 +-
target/i386/cpu.c                             |  2 +-
target/s390x/cpu_models.c                     |  2 +-
.../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
.../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
.../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
.../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
.../xtensa-modules.c.inc                      |  2 +-
.../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
.../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
21 files changed, 125 insertions(+), 127 deletions(-)
[PATCH] [NFC] Mark locally used symbols as static.
Posted by Yuri Gribov 3 years ago
Hi all,

This patch makes locally used symbols static to enable more compiler
optimizations on them. Some of the symbols turned out to not be used
at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
they were ok to delete).

The symbols have been identified with a pet project of mine:
https://github.com/yugr/Localizer

From 07b4f05893b7037e68e5d7bdec5ba8e74e509999 Mon Sep 17 00:00:00 2001
From: Yury Gribov <tetra2005@gmail.com>
Date: Sat, 20 Mar 2021 23:39:15 +0300
Subject: [PATCH] [NFC] Mark locally used symbols as static.

Signed-off-by: Yury Gribov <tetra2005@gmail.com>
---
 disas/alpha.c                                 | 16 ++--
 disas/m68k.c                                  | 78 ++++++++---------
 disas/mips.c                                  | 14 ++--
 disas/nios2.c                                 | 84 +++++++++----------
 disas/ppc.c                                   | 26 +++---
 disas/riscv.c                                 |  2 +-
 pc-bios/optionrom/linuxboot_dma.c             |  4 +-
 scripts/tracetool/format/c.py                 |  2 +-
 target/hexagon/gen_dectree_import.c           |  2 +-
 target/hexagon/opcodes.c                      |  2 +-
 target/i386/cpu.c                             |  2 +-
 target/s390x/cpu_models.c                     |  2 +-
 .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
 .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
 target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
 .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
 .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
 target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
 .../xtensa-modules.c.inc                      |  2 +-
 .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
 .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
 21 files changed, 125 insertions(+), 127 deletions(-)

diff --git a/disas/alpha.c b/disas/alpha.c
index 3db90fa..361a4ed 100644
--- a/disas/alpha.c
+++ b/disas/alpha.c
@@ -56,8 +56,8 @@ struct alpha_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct alpha_opcode alpha_opcodes[];
-extern const unsigned alpha_num_opcodes;
+static const struct alpha_opcode alpha_opcodes[];
+static const unsigned alpha_num_opcodes;

 /* Values defined for the flags field of a struct alpha_opcode.  */

@@ -137,8 +137,8 @@ struct alpha_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the alpha_opcodes table.  */

-extern const struct alpha_operand alpha_operands[];
-extern const unsigned alpha_num_operands;
+static const struct alpha_operand alpha_operands[];
+static const unsigned alpha_num_operands;

 /* Values defined for the flags field of a struct alpha_operand.  */

@@ -293,7 +293,7 @@ static int extract_ev6hwjhint (unsigned, int *);
 
 /* The operands table  */

-const struct alpha_operand alpha_operands[] =
+static const struct alpha_operand alpha_operands[] =
 {
   /* The fields are bits, shift, insert, extract, flags */
   /* The zero index is used to indicate end-of-list */
@@ -424,7 +424,7 @@ const struct alpha_operand alpha_operands[] =
     insert_ev6hwjhint, extract_ev6hwjhint }
 };

-const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);

 /* The RB field when it is the same as the RA field in the same insn.
    This operand is marked fake.  The insertion function just copies
@@ -706,7 +706,7 @@ extract_ev6hwjhint(unsigned insn, int *invalid
ATTRIBUTE_UNUSED)
 		that were not assigned to a particular extension.
 */

-const struct alpha_opcode alpha_opcodes[] = {
+static const struct alpha_opcode alpha_opcodes[] = {
   { "halt",		SPCD(0x00,0x0000), BASE, ARG_NONE },
   { "draina",		SPCD(0x00,0x0002), BASE, ARG_NONE },
   { "bpt",		SPCD(0x00,0x0080), BASE, ARG_NONE },
@@ -1732,7 +1732,7 @@ const struct alpha_opcode alpha_opcodes[] = {
   { "bgt",		BRA(0x3F), BASE, ARG_BRA },
 };

-const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);

 /* OSF register names.  */

diff --git a/disas/m68k.c b/disas/m68k.c
index aefaecf..903d5cf 100644
--- a/disas/m68k.c
+++ b/disas/m68k.c
@@ -95,29 +95,29 @@ struct floatformat

 /* floatformats for IEEE single and double, big and little endian.  */

-extern const struct floatformat floatformat_ieee_single_big;
-extern const struct floatformat floatformat_ieee_single_little;
-extern const struct floatformat floatformat_ieee_double_big;
-extern const struct floatformat floatformat_ieee_double_little;
+static const struct floatformat floatformat_ieee_single_big;
+static const struct floatformat floatformat_ieee_single_little;
+static const struct floatformat floatformat_ieee_double_big;
+static const struct floatformat floatformat_ieee_double_little;

 /* floatformat for ARM IEEE double, little endian bytes and big endian words */

-extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
+static const struct floatformat floatformat_ieee_double_littlebyte_bigword;

 /* floatformats for various extendeds.  */

-extern const struct floatformat floatformat_i387_ext;
-extern const struct floatformat floatformat_m68881_ext;
-extern const struct floatformat floatformat_i960_ext;
-extern const struct floatformat floatformat_m88110_ext;
-extern const struct floatformat floatformat_m88110_harris_ext;
-extern const struct floatformat floatformat_arm_ext_big;
-extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
+static const struct floatformat floatformat_i387_ext;
+static const struct floatformat floatformat_m68881_ext;
+static const struct floatformat floatformat_i960_ext;
+static const struct floatformat floatformat_m88110_ext;
+static const struct floatformat floatformat_m88110_harris_ext;
+static const struct floatformat floatformat_arm_ext_big;
+static const struct floatformat floatformat_arm_ext_littlebyte_bigword;
 /* IA-64 Floating Point register spilt into memory.  */
-extern const struct floatformat floatformat_ia64_spill_big;
-extern const struct floatformat floatformat_ia64_spill_little;
-extern const struct floatformat floatformat_ia64_quad_big;
-extern const struct floatformat floatformat_ia64_quad_little;
+static const struct floatformat floatformat_ia64_spill_big;
+static const struct floatformat floatformat_ia64_spill_little;
+static const struct floatformat floatformat_ia64_quad_big;
+static const struct floatformat floatformat_ia64_quad_little;

 /* Convert from FMT to a double.
    FROM is the address of the extended float.
@@ -514,10 +514,10 @@ struct m68k_opcode_alias
    ]  first word, bit 10
 */

-extern const struct m68k_opcode m68k_opcodes[];
-extern const struct m68k_opcode_alias m68k_opcode_aliases[];
+static const struct m68k_opcode m68k_opcodes[];
+static const struct m68k_opcode_alias m68k_opcode_aliases[];

-extern const int m68k_numopcodes, m68k_numaliases;
+static const int m68k_numopcodes, m68k_numaliases;

 /* **** End of m68k-opcode.h */
 /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
@@ -2072,7 +2072,7 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
    be consecutive.  If they aren't, the assembler will bomb at
    runtime.  */

-const struct m68k_opcode m68k_opcodes[] =
+static const struct m68k_opcode m68k_opcodes[] =
 {
 {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
 {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
@@ -4212,7 +4212,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
 };

-const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
+static const int m68k_numopcodes = sizeof m68k_opcodes / sizeof
m68k_opcodes[0];

 /* These aliases used to be in the above table, each one duplicating
    all of the entries for its primary exactly.  This table was
@@ -4221,7 +4221,7 @@ const int m68k_numopcodes = sizeof m68k_opcodes
/ sizeof m68k_opcodes[0];
    aliases above that could be moved down here, except for very minor
    differences.  */

-const struct m68k_opcode_alias m68k_opcode_aliases[] =
+static const struct m68k_opcode_alias m68k_opcode_aliases[] =
 {
   { "add",	"addw", },
   { "adda",	"addaw", },
@@ -4465,7 +4465,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =

 };

-const int m68k_numaliases =
+static ATTRIBUTE_UNUSED const int m68k_numaliases =
   sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
 /* **** End of m68k-opc.c */
 /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
@@ -4523,28 +4523,28 @@ floatformat_always_valid (const struct
floatformat *fmt ATTRIBUTE_UNUSED,
 #define FLOATFORMAT_CHAR_BIT 8

 /* floatformats for IEEE single and double, big and little endian.  */
-const struct floatformat floatformat_ieee_single_big =
+static const struct floatformat floatformat_ieee_single_big =
 {
   floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_single_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_single_little =
 {
   floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_big =
+static const struct floatformat floatformat_ieee_double_big =
 {
   floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
   "floatformat_ieee_double_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_little =
 {
   floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4555,7 +4555,7 @@ const struct floatformat floatformat_ieee_double_little =
 /* floatformat for IEEE double, little endian byte order, with big endian word
    ordering, as on the ARM.  */

-const struct floatformat floatformat_ieee_double_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_littlebyte_bigword =
 {
   floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4586,14 +4586,14 @@ floatformat_i387_ext_is_valid (const struct
floatformat *fmt, const char *from)
     return 1;
 }

-const struct floatformat floatformat_i387_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i387_ext =
 {
   floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_i387_ext",
   floatformat_i387_ext_is_valid
 };
-const struct floatformat floatformat_m68881_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m68881_ext =
 {
   /* Note that the bits from 16 to 31 are unused.  */
   floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4601,7 +4601,7 @@ const struct floatformat floatformat_m68881_ext =
   "floatformat_m68881_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_i960_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i960_ext =
 {
   /* Note that the bits from 0 to 15 are unused.  */
   floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4609,14 +4609,14 @@ const struct floatformat floatformat_i960_ext =
   "floatformat_i960_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m88110_ext =
 {
   floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_m88110_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_harris_ext =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_m88110_harris_ext =
 {
   /* Harris uses raw format 128 bytes long, but the number is just an ieee
      double, and the last 64 bits are wasted. */
@@ -4625,7 +4625,7 @@ const struct floatformat floatformat_m88110_harris_ext =
   "floatformat_m88110_ext_harris",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_arm_ext_big =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4633,7 +4633,7 @@ const struct floatformat floatformat_arm_ext_big =
   "floatformat_arm_ext_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4641,28 +4641,28 @@ const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
   "floatformat_arm_ext_littlebyte_bigword",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_spill_big =
 {
   floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ia64_spill_little =
 {
   floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_big =
 {
   floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
   "floatformat_ia64_quad_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_little =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_little =
 {
   floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
diff --git a/disas/mips.c b/disas/mips.c
index b9a5204..b43700b 100644
--- a/disas/mips.c
+++ b/disas/mips.c
@@ -931,10 +931,9 @@ enum
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-extern const struct mips_opcode mips_builtin_opcodes[];
-extern const int bfd_mips_num_builtin_opcodes;
-extern struct mips_opcode *mips_opcodes;
-extern int bfd_mips_num_opcodes;
+static const struct mips_opcode mips_builtin_opcodes[];
+static struct mips_opcode *mips_opcodes;
+static int bfd_mips_num_opcodes;
 #define NUMOPCODES bfd_mips_num_opcodes

 
@@ -1259,7 +1258,7 @@ extern const int bfd_mips16_num_opcodes;
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-const struct mips_opcode mips_builtin_opcodes[] =
+static const struct mips_opcode mips_builtin_opcodes[] =
 {
 /* These instructions appear first so that the disassembler will find
    them first.  The assemblers uses a hash table based on the
@@ -3509,13 +3508,12 @@ const struct mips_opcode mips_builtin_opcodes[] =

 #define MIPS_NUM_OPCODES \
 	((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
-const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;

 /* const removed from the following to allow for dynamic extensions to the
  * built-in instruction set. */
-struct mips_opcode *mips_opcodes =
+static struct mips_opcode *mips_opcodes =
   (struct mips_opcode *) mips_builtin_opcodes;
-int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
+static int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
 #undef MIPS_NUM_OPCODES

 /* Mips instructions are at maximum this many bytes long.  */
diff --git a/disas/nios2.c b/disas/nios2.c
index c3e8214..089ae6e 100644
--- a/disas/nios2.c
+++ b/disas/nios2.c
@@ -1720,38 +1720,38 @@ struct nios2_reg


 /* These are the data structures used to hold the instruction information.  */
-extern const struct nios2_opcode nios2_r1_opcodes[];
-extern const int nios2_num_r1_opcodes;
-extern const struct nios2_opcode nios2_r2_opcodes[];
-extern const int nios2_num_r2_opcodes;
-extern struct nios2_opcode *nios2_opcodes;
-extern int nios2_num_opcodes;
+static const struct nios2_opcode nios2_r1_opcodes[];
+static const int nios2_num_r1_opcodes;
+static const struct nios2_opcode nios2_r2_opcodes[];
+static const int nios2_num_r2_opcodes;
+static struct nios2_opcode *nios2_opcodes;
+static int nios2_num_opcodes;

 /* These are the data structures used to hold the register information.  */
-extern const struct nios2_reg nios2_builtin_regs[];
-extern struct nios2_reg *nios2_regs;
-extern const int nios2_num_builtin_regs;
-extern int nios2_num_regs;
+static const struct nios2_reg nios2_builtin_regs[];
+static struct nios2_reg *nios2_regs;
+static const int nios2_num_builtin_regs;
+static int nios2_num_regs;

 /* Return the opcode descriptor for a single instruction.  */
-extern const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long, unsigned long);

 /* Lookup tables for R2 immediate decodings.  */
-extern unsigned int nios2_r2_asi_n_mappings[];
-extern const int nios2_num_r2_asi_n_mappings;
-extern unsigned int nios2_r2_shi_n_mappings[];
-extern const int nios2_num_r2_shi_n_mappings;
-extern unsigned int nios2_r2_andi_n_mappings[];
-extern const int nios2_num_r2_andi_n_mappings;
+static unsigned int nios2_r2_asi_n_mappings[];
+static const int nios2_num_r2_asi_n_mappings;
+static unsigned int nios2_r2_shi_n_mappings[];
+static const int nios2_num_r2_shi_n_mappings;
+static unsigned int nios2_r2_andi_n_mappings[];
+static const int nios2_num_r2_andi_n_mappings;

 /* Lookup table for 3-bit register decodings.  */
-extern int nios2_r2_reg3_mappings[];
-extern const int nios2_num_r2_reg3_mappings;
+static int nios2_r2_reg3_mappings[];
+static const int nios2_num_r2_reg3_mappings;

 /* Lookup table for REG_RANGE value list decodings.  */
-extern unsigned long nios2_r2_reg_range_mappings[];
-extern const int nios2_num_r2_reg_range_mappings;
+static unsigned long nios2_r2_reg_range_mappings[];
+static const int nios2_num_r2_reg_range_mappings;

 #endif /* _NIOS2_H */

@@ -1760,7 +1760,7 @@ extern const int nios2_num_r2_reg_range_mappings;
 */
 /* Register string table */

-const struct nios2_reg nios2_builtin_regs[] = {
+static const struct nios2_reg nios2_builtin_regs[] = {
   /* Standard register names.  */
   {"zero", 0, REG_NORMAL},
   {"at", 1, REG_NORMAL},			/* assembler temporary */
@@ -1896,17 +1896,17 @@ const struct nios2_reg nios2_builtin_regs[] = {

 #define NIOS2_NUM_REGS \
        ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0])))
-const int nios2_num_builtin_regs = NIOS2_NUM_REGS;
+static ATTRIBUTE_UNUSED const int nios2_num_builtin_regs = NIOS2_NUM_REGS;

 /* This is not const in order to allow for dynamic extensions to the
    built-in instruction set.  */
-struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
-int nios2_num_regs = NIOS2_NUM_REGS;
+static struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
+static int nios2_num_regs = NIOS2_NUM_REGS;
 #undef NIOS2_NUM_REGS

 /* This is the opcode table used by the Nios II GNU as, disassembler
    and GDB.  */
-const struct nios2_opcode nios2_r1_opcodes[] =
+static const struct nios2_opcode nios2_r1_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2134,10 +2134,10 @@ const struct nios2_opcode nios2_r1_opcodes[] =

 #define NIOS2_NUM_R1_OPCODES \
        ((sizeof nios2_r1_opcodes) / (sizeof (nios2_r1_opcodes[0])))
-const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;
+static const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;


-const struct nios2_opcode nios2_r2_opcodes[] =
+static const struct nios2_opcode nios2_r2_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2474,37 +2474,37 @@ const struct nios2_opcode nios2_r2_opcodes[] =

 #define NIOS2_NUM_R2_OPCODES \
        ((sizeof nios2_r2_opcodes) / (sizeof (nios2_r2_opcodes[0])))
-const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;
+static const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;

 /* Default to using the R1 instruction tables.  */
-struct nios2_opcode *nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes;
-int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
+static ATTRIBUTE_UNUSED struct nios2_opcode *nios2_opcodes = (struct
nios2_opcode *) nios2_r1_opcodes;
+static ATTRIBUTE_UNUSED int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
 #undef NIOS2_NUM_R1_OPCODES
 #undef NIOS2_NUM_R2_OPCODES

 /* Decodings for R2 asi.n (addi.n/subi.n) immediate values.  */
-unsigned int nios2_r2_asi_n_mappings[] =
+static unsigned int nios2_r2_asi_n_mappings[] =
   {1, 2, 4, 8, 16, 32, 64, 128};
-const int nios2_num_r2_asi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_asi_n_mappings = 8;

 /* Decodings for R2 shi.n (slli.n/srli.n) immediate values.  */
-unsigned int nios2_r2_shi_n_mappings[] =
+static unsigned int nios2_r2_shi_n_mappings[] =
   {1, 2, 3, 8, 12, 16, 24, 31};
-const int nios2_num_r2_shi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_shi_n_mappings = 8;

 /* Decodings for R2 andi.n immediate values.  */
-unsigned int nios2_r2_andi_n_mappings[] =
+static unsigned int nios2_r2_andi_n_mappings[] =
   {1, 2, 3, 4, 8, 0xf, 0x10, 0x1f,
    0x20, 0x3f, 0x7f, 0x80, 0xff, 0x7ff, 0xff00, 0xffff};
-const int nios2_num_r2_andi_n_mappings = 16;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_andi_n_mappings = 16;

 /* Decodings for R2 3-bit register fields.  */
-int nios2_r2_reg3_mappings[] =
+static int nios2_r2_reg3_mappings[] =
   {16, 17, 2, 3, 4, 5, 6, 7};
-const int nios2_num_r2_reg3_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg3_mappings = 8;

 /* Decodings for R2 push.n/pop.n REG_RANGE value list.  */
-unsigned long nios2_r2_reg_range_mappings[] = {
+static unsigned long nios2_r2_reg_range_mappings[] = {
   0x00010000,
   0x00030000,
   0x00070000,
@@ -2514,7 +2514,7 @@ unsigned long nios2_r2_reg_range_mappings[] = {
   0x007f0000,
   0x00ff0000
 };
-const int nios2_num_r2_reg_range_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg_range_mappings = 8;

 /*#include "sysdep.h"
 #include "dis-asm.h"
@@ -2668,7 +2668,7 @@ nios2_init_opcode_hash (nios2_disassembler_state *state)

 /* Return a pointer to an nios2_opcode struct for a given instruction
    word OPCODE for bfd machine MACH, or NULL if there is an error.  */
-const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long opcode, unsigned long mach)
 {
   nios2_opcode_hash *entry;
diff --git a/disas/ppc.c b/disas/ppc.c
index 02be878..30ca8ac 100644
--- a/disas/ppc.c
+++ b/disas/ppc.c
@@ -74,8 +74,8 @@ struct powerpc_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct powerpc_opcode powerpc_opcodes[];
-extern const int powerpc_num_opcodes;
+static const struct powerpc_opcode powerpc_opcodes[];
+static const int powerpc_num_opcodes;

 /* Values defined for the flags field of a struct powerpc_opcode.  */

@@ -225,8 +225,8 @@ struct powerpc_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the powerpc_opcodes table.  */

-extern const struct powerpc_operand powerpc_operands[];
-extern const unsigned int num_powerpc_operands;
+static const struct powerpc_operand powerpc_operands[];
+static const unsigned int num_powerpc_operands;

 /* Values defined for the flags field of a struct powerpc_operand.  */

@@ -341,8 +341,8 @@ struct powerpc_macro
   const char *format;
 };

-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
+static const struct powerpc_macro powerpc_macros[];
+static const int powerpc_num_macros;

 /* ppc-opc.c -- PowerPC opcode list
    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
@@ -425,7 +425,7 @@ static long extract_tbr (unsigned long, int, int *);
    omit the parens, since the macros are never used in a context where
    the addition will be ambiguous.  */

-const struct powerpc_operand powerpc_operands[] =
+static const struct powerpc_operand powerpc_operands[] =
 {
   /* The zero index is used to indicate the end of the list of
      operands.  */
@@ -893,8 +893,8 @@ const struct powerpc_operand powerpc_operands[] =
   { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
 };

-const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
-					   / sizeof (powerpc_operands[0]));
+static ATTRIBUTE_UNUSED const unsigned int num_powerpc_operands =
+  sizeof (powerpc_operands) / sizeof (powerpc_operands[0]);

 /* The functions used to insert and extract complicated operands.  */

@@ -2011,7 +2011,7 @@ extract_tbr (unsigned long insn,
    specific instructions before more general instructions.  It is also
    sorted by major opcode.  */

-const struct powerpc_opcode powerpc_opcodes[] = {
+static const struct powerpc_opcode powerpc_opcodes[] = {
 { "attn",    X(0,256), X_MASK,		POWER4,		{ 0 } },
 { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,	PPC64,		{ RA, SI } },
 { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,	PPC64,		{ RA, SI } },
@@ -5036,7 +5036,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {

 };

-const int powerpc_num_opcodes =
+static const int powerpc_num_opcodes =
   sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
 
 /* The macro table.  This is only used by the assembler.  */
@@ -5051,7 +5051,7 @@ const int powerpc_num_opcodes =
    the underlying instructions don't support extracting 0 bits but do
    support extracting the whole word (32 bits in this case).  */

-const struct powerpc_macro powerpc_macros[] = {
+static const struct powerpc_macro powerpc_macros[] = {
 { "extldi",  4,   PPC64,	"rldicr %0,%1,%3,(%2)-1" },
 { "extldi.", 4,   PPC64,	"rldicr. %0,%1,%3,(%2)-1" },
 { "extrdi",  4,   PPC64,	"rldicl %0,%1,(%2)+(%3),64-(%2)" },
@@ -5093,7 +5093,7 @@ const struct powerpc_macro powerpc_macros[] = {
 { "clrlslwi.",4,  PPCCOM,	"rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
 };

-const int powerpc_num_macros =
+static ATTRIBUTE_UNUSED const int powerpc_num_macros =
   sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);


diff --git a/disas/riscv.c b/disas/riscv.c
index 278d9be..0d124d8 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -789,7 +789,7 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {

 /* instruction metadata */

-const rv_opcode_data opcode_data[] = {
+static const rv_opcode_data opcode_data[] = {
     { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
     { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
     { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },
diff --git a/pc-bios/optionrom/linuxboot_dma.c
b/pc-bios/optionrom/linuxboot_dma.c
index cbcf667..a3d5cf7 100644
--- a/pc-bios/optionrom/linuxboot_dma.c
+++ b/pc-bios/optionrom/linuxboot_dma.c
@@ -132,9 +132,9 @@ static uint32_t get_e801_addr(void)
 }

 /* Force the asm name without leading underscore, even on Win32. */
-extern void load_kernel(void) asm("load_kernel");
+static void load_kernel(void) asm("load_kernel");

-void load_kernel(void)
+static __attribute__((used)) void load_kernel(void)
 {
     void *setup_addr;
     void *initrd_addr;
diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
index c390c18..7e89ba3 100644
--- a/scripts/tracetool/format/c.py
+++ b/scripts/tracetool/format/c.py
@@ -49,7 +49,7 @@ def generate(events, backend, group):
             sstate = "TRACE_%s_ENABLED" % e.name.upper(),
             dstate = e.api(e.QEMU_DSTATE))

-    out('TraceEvent *%(group)s_trace_events[] = {',
+    out('static TraceEvent *%(group)s_trace_events[] = {',
         group = group.lower())

     for e in events:
diff --git a/target/hexagon/gen_dectree_import.c
b/target/hexagon/gen_dectree_import.c
index 5b7ecfc..20caee5 100644
--- a/target/hexagon/gen_dectree_import.c
+++ b/target/hexagon/gen_dectree_import.c
@@ -41,7 +41,7 @@ const char * const opcode_names[] = {
  *         "Add 32-bit registers",
  *         { RdV=RsV+RtV;})
  */
-const char * const opcode_syntax[XX_LAST_OPCODE] = {
+static const char * const opcode_syntax[XX_LAST_OPCODE] = {
 #define Q6INSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
    [TAG] = BEH,
 #define EXTINSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 35d790c..586e70d 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -65,7 +65,7 @@ const char * const opcode_wregs[] = {
 #undef IMMINFO
 };

-const char * const opcode_short_semantics[] = {
+static const char * const opcode_short_semantics[] = {
 #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
 #include "shortcode_generated.h.inc"
 #undef DEF_SHORTCODE
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index ae9fd9f..58b8abf 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -78,7 +78,7 @@ struct CPUID2CacheDescriptorInfo {
  * Known CPUID 2 cache descriptors.
  * From Intel SDM Volume 2A, CPUID instruction
  */
-struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
+static struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
     [0x06] = { .level = 1, .type = INSTRUCTION_CACHE, .size =   8 * KiB,
                .associativity = 4,  .line_size = 32, },
     [0x08] = { .level = 1, .type = INSTRUCTION_CACHE, .size =  16 * KiB,
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 050dcf2..56c5422 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -97,7 +97,7 @@ static const S390FeatInit qemu_max_cpu_feat_init = {
S390_FEAT_LIST_QEMU_MAX };
 static S390FeatBitmap qemu_max_cpu_feat;

 /* features part of a base model but not relevant for finding a base model */
-S390FeatBitmap ignored_base_feat;
+static S390FeatBitmap ignored_base_feat;

 void s390_cpudef_featoff(uint8_t gen, uint8_t ec_ga, S390Feat feat)
 {
diff --git a/target/xtensa/core-dc232b/xtensa-modules.c.inc
b/target/xtensa/core-dc232b/xtensa-modules.c.inc
index 164df3b..8bef653 100644
--- a/target/xtensa/core-dc232b/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc232b/xtensa-modules.c.inc
@@ -14060,7 +14060,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dc233c/xtensa-modules.c.inc
b/target/xtensa/core-dc233c/xtensa-modules.c.inc
index 0f32f08..24a63a4 100644
--- a/target/xtensa/core-dc233c/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc233c/xtensa-modules.c.inc
@@ -15187,7 +15187,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de212/xtensa-modules.c.inc
b/target/xtensa/core-de212/xtensa-modules.c.inc
index 480c68d..19f0d7f 100644
--- a/target/xtensa/core-de212/xtensa-modules.c.inc
+++ b/target/xtensa/core-de212/xtensa-modules.c.inc
@@ -14525,7 +14525,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
index 129c023..e35ca06 100644
--- a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
+++ b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
@@ -20740,7 +20740,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
index 28ea3d7..4adc52f 100644
--- a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
+++ b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
@@ -171888,7 +171888,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   10, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-fsf/xtensa-modules.c.inc
b/target/xtensa/core-fsf/xtensa-modules.c.inc
index c32683f..7e7268a 100644
--- a/target/xtensa/core-fsf/xtensa-modules.c.inc
+++ b/target/xtensa/core-fsf/xtensa-modules.c.inc
@@ -9808,7 +9808,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
index 7e87d21..10d56e0 100644
--- a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
+++ b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
@@ -11348,7 +11348,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
index bc7cf44..9c0c78e 100644
--- a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
@@ -45099,7 +45099,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
index 2856114..863fcd5 100644
--- a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
@@ -36369,7 +36369,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
-- 
2.17.1

Re: [PATCH] [NFC] Mark locally used symbols as static.
Posted by Max Filippov 3 years ago
On Mon, Mar 22, 2021 at 12:55 PM Yuri Gribov <tetra2005@gmail.com> wrote:
>
> Hi all,
>
> This patch makes locally used symbols static to enable more compiler
> optimizations on them. Some of the symbols turned out to not be used
> at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
> they were ok to delete).
>
> The symbols have been identified with a pet project of mine:
> https://github.com/yugr/Localizer
>
> From 07b4f05893b7037e68e5d7bdec5ba8e74e509999 Mon Sep 17 00:00:00 2001
> From: Yury Gribov <tetra2005@gmail.com>
> Date: Sat, 20 Mar 2021 23:39:15 +0300
> Subject: [PATCH] [NFC] Mark locally used symbols as static.
>
> Signed-off-by: Yury Gribov <tetra2005@gmail.com>
> ---
>  disas/alpha.c                                 | 16 ++--
>  disas/m68k.c                                  | 78 ++++++++---------
>  disas/mips.c                                  | 14 ++--
>  disas/nios2.c                                 | 84 +++++++++----------
>  disas/ppc.c                                   | 26 +++---
>  disas/riscv.c                                 |  2 +-
>  pc-bios/optionrom/linuxboot_dma.c             |  4 +-
>  scripts/tracetool/format/c.py                 |  2 +-
>  target/hexagon/gen_dectree_import.c           |  2 +-
>  target/hexagon/opcodes.c                      |  2 +-
>  target/i386/cpu.c                             |  2 +-
>  target/s390x/cpu_models.c                     |  2 +-
>  .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
>  .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
>  target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
>  .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
>  .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
>  target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
>  .../xtensa-modules.c.inc                      |  2 +-
>  .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
>  .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
>  21 files changed, 125 insertions(+), 127 deletions(-)

For the xtensa part:
Acked-by: Max Filippov <jcmvbkbc@gmail.com>

Changed files are auto-generated, I'll add a rule to the import
script (target/xtensa/import_core.sh) to do this transformation.
-- 
Thanks.
-- Max

Re: [PATCH] [NFC] Mark locally used symbols as static.
Posted by David Gibson 3 years ago
On Mon, Mar 22, 2021 at 10:55:42PM +0300, Yuri Gribov wrote:
> Hi all,
> 
> This patch makes locally used symbols static to enable more compiler
> optimizations on them. Some of the symbols turned out to not be used
> at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
> they were ok to delete).
> 
> The symbols have been identified with a pet project of mine:
> https://github.com/yugr/Localizer
> 
> >From 07b4f05893b7037e68e5d7bdec5ba8e74e509999 Mon Sep 17 00:00:00 2001
> From: Yury Gribov <tetra2005@gmail.com>
> Date: Sat, 20 Mar 2021 23:39:15 +0300
> Subject: [PATCH] [NFC] Mark locally used symbols as static.
> 
> Signed-off-by: Yury Gribov <tetra2005@gmail.com>

ppc parts
Acked-by: David Gibson <david@gibson.dropbear.id.au>

> ---
>  disas/alpha.c                                 | 16 ++--
>  disas/m68k.c                                  | 78 ++++++++---------
>  disas/mips.c                                  | 14 ++--
>  disas/nios2.c                                 | 84 +++++++++----------
>  disas/ppc.c                                   | 26 +++---
>  disas/riscv.c                                 |  2 +-
>  pc-bios/optionrom/linuxboot_dma.c             |  4 +-
>  scripts/tracetool/format/c.py                 |  2 +-
>  target/hexagon/gen_dectree_import.c           |  2 +-
>  target/hexagon/opcodes.c                      |  2 +-
>  target/i386/cpu.c                             |  2 +-
>  target/s390x/cpu_models.c                     |  2 +-
>  .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
>  .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
>  target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
>  .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
>  .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
>  target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
>  .../xtensa-modules.c.inc                      |  2 +-
>  .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
>  .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
>  21 files changed, 125 insertions(+), 127 deletions(-)
> 
> diff --git a/disas/alpha.c b/disas/alpha.c
> index 3db90fa..361a4ed 100644
> --- a/disas/alpha.c
> +++ b/disas/alpha.c
> @@ -56,8 +56,8 @@ struct alpha_opcode
>  /* The table itself is sorted by major opcode number, and is otherwise
>     in the order in which the disassembler should consider
>     instructions.  */
> -extern const struct alpha_opcode alpha_opcodes[];
> -extern const unsigned alpha_num_opcodes;
> +static const struct alpha_opcode alpha_opcodes[];
> +static const unsigned alpha_num_opcodes;
> 
>  /* Values defined for the flags field of a struct alpha_opcode.  */
> 
> @@ -137,8 +137,8 @@ struct alpha_operand
>  /* Elements in the table are retrieved by indexing with values from
>     the operands field of the alpha_opcodes table.  */
> 
> -extern const struct alpha_operand alpha_operands[];
> -extern const unsigned alpha_num_operands;
> +static const struct alpha_operand alpha_operands[];
> +static const unsigned alpha_num_operands;
> 
>  /* Values defined for the flags field of a struct alpha_operand.  */
> 
> @@ -293,7 +293,7 @@ static int extract_ev6hwjhint (unsigned, int *);
> 
> -const struct alpha_operand alpha_operands[] =
> +static const struct alpha_operand alpha_operands[] =
>  {
>    /* The fields are bits, shift, insert, extract, flags */
>    /* The zero index is used to indicate end-of-list */
> @@ -424,7 +424,7 @@ const struct alpha_operand alpha_operands[] =
>      insert_ev6hwjhint, extract_ev6hwjhint }
>  };
> 
> -const unsigned alpha_num_operands =
> sizeof(alpha_operands)/sizeof(*alpha_operands);
> +static ATTRIBUTE_UNUSED const unsigned alpha_num_operands =
> sizeof(alpha_operands)/sizeof(*alpha_operands);
> 
>  /* The RB field when it is the same as the RA field in the same insn.
>     This operand is marked fake.  The insertion function just copies
> @@ -706,7 +706,7 @@ extract_ev6hwjhint(unsigned insn, int *invalid
> ATTRIBUTE_UNUSED)
>  		that were not assigned to a particular extension.
>  */
> 
> -const struct alpha_opcode alpha_opcodes[] = {
> +static const struct alpha_opcode alpha_opcodes[] = {
>    { "halt",		SPCD(0x00,0x0000), BASE, ARG_NONE },
>    { "draina",		SPCD(0x00,0x0002), BASE, ARG_NONE },
>    { "bpt",		SPCD(0x00,0x0080), BASE, ARG_NONE },
> @@ -1732,7 +1732,7 @@ const struct alpha_opcode alpha_opcodes[] = {
>    { "bgt",		BRA(0x3F), BASE, ARG_BRA },
>  };
> 
> -const unsigned alpha_num_opcodes =
> sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
> +static ATTRIBUTE_UNUSED const unsigned alpha_num_opcodes =
> sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
> 
>  /* OSF register names.  */
> 
> diff --git a/disas/m68k.c b/disas/m68k.c
> index aefaecf..903d5cf 100644
> --- a/disas/m68k.c
> +++ b/disas/m68k.c
> @@ -95,29 +95,29 @@ struct floatformat
> 
>  /* floatformats for IEEE single and double, big and little endian.  */
> 
> -extern const struct floatformat floatformat_ieee_single_big;
> -extern const struct floatformat floatformat_ieee_single_little;
> -extern const struct floatformat floatformat_ieee_double_big;
> -extern const struct floatformat floatformat_ieee_double_little;
> +static const struct floatformat floatformat_ieee_single_big;
> +static const struct floatformat floatformat_ieee_single_little;
> +static const struct floatformat floatformat_ieee_double_big;
> +static const struct floatformat floatformat_ieee_double_little;
> 
>  /* floatformat for ARM IEEE double, little endian bytes and big endian words */
> 
> -extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
> +static const struct floatformat floatformat_ieee_double_littlebyte_bigword;
> 
>  /* floatformats for various extendeds.  */
> 
> -extern const struct floatformat floatformat_i387_ext;
> -extern const struct floatformat floatformat_m68881_ext;
> -extern const struct floatformat floatformat_i960_ext;
> -extern const struct floatformat floatformat_m88110_ext;
> -extern const struct floatformat floatformat_m88110_harris_ext;
> -extern const struct floatformat floatformat_arm_ext_big;
> -extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
> +static const struct floatformat floatformat_i387_ext;
> +static const struct floatformat floatformat_m68881_ext;
> +static const struct floatformat floatformat_i960_ext;
> +static const struct floatformat floatformat_m88110_ext;
> +static const struct floatformat floatformat_m88110_harris_ext;
> +static const struct floatformat floatformat_arm_ext_big;
> +static const struct floatformat floatformat_arm_ext_littlebyte_bigword;
>  /* IA-64 Floating Point register spilt into memory.  */
> -extern const struct floatformat floatformat_ia64_spill_big;
> -extern const struct floatformat floatformat_ia64_spill_little;
> -extern const struct floatformat floatformat_ia64_quad_big;
> -extern const struct floatformat floatformat_ia64_quad_little;
> +static const struct floatformat floatformat_ia64_spill_big;
> +static const struct floatformat floatformat_ia64_spill_little;
> +static const struct floatformat floatformat_ia64_quad_big;
> +static const struct floatformat floatformat_ia64_quad_little;
> 
>  /* Convert from FMT to a double.
>     FROM is the address of the extended float.
> @@ -514,10 +514,10 @@ struct m68k_opcode_alias
>     ]  first word, bit 10
>  */
> 
> -extern const struct m68k_opcode m68k_opcodes[];
> -extern const struct m68k_opcode_alias m68k_opcode_aliases[];
> +static const struct m68k_opcode m68k_opcodes[];
> +static const struct m68k_opcode_alias m68k_opcode_aliases[];
> 
> -extern const int m68k_numopcodes, m68k_numaliases;
> +static const int m68k_numopcodes, m68k_numaliases;
> 
>  /* **** End of m68k-opcode.h */
>  /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
> @@ -2072,7 +2072,7 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
>     be consecutive.  If they aren't, the assembler will bomb at
>     runtime.  */
> 
> -const struct m68k_opcode m68k_opcodes[] =
> +static const struct m68k_opcode m68k_opcodes[] =
>  {
>  {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
>  {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
> @@ -4212,7 +4212,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
>  {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
>  };
> 
> -const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
> +static const int m68k_numopcodes = sizeof m68k_opcodes / sizeof
> m68k_opcodes[0];
> 
>  /* These aliases used to be in the above table, each one duplicating
>     all of the entries for its primary exactly.  This table was
> @@ -4221,7 +4221,7 @@ const int m68k_numopcodes = sizeof m68k_opcodes
> / sizeof m68k_opcodes[0];
>     aliases above that could be moved down here, except for very minor
>     differences.  */
> 
> -const struct m68k_opcode_alias m68k_opcode_aliases[] =
> +static const struct m68k_opcode_alias m68k_opcode_aliases[] =
>  {
>    { "add",	"addw", },
>    { "adda",	"addaw", },
> @@ -4465,7 +4465,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
> 
>  };
> 
> -const int m68k_numaliases =
> +static ATTRIBUTE_UNUSED const int m68k_numaliases =
>    sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
>  /* **** End of m68k-opc.c */
>  /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
> @@ -4523,28 +4523,28 @@ floatformat_always_valid (const struct
> floatformat *fmt ATTRIBUTE_UNUSED,
>  #define FLOATFORMAT_CHAR_BIT 8
> 
>  /* floatformats for IEEE single and double, big and little endian.  */
> -const struct floatformat floatformat_ieee_single_big =
> +static const struct floatformat floatformat_ieee_single_big =
>  {
>    floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
>    floatformat_intbit_no,
>    "floatformat_ieee_single_big",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ieee_single_little =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_ieee_single_little =
>  {
>    floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
>    floatformat_intbit_no,
>    "floatformat_ieee_single_little",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ieee_double_big =
> +static const struct floatformat floatformat_ieee_double_big =
>  {
>    floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
>    floatformat_intbit_no,
>    "floatformat_ieee_double_big",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ieee_double_little =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_ieee_double_little =
>  {
>    floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
>    floatformat_intbit_no,
> @@ -4555,7 +4555,7 @@ const struct floatformat floatformat_ieee_double_little =
>  /* floatformat for IEEE double, little endian byte order, with big endian word
>     ordering, as on the ARM.  */
> 
> -const struct floatformat floatformat_ieee_double_littlebyte_bigword =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_ieee_double_littlebyte_bigword =
>  {
>    floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
>    floatformat_intbit_no,
> @@ -4586,14 +4586,14 @@ floatformat_i387_ext_is_valid (const struct
> floatformat *fmt, const char *from)
>      return 1;
>  }
> 
> -const struct floatformat floatformat_i387_ext =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_i387_ext =
>  {
>    floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
>    floatformat_intbit_yes,
>    "floatformat_i387_ext",
>    floatformat_i387_ext_is_valid
>  };
> -const struct floatformat floatformat_m68881_ext =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_m68881_ext =
>  {
>    /* Note that the bits from 16 to 31 are unused.  */
>    floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
> @@ -4601,7 +4601,7 @@ const struct floatformat floatformat_m68881_ext =
>    "floatformat_m68881_ext",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_i960_ext =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_i960_ext =
>  {
>    /* Note that the bits from 0 to 15 are unused.  */
>    floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
> @@ -4609,14 +4609,14 @@ const struct floatformat floatformat_i960_ext =
>    "floatformat_i960_ext",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_m88110_ext =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_m88110_ext =
>  {
>    floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
>    floatformat_intbit_yes,
>    "floatformat_m88110_ext",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_m88110_harris_ext =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_m88110_harris_ext =
>  {
>    /* Harris uses raw format 128 bytes long, but the number is just an ieee
>       double, and the last 64 bits are wasted. */
> @@ -4625,7 +4625,7 @@ const struct floatformat floatformat_m88110_harris_ext =
>    "floatformat_m88110_ext_harris",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_arm_ext_big =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_arm_ext_big =
>  {
>    /* Bits 1 to 16 are unused.  */
>    floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
> @@ -4633,7 +4633,7 @@ const struct floatformat floatformat_arm_ext_big =
>    "floatformat_arm_ext_big",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_arm_ext_littlebyte_bigword =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_arm_ext_littlebyte_bigword =
>  {
>    /* Bits 1 to 16 are unused.  */
>    floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
> @@ -4641,28 +4641,28 @@ const struct floatformat
> floatformat_arm_ext_littlebyte_bigword =
>    "floatformat_arm_ext_littlebyte_bigword",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ia64_spill_big =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_spill_big =
>  {
>    floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
>    floatformat_intbit_yes,
>    "floatformat_ia64_spill_big",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ia64_spill_little =
> +static ATTRIBUTE_UNUSED const struct floatformat
> floatformat_ia64_spill_little =
>  {
>    floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
>    floatformat_intbit_yes,
>    "floatformat_ia64_spill_little",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ia64_quad_big =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_big =
>  {
>    floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
>    floatformat_intbit_no,
>    "floatformat_ia64_quad_big",
>    floatformat_always_valid
>  };
> -const struct floatformat floatformat_ia64_quad_little =
> +static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_little =
>  {
>    floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
>    floatformat_intbit_no,
> diff --git a/disas/mips.c b/disas/mips.c
> index b9a5204..b43700b 100644
> --- a/disas/mips.c
> +++ b/disas/mips.c
> @@ -931,10 +931,9 @@ enum
>     Many instructions are short hand for other instructions (i.e., The
>     jal <register> instruction is short for jalr <register>).  */
> 
> -extern const struct mips_opcode mips_builtin_opcodes[];
> -extern const int bfd_mips_num_builtin_opcodes;
> -extern struct mips_opcode *mips_opcodes;
> -extern int bfd_mips_num_opcodes;
> +static const struct mips_opcode mips_builtin_opcodes[];
> +static struct mips_opcode *mips_opcodes;
> +static int bfd_mips_num_opcodes;
>  #define NUMOPCODES bfd_mips_num_opcodes
> 
>  
> @@ -1259,7 +1258,7 @@ extern const int bfd_mips16_num_opcodes;
>     Many instructions are short hand for other instructions (i.e., The
>     jal <register> instruction is short for jalr <register>).  */
> 
> -const struct mips_opcode mips_builtin_opcodes[] =
> +static const struct mips_opcode mips_builtin_opcodes[] =
>  {
>  /* These instructions appear first so that the disassembler will find
>     them first.  The assemblers uses a hash table based on the
> @@ -3509,13 +3508,12 @@ const struct mips_opcode mips_builtin_opcodes[] =
> 
>  #define MIPS_NUM_OPCODES \
>  	((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
> -const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;
> 
>  /* const removed from the following to allow for dynamic extensions to the
>   * built-in instruction set. */
> -struct mips_opcode *mips_opcodes =
> +static struct mips_opcode *mips_opcodes =
>    (struct mips_opcode *) mips_builtin_opcodes;
> -int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
> +static int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
>  #undef MIPS_NUM_OPCODES
> 
>  /* Mips instructions are at maximum this many bytes long.  */
> diff --git a/disas/nios2.c b/disas/nios2.c
> index c3e8214..089ae6e 100644
> --- a/disas/nios2.c
> +++ b/disas/nios2.c
> @@ -1720,38 +1720,38 @@ struct nios2_reg
> 
> 
>  /* These are the data structures used to hold the instruction information.  */
> -extern const struct nios2_opcode nios2_r1_opcodes[];
> -extern const int nios2_num_r1_opcodes;
> -extern const struct nios2_opcode nios2_r2_opcodes[];
> -extern const int nios2_num_r2_opcodes;
> -extern struct nios2_opcode *nios2_opcodes;
> -extern int nios2_num_opcodes;
> +static const struct nios2_opcode nios2_r1_opcodes[];
> +static const int nios2_num_r1_opcodes;
> +static const struct nios2_opcode nios2_r2_opcodes[];
> +static const int nios2_num_r2_opcodes;
> +static struct nios2_opcode *nios2_opcodes;
> +static int nios2_num_opcodes;
> 
>  /* These are the data structures used to hold the register information.  */
> -extern const struct nios2_reg nios2_builtin_regs[];
> -extern struct nios2_reg *nios2_regs;
> -extern const int nios2_num_builtin_regs;
> -extern int nios2_num_regs;
> +static const struct nios2_reg nios2_builtin_regs[];
> +static struct nios2_reg *nios2_regs;
> +static const int nios2_num_builtin_regs;
> +static int nios2_num_regs;
> 
>  /* Return the opcode descriptor for a single instruction.  */
> -extern const struct nios2_opcode *
> +static const struct nios2_opcode *
>  nios2_find_opcode_hash (unsigned long, unsigned long);
> 
>  /* Lookup tables for R2 immediate decodings.  */
> -extern unsigned int nios2_r2_asi_n_mappings[];
> -extern const int nios2_num_r2_asi_n_mappings;
> -extern unsigned int nios2_r2_shi_n_mappings[];
> -extern const int nios2_num_r2_shi_n_mappings;
> -extern unsigned int nios2_r2_andi_n_mappings[];
> -extern const int nios2_num_r2_andi_n_mappings;
> +static unsigned int nios2_r2_asi_n_mappings[];
> +static const int nios2_num_r2_asi_n_mappings;
> +static unsigned int nios2_r2_shi_n_mappings[];
> +static const int nios2_num_r2_shi_n_mappings;
> +static unsigned int nios2_r2_andi_n_mappings[];
> +static const int nios2_num_r2_andi_n_mappings;
> 
>  /* Lookup table for 3-bit register decodings.  */
> -extern int nios2_r2_reg3_mappings[];
> -extern const int nios2_num_r2_reg3_mappings;
> +static int nios2_r2_reg3_mappings[];
> +static const int nios2_num_r2_reg3_mappings;
> 
>  /* Lookup table for REG_RANGE value list decodings.  */
> -extern unsigned long nios2_r2_reg_range_mappings[];
> -extern const int nios2_num_r2_reg_range_mappings;
> +static unsigned long nios2_r2_reg_range_mappings[];
> +static const int nios2_num_r2_reg_range_mappings;
> 
>  #endif /* _NIOS2_H */
> 
> @@ -1760,7 +1760,7 @@ extern const int nios2_num_r2_reg_range_mappings;
>  */
>  /* Register string table */
> 
> -const struct nios2_reg nios2_builtin_regs[] = {
> +static const struct nios2_reg nios2_builtin_regs[] = {
>    /* Standard register names.  */
>    {"zero", 0, REG_NORMAL},
>    {"at", 1, REG_NORMAL},			/* assembler temporary */
> @@ -1896,17 +1896,17 @@ const struct nios2_reg nios2_builtin_regs[] = {
> 
>  #define NIOS2_NUM_REGS \
>         ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0])))
> -const int nios2_num_builtin_regs = NIOS2_NUM_REGS;
> +static ATTRIBUTE_UNUSED const int nios2_num_builtin_regs = NIOS2_NUM_REGS;
> 
>  /* This is not const in order to allow for dynamic extensions to the
>     built-in instruction set.  */
> -struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
> -int nios2_num_regs = NIOS2_NUM_REGS;
> +static struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
> +static int nios2_num_regs = NIOS2_NUM_REGS;
>  #undef NIOS2_NUM_REGS
> 
>  /* This is the opcode table used by the Nios II GNU as, disassembler
>     and GDB.  */
> -const struct nios2_opcode nios2_r1_opcodes[] =
> +static const struct nios2_opcode nios2_r1_opcodes[] =
>  {
>    /* { name, args, args_test, num_args, size, format,
>         match, mask, pinfo, overflow } */
> @@ -2134,10 +2134,10 @@ const struct nios2_opcode nios2_r1_opcodes[] =
> 
>  #define NIOS2_NUM_R1_OPCODES \
>         ((sizeof nios2_r1_opcodes) / (sizeof (nios2_r1_opcodes[0])))
> -const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;
> +static const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;
> 
> 
> -const struct nios2_opcode nios2_r2_opcodes[] =
> +static const struct nios2_opcode nios2_r2_opcodes[] =
>  {
>    /* { name, args, args_test, num_args, size, format,
>         match, mask, pinfo, overflow } */
> @@ -2474,37 +2474,37 @@ const struct nios2_opcode nios2_r2_opcodes[] =
> 
>  #define NIOS2_NUM_R2_OPCODES \
>         ((sizeof nios2_r2_opcodes) / (sizeof (nios2_r2_opcodes[0])))
> -const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;
> +static const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;
> 
>  /* Default to using the R1 instruction tables.  */
> -struct nios2_opcode *nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes;
> -int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
> +static ATTRIBUTE_UNUSED struct nios2_opcode *nios2_opcodes = (struct
> nios2_opcode *) nios2_r1_opcodes;
> +static ATTRIBUTE_UNUSED int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
>  #undef NIOS2_NUM_R1_OPCODES
>  #undef NIOS2_NUM_R2_OPCODES
> 
>  /* Decodings for R2 asi.n (addi.n/subi.n) immediate values.  */
> -unsigned int nios2_r2_asi_n_mappings[] =
> +static unsigned int nios2_r2_asi_n_mappings[] =
>    {1, 2, 4, 8, 16, 32, 64, 128};
> -const int nios2_num_r2_asi_n_mappings = 8;
> +static ATTRIBUTE_UNUSED const int nios2_num_r2_asi_n_mappings = 8;
> 
>  /* Decodings for R2 shi.n (slli.n/srli.n) immediate values.  */
> -unsigned int nios2_r2_shi_n_mappings[] =
> +static unsigned int nios2_r2_shi_n_mappings[] =
>    {1, 2, 3, 8, 12, 16, 24, 31};
> -const int nios2_num_r2_shi_n_mappings = 8;
> +static ATTRIBUTE_UNUSED const int nios2_num_r2_shi_n_mappings = 8;
> 
>  /* Decodings for R2 andi.n immediate values.  */
> -unsigned int nios2_r2_andi_n_mappings[] =
> +static unsigned int nios2_r2_andi_n_mappings[] =
>    {1, 2, 3, 4, 8, 0xf, 0x10, 0x1f,
>     0x20, 0x3f, 0x7f, 0x80, 0xff, 0x7ff, 0xff00, 0xffff};
> -const int nios2_num_r2_andi_n_mappings = 16;
> +static ATTRIBUTE_UNUSED const int nios2_num_r2_andi_n_mappings = 16;
> 
>  /* Decodings for R2 3-bit register fields.  */
> -int nios2_r2_reg3_mappings[] =
> +static int nios2_r2_reg3_mappings[] =
>    {16, 17, 2, 3, 4, 5, 6, 7};
> -const int nios2_num_r2_reg3_mappings = 8;
> +static ATTRIBUTE_UNUSED const int nios2_num_r2_reg3_mappings = 8;
> 
>  /* Decodings for R2 push.n/pop.n REG_RANGE value list.  */
> -unsigned long nios2_r2_reg_range_mappings[] = {
> +static unsigned long nios2_r2_reg_range_mappings[] = {
>    0x00010000,
>    0x00030000,
>    0x00070000,
> @@ -2514,7 +2514,7 @@ unsigned long nios2_r2_reg_range_mappings[] = {
>    0x007f0000,
>    0x00ff0000
>  };
> -const int nios2_num_r2_reg_range_mappings = 8;
> +static ATTRIBUTE_UNUSED const int nios2_num_r2_reg_range_mappings = 8;
> 
>  /*#include "sysdep.h"
>  #include "dis-asm.h"
> @@ -2668,7 +2668,7 @@ nios2_init_opcode_hash (nios2_disassembler_state *state)
> 
>  /* Return a pointer to an nios2_opcode struct for a given instruction
>     word OPCODE for bfd machine MACH, or NULL if there is an error.  */
> -const struct nios2_opcode *
> +static const struct nios2_opcode *
>  nios2_find_opcode_hash (unsigned long opcode, unsigned long mach)
>  {
>    nios2_opcode_hash *entry;
> diff --git a/disas/ppc.c b/disas/ppc.c
> index 02be878..30ca8ac 100644
> --- a/disas/ppc.c
> +++ b/disas/ppc.c
> @@ -74,8 +74,8 @@ struct powerpc_opcode
>  /* The table itself is sorted by major opcode number, and is otherwise
>     in the order in which the disassembler should consider
>     instructions.  */
> -extern const struct powerpc_opcode powerpc_opcodes[];
> -extern const int powerpc_num_opcodes;
> +static const struct powerpc_opcode powerpc_opcodes[];
> +static const int powerpc_num_opcodes;
> 
>  /* Values defined for the flags field of a struct powerpc_opcode.  */
> 
> @@ -225,8 +225,8 @@ struct powerpc_operand
>  /* Elements in the table are retrieved by indexing with values from
>     the operands field of the powerpc_opcodes table.  */
> 
> -extern const struct powerpc_operand powerpc_operands[];
> -extern const unsigned int num_powerpc_operands;
> +static const struct powerpc_operand powerpc_operands[];
> +static const unsigned int num_powerpc_operands;
> 
>  /* Values defined for the flags field of a struct powerpc_operand.  */
> 
> @@ -341,8 +341,8 @@ struct powerpc_macro
>    const char *format;
>  };
> 
> -extern const struct powerpc_macro powerpc_macros[];
> -extern const int powerpc_num_macros;
> +static const struct powerpc_macro powerpc_macros[];
> +static const int powerpc_num_macros;
> 
>  /* ppc-opc.c -- PowerPC opcode list
>     Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
> @@ -425,7 +425,7 @@ static long extract_tbr (unsigned long, int, int *);
>     omit the parens, since the macros are never used in a context where
>     the addition will be ambiguous.  */
> 
> -const struct powerpc_operand powerpc_operands[] =
> +static const struct powerpc_operand powerpc_operands[] =
>  {
>    /* The zero index is used to indicate the end of the list of
>       operands.  */
> @@ -893,8 +893,8 @@ const struct powerpc_operand powerpc_operands[] =
>    { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
>  };
> 
> -const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
> -					   / sizeof (powerpc_operands[0]));
> +static ATTRIBUTE_UNUSED const unsigned int num_powerpc_operands =
> +  sizeof (powerpc_operands) / sizeof (powerpc_operands[0]);
> 
>  /* The functions used to insert and extract complicated operands.  */
> 
> @@ -2011,7 +2011,7 @@ extract_tbr (unsigned long insn,
>     specific instructions before more general instructions.  It is also
>     sorted by major opcode.  */
> 
> -const struct powerpc_opcode powerpc_opcodes[] = {
> +static const struct powerpc_opcode powerpc_opcodes[] = {
>  { "attn",    X(0,256), X_MASK,		POWER4,		{ 0 } },
>  { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,	PPC64,		{ RA, SI } },
>  { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,	PPC64,		{ RA, SI } },
> @@ -5036,7 +5036,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
> 
>  };
> 
> -const int powerpc_num_opcodes =
> +static const int powerpc_num_opcodes =
>    sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
> @@ -5051,7 +5051,7 @@ const int powerpc_num_opcodes =
>     the underlying instructions don't support extracting 0 bits but do
>     support extracting the whole word (32 bits in this case).  */
> 
> -const struct powerpc_macro powerpc_macros[] = {
> +static const struct powerpc_macro powerpc_macros[] = {
>  { "extldi",  4,   PPC64,	"rldicr %0,%1,%3,(%2)-1" },
>  { "extldi.", 4,   PPC64,	"rldicr. %0,%1,%3,(%2)-1" },
>  { "extrdi",  4,   PPC64,	"rldicl %0,%1,(%2)+(%3),64-(%2)" },
> @@ -5093,7 +5093,7 @@ const struct powerpc_macro powerpc_macros[] = {
>  { "clrlslwi.",4,  PPCCOM,	"rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
>  };
> 
> -const int powerpc_num_macros =
> +static ATTRIBUTE_UNUSED const int powerpc_num_macros =
>    sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
> 
> 
> diff --git a/disas/riscv.c b/disas/riscv.c
> index 278d9be..0d124d8 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -789,7 +789,7 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {
> 
>  /* instruction metadata */
> 
> -const rv_opcode_data opcode_data[] = {
> +static const rv_opcode_data opcode_data[] = {
>      { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
>      { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
>      { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },
> diff --git a/pc-bios/optionrom/linuxboot_dma.c
> b/pc-bios/optionrom/linuxboot_dma.c
> index cbcf667..a3d5cf7 100644
> --- a/pc-bios/optionrom/linuxboot_dma.c
> +++ b/pc-bios/optionrom/linuxboot_dma.c
> @@ -132,9 +132,9 @@ static uint32_t get_e801_addr(void)
>  }
> 
>  /* Force the asm name without leading underscore, even on Win32. */
> -extern void load_kernel(void) asm("load_kernel");
> +static void load_kernel(void) asm("load_kernel");
> 
> -void load_kernel(void)
> +static __attribute__((used)) void load_kernel(void)
>  {
>      void *setup_addr;
>      void *initrd_addr;
> diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
> index c390c18..7e89ba3 100644
> --- a/scripts/tracetool/format/c.py
> +++ b/scripts/tracetool/format/c.py
> @@ -49,7 +49,7 @@ def generate(events, backend, group):
>              sstate = "TRACE_%s_ENABLED" % e.name.upper(),
>              dstate = e.api(e.QEMU_DSTATE))
> 
> -    out('TraceEvent *%(group)s_trace_events[] = {',
> +    out('static TraceEvent *%(group)s_trace_events[] = {',
>          group = group.lower())
> 
>      for e in events:
> diff --git a/target/hexagon/gen_dectree_import.c
> b/target/hexagon/gen_dectree_import.c
> index 5b7ecfc..20caee5 100644
> --- a/target/hexagon/gen_dectree_import.c
> +++ b/target/hexagon/gen_dectree_import.c
> @@ -41,7 +41,7 @@ const char * const opcode_names[] = {
>   *         "Add 32-bit registers",
>   *         { RdV=RsV+RtV;})
>   */
> -const char * const opcode_syntax[XX_LAST_OPCODE] = {
> +static const char * const opcode_syntax[XX_LAST_OPCODE] = {
>  #define Q6INSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
>     [TAG] = BEH,
>  #define EXTINSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 35d790c..586e70d 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -65,7 +65,7 @@ const char * const opcode_wregs[] = {
>  #undef IMMINFO
>  };
> 
> -const char * const opcode_short_semantics[] = {
> +static const char * const opcode_short_semantics[] = {
>  #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
>  #include "shortcode_generated.h.inc"
>  #undef DEF_SHORTCODE
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index ae9fd9f..58b8abf 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -78,7 +78,7 @@ struct CPUID2CacheDescriptorInfo {
>   * Known CPUID 2 cache descriptors.
>   * From Intel SDM Volume 2A, CPUID instruction
>   */
> -struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
> +static struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
>      [0x06] = { .level = 1, .type = INSTRUCTION_CACHE, .size =   8 * KiB,
>                 .associativity = 4,  .line_size = 32, },
>      [0x08] = { .level = 1, .type = INSTRUCTION_CACHE, .size =  16 * KiB,
> diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
> index 050dcf2..56c5422 100644
> --- a/target/s390x/cpu_models.c
> +++ b/target/s390x/cpu_models.c
> @@ -97,7 +97,7 @@ static const S390FeatInit qemu_max_cpu_feat_init = {
> S390_FEAT_LIST_QEMU_MAX };
>  static S390FeatBitmap qemu_max_cpu_feat;
> 
>  /* features part of a base model but not relevant for finding a base model */
> -S390FeatBitmap ignored_base_feat;
> +static S390FeatBitmap ignored_base_feat;
> 
>  void s390_cpudef_featoff(uint8_t gen, uint8_t ec_ga, S390Feat feat)
>  {
> diff --git a/target/xtensa/core-dc232b/xtensa-modules.c.inc
> b/target/xtensa/core-dc232b/xtensa-modules.c.inc
> index 164df3b..8bef653 100644
> --- a/target/xtensa/core-dc232b/xtensa-modules.c.inc
> +++ b/target/xtensa/core-dc232b/xtensa-modules.c.inc
> @@ -14060,7 +14060,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-dc233c/xtensa-modules.c.inc
> b/target/xtensa/core-dc233c/xtensa-modules.c.inc
> index 0f32f08..24a63a4 100644
> --- a/target/xtensa/core-dc233c/xtensa-modules.c.inc
> +++ b/target/xtensa/core-dc233c/xtensa-modules.c.inc
> @@ -15187,7 +15187,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-de212/xtensa-modules.c.inc
> b/target/xtensa/core-de212/xtensa-modules.c.inc
> index 480c68d..19f0d7f 100644
> --- a/target/xtensa/core-de212/xtensa-modules.c.inc
> +++ b/target/xtensa/core-de212/xtensa-modules.c.inc
> @@ -14525,7 +14525,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
> b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
> index 129c023..e35ca06 100644
> --- a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
> +++ b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
> @@ -20740,7 +20740,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
> b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
> index 28ea3d7..4adc52f 100644
> --- a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
> +++ b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
> @@ -171888,7 +171888,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    8 /* insn_size */, 0,
>    10, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-fsf/xtensa-modules.c.inc
> b/target/xtensa/core-fsf/xtensa-modules.c.inc
> index c32683f..7e7268a 100644
> --- a/target/xtensa/core-fsf/xtensa-modules.c.inc
> +++ b/target/xtensa/core-fsf/xtensa-modules.c.inc
> @@ -9808,7 +9808,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    1 /* big-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
> b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
> index 7e87d21..10d56e0 100644
> --- a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
> +++ b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
> @@ -11348,7 +11348,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    3 /* insn_size */, 0,
>    3, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
> b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
> index bc7cf44..9c0c78e 100644
> --- a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
> +++ b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
> @@ -45099,7 +45099,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    1 /* big-endian */,
>    8 /* insn_size */, 0,
>    4, formats, format_decoder, length_decoder,
> diff --git a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
> b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
> index 2856114..863fcd5 100644
> --- a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
> +++ b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
> @@ -36369,7 +36369,7 @@ length_decoder (const unsigned char *insn)
> 
> -xtensa_isa_internal xtensa_modules = {
> +static xtensa_isa_internal xtensa_modules = {
>    0 /* little-endian */,
>    8 /* insn_size */, 0,
>    4, formats, format_decoder, length_decoder,

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Re: [PATCH] [NFC] Mark locally used symbols as static.
Posted by Stefan Hajnoczi 3 years ago
On Mon, Mar 22, 2021 at 10:55:42PM +0300, Yuri Gribov wrote:
> diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
> index c390c18..7e89ba3 100644
> --- a/scripts/tracetool/format/c.py
> +++ b/scripts/tracetool/format/c.py
> @@ -49,7 +49,7 @@ def generate(events, backend, group):
>              sstate = "TRACE_%s_ENABLED" % e.name.upper(),
>              dstate = e.api(e.QEMU_DSTATE))
> 
> -    out('TraceEvent *%(group)s_trace_events[] = {',
> +    out('static TraceEvent *%(group)s_trace_events[] = {',
>          group = group.lower())
> 
>      for e in events:

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Re: [PATCH] [NFC] Mark locally used symbols as static.
Posted by Stefan Hajnoczi 3 years ago
On Mon, Mar 22, 2021 at 10:55:42PM +0300, Yuri Gribov wrote:
>  scripts/tracetool/format/c.py                 |  2 +-

My Reviewed-by is specifically for this tracetool file.

Stefan
RE: [PATCH] [NFC] Mark locally used symbols as static.
Posted by Taylor Simpson 3 years ago

> -----Original Message-----
> From: Yuri Gribov <tetra2005@gmail.com>
> Sent: Monday, March 22, 2021 2:56 PM
> To: qemu-devel@nongnu.org
> Cc: Richard Henderson <richard.henderson@linaro.org>; Laurent Vivier
> <laurent@vivier.eu>; Philippe Mathieu-Daudé <f4bug@amsat.org>; Chris
> Wulff <crwulff@gmail.com>; David Gibson <david@gibson.dropbear.id.au>;
> Palmer Dabbelt <palmer@dabbelt.com>; Taylor Simpson
> <tsimpson@quicinc.com>; Paolo Bonzini <pbonzini@redhat.com>; Cornelia
> Huck <cohuck@redhat.com>; Max Filippov <jcmvbkbc@gmail.com>; Stefan
> Hajnoczi <stefanha@redhat.com>
> Subject: [PATCH] [NFC] Mark locally used symbols as static.
>
> Hi all,
>
> This patch makes locally used symbols static to enable more compiler
> optimizations on them. Some of the symbols turned out to not be used
> at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
> they were ok to delete).
>
> The symbols have been identified with a pet project of mine:
> https://github.com/yugr/Localizer
>
> diff --git a/target/hexagon/gen_dectree_import.c
> b/target/hexagon/gen_dectree_import.c
> index 5b7ecfc..20caee5 100644
> --- a/target/hexagon/gen_dectree_import.c
> +++ b/target/hexagon/gen_dectree_import.c
> @@ -41,7 +41,7 @@ const char * const opcode_names[] = {
>   *         "Add 32-bit registers",
>   *         { RdV=RsV+RtV;})
>   */
> -const char * const opcode_syntax[XX_LAST_OPCODE] = {
> +static const char * const opcode_syntax[XX_LAST_OPCODE] = {
>  #define Q6INSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
>     [TAG] = BEH,
>  #define EXTINSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 35d790c..586e70d 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -65,7 +65,7 @@ const char * const opcode_wregs[] = {
>  #undef IMMINFO
>  };
>
> -const char * const opcode_short_semantics[] = {
> +static const char * const opcode_short_semantics[] = {
>  #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
>  #include "shortcode_generated.h.inc"
>  #undef DEF_SHORTCODE

Hexagon changes
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>


[PING] [PATCH] [NFC] Mark locally used symbols as static.
Posted by Yuri Gribov 3 years ago
Hi all,

This patch makes locally used symbols static to enable more compiler
optimizations on them. Some of the symbols turned out to not be used
at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
they were ok to delete).

The symbols have been identified with a pet project of mine:
https://github.com/yugr/Localizer

Link to patch: https://patchew.org/QEMU/CAJOtW+5DDMsr8QJQxaa1OHT79rpMJCrwkYbuaRTynR_ngUxgHA@mail.gmail.com/

From 4e790fd06becfbbf6fb106ac52ae1e4515f1ac73 Mon Sep 17 00:00:00 2001
From: Yury Gribov <tetra2005@gmail.com>
Date: Sat, 20 Mar 2021 23:39:15 +0300
Subject: [PATCH] Mark locally used symbols as static.

Signed-off-by: Yury Gribov <tetra2005@gmail.com>
Acked-by: Max Filippov <jcmvbkbc@gmail.com> (xtensa)
Acked-by: David Gibson <david@gibson.dropbear.id.au> (ppc)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> (tracetool)
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com> (hexagon)
---
 disas/alpha.c                                 | 16 ++--
 disas/m68k.c                                  | 78 ++++++++---------
 disas/mips.c                                  | 14 ++--
 disas/nios2.c                                 | 84 +++++++++----------
 disas/ppc.c                                   | 26 +++---
 disas/riscv.c                                 |  2 +-
 pc-bios/optionrom/linuxboot_dma.c             |  4 +-
 scripts/tracetool/format/c.py                 |  2 +-
 target/hexagon/gen_dectree_import.c           |  2 +-
 target/hexagon/opcodes.c                      |  2 +-
 target/i386/cpu.c                             |  2 +-
 target/s390x/cpu_models.c                     |  2 +-
 .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
 .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
 target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
 .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
 .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
 target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
 .../xtensa-modules.c.inc                      |  2 +-
 .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
 .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
 21 files changed, 125 insertions(+), 127 deletions(-)

diff --git a/disas/alpha.c b/disas/alpha.c
index 3db90fa665..361a4ed101 100644
--- a/disas/alpha.c
+++ b/disas/alpha.c
@@ -56,8 +56,8 @@ struct alpha_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct alpha_opcode alpha_opcodes[];
-extern const unsigned alpha_num_opcodes;
+static const struct alpha_opcode alpha_opcodes[];
+static const unsigned alpha_num_opcodes;

 /* Values defined for the flags field of a struct alpha_opcode.  */

@@ -137,8 +137,8 @@ struct alpha_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the alpha_opcodes table.  */

-extern const struct alpha_operand alpha_operands[];
-extern const unsigned alpha_num_operands;
+static const struct alpha_operand alpha_operands[];
+static const unsigned alpha_num_operands;

 /* Values defined for the flags field of a struct alpha_operand.  */

@@ -293,7 +293,7 @@ static int extract_ev6hwjhint (unsigned, int *);
 
 /* The operands table  */

-const struct alpha_operand alpha_operands[] =
+static const struct alpha_operand alpha_operands[] =
 {
   /* The fields are bits, shift, insert, extract, flags */
   /* The zero index is used to indicate end-of-list */
@@ -424,7 +424,7 @@ const struct alpha_operand alpha_operands[] =
     insert_ev6hwjhint, extract_ev6hwjhint }
 };

-const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);

 /* The RB field when it is the same as the RA field in the same insn.
    This operand is marked fake.  The insertion function just copies
@@ -706,7 +706,7 @@ extract_ev6hwjhint(unsigned insn, int *invalid
ATTRIBUTE_UNUSED)
 		that were not assigned to a particular extension.
 */

-const struct alpha_opcode alpha_opcodes[] = {
+static const struct alpha_opcode alpha_opcodes[] = {
   { "halt",		SPCD(0x00,0x0000), BASE, ARG_NONE },
   { "draina",		SPCD(0x00,0x0002), BASE, ARG_NONE },
   { "bpt",		SPCD(0x00,0x0080), BASE, ARG_NONE },
@@ -1732,7 +1732,7 @@ const struct alpha_opcode alpha_opcodes[] = {
   { "bgt",		BRA(0x3F), BASE, ARG_BRA },
 };

-const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);

 /* OSF register names.  */

diff --git a/disas/m68k.c b/disas/m68k.c
index aefaecfbd6..903d5cfec4 100644
--- a/disas/m68k.c
+++ b/disas/m68k.c
@@ -95,29 +95,29 @@ struct floatformat

 /* floatformats for IEEE single and double, big and little endian.  */

-extern const struct floatformat floatformat_ieee_single_big;
-extern const struct floatformat floatformat_ieee_single_little;
-extern const struct floatformat floatformat_ieee_double_big;
-extern const struct floatformat floatformat_ieee_double_little;
+static const struct floatformat floatformat_ieee_single_big;
+static const struct floatformat floatformat_ieee_single_little;
+static const struct floatformat floatformat_ieee_double_big;
+static const struct floatformat floatformat_ieee_double_little;

 /* floatformat for ARM IEEE double, little endian bytes and big endian words */

-extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
+static const struct floatformat floatformat_ieee_double_littlebyte_bigword;

 /* floatformats for various extendeds.  */

-extern const struct floatformat floatformat_i387_ext;
-extern const struct floatformat floatformat_m68881_ext;
-extern const struct floatformat floatformat_i960_ext;
-extern const struct floatformat floatformat_m88110_ext;
-extern const struct floatformat floatformat_m88110_harris_ext;
-extern const struct floatformat floatformat_arm_ext_big;
-extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
+static const struct floatformat floatformat_i387_ext;
+static const struct floatformat floatformat_m68881_ext;
+static const struct floatformat floatformat_i960_ext;
+static const struct floatformat floatformat_m88110_ext;
+static const struct floatformat floatformat_m88110_harris_ext;
+static const struct floatformat floatformat_arm_ext_big;
+static const struct floatformat floatformat_arm_ext_littlebyte_bigword;
 /* IA-64 Floating Point register spilt into memory.  */
-extern const struct floatformat floatformat_ia64_spill_big;
-extern const struct floatformat floatformat_ia64_spill_little;
-extern const struct floatformat floatformat_ia64_quad_big;
-extern const struct floatformat floatformat_ia64_quad_little;
+static const struct floatformat floatformat_ia64_spill_big;
+static const struct floatformat floatformat_ia64_spill_little;
+static const struct floatformat floatformat_ia64_quad_big;
+static const struct floatformat floatformat_ia64_quad_little;

 /* Convert from FMT to a double.
    FROM is the address of the extended float.
@@ -514,10 +514,10 @@ struct m68k_opcode_alias
    ]  first word, bit 10
 */

-extern const struct m68k_opcode m68k_opcodes[];
-extern const struct m68k_opcode_alias m68k_opcode_aliases[];
+static const struct m68k_opcode m68k_opcodes[];
+static const struct m68k_opcode_alias m68k_opcode_aliases[];

-extern const int m68k_numopcodes, m68k_numaliases;
+static const int m68k_numopcodes, m68k_numaliases;

 /* **** End of m68k-opcode.h */
 /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
@@ -2072,7 +2072,7 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
    be consecutive.  If they aren't, the assembler will bomb at
    runtime.  */

-const struct m68k_opcode m68k_opcodes[] =
+static const struct m68k_opcode m68k_opcodes[] =
 {
 {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
 {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
@@ -4212,7 +4212,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
 };

-const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
+static const int m68k_numopcodes = sizeof m68k_opcodes / sizeof
m68k_opcodes[0];

 /* These aliases used to be in the above table, each one duplicating
    all of the entries for its primary exactly.  This table was
@@ -4221,7 +4221,7 @@ const int m68k_numopcodes = sizeof m68k_opcodes
/ sizeof m68k_opcodes[0];
    aliases above that could be moved down here, except for very minor
    differences.  */

-const struct m68k_opcode_alias m68k_opcode_aliases[] =
+static const struct m68k_opcode_alias m68k_opcode_aliases[] =
 {
   { "add",	"addw", },
   { "adda",	"addaw", },
@@ -4465,7 +4465,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =

 };

-const int m68k_numaliases =
+static ATTRIBUTE_UNUSED const int m68k_numaliases =
   sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
 /* **** End of m68k-opc.c */
 /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
@@ -4523,28 +4523,28 @@ floatformat_always_valid (const struct
floatformat *fmt ATTRIBUTE_UNUSED,
 #define FLOATFORMAT_CHAR_BIT 8

 /* floatformats for IEEE single and double, big and little endian.  */
-const struct floatformat floatformat_ieee_single_big =
+static const struct floatformat floatformat_ieee_single_big =
 {
   floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_single_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_single_little =
 {
   floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_big =
+static const struct floatformat floatformat_ieee_double_big =
 {
   floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
   "floatformat_ieee_double_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_little =
 {
   floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4555,7 +4555,7 @@ const struct floatformat floatformat_ieee_double_little =
 /* floatformat for IEEE double, little endian byte order, with big endian word
    ordering, as on the ARM.  */

-const struct floatformat floatformat_ieee_double_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_littlebyte_bigword =
 {
   floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4586,14 +4586,14 @@ floatformat_i387_ext_is_valid (const struct
floatformat *fmt, const char *from)
     return 1;
 }

-const struct floatformat floatformat_i387_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i387_ext =
 {
   floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_i387_ext",
   floatformat_i387_ext_is_valid
 };
-const struct floatformat floatformat_m68881_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m68881_ext =
 {
   /* Note that the bits from 16 to 31 are unused.  */
   floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4601,7 +4601,7 @@ const struct floatformat floatformat_m68881_ext =
   "floatformat_m68881_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_i960_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i960_ext =
 {
   /* Note that the bits from 0 to 15 are unused.  */
   floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4609,14 +4609,14 @@ const struct floatformat floatformat_i960_ext =
   "floatformat_i960_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m88110_ext =
 {
   floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_m88110_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_harris_ext =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_m88110_harris_ext =
 {
   /* Harris uses raw format 128 bytes long, but the number is just an ieee
      double, and the last 64 bits are wasted. */
@@ -4625,7 +4625,7 @@ const struct floatformat floatformat_m88110_harris_ext =
   "floatformat_m88110_ext_harris",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_arm_ext_big =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4633,7 +4633,7 @@ const struct floatformat floatformat_arm_ext_big =
   "floatformat_arm_ext_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4641,28 +4641,28 @@ const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
   "floatformat_arm_ext_littlebyte_bigword",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_spill_big =
 {
   floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ia64_spill_little =
 {
   floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_big =
 {
   floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
   "floatformat_ia64_quad_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_little =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_little =
 {
   floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
diff --git a/disas/mips.c b/disas/mips.c
index b9a5204304..b43700be9c 100644
--- a/disas/mips.c
+++ b/disas/mips.c
@@ -931,10 +931,9 @@ enum
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-extern const struct mips_opcode mips_builtin_opcodes[];
-extern const int bfd_mips_num_builtin_opcodes;
-extern struct mips_opcode *mips_opcodes;
-extern int bfd_mips_num_opcodes;
+static const struct mips_opcode mips_builtin_opcodes[];
+static struct mips_opcode *mips_opcodes;
+static int bfd_mips_num_opcodes;
 #define NUMOPCODES bfd_mips_num_opcodes

 
@@ -1259,7 +1258,7 @@ extern const int bfd_mips16_num_opcodes;
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-const struct mips_opcode mips_builtin_opcodes[] =
+static const struct mips_opcode mips_builtin_opcodes[] =
 {
 /* These instructions appear first so that the disassembler will find
    them first.  The assemblers uses a hash table based on the
@@ -3509,13 +3508,12 @@ const struct mips_opcode mips_builtin_opcodes[] =

 #define MIPS_NUM_OPCODES \
 	((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
-const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;

 /* const removed from the following to allow for dynamic extensions to the
  * built-in instruction set. */
-struct mips_opcode *mips_opcodes =
+static struct mips_opcode *mips_opcodes =
   (struct mips_opcode *) mips_builtin_opcodes;
-int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
+static int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
 #undef MIPS_NUM_OPCODES

 /* Mips instructions are at maximum this many bytes long.  */
diff --git a/disas/nios2.c b/disas/nios2.c
index c3e82140c7..089ae6ef6f 100644
--- a/disas/nios2.c
+++ b/disas/nios2.c
@@ -1720,38 +1720,38 @@ struct nios2_reg


 /* These are the data structures used to hold the instruction information.  */
-extern const struct nios2_opcode nios2_r1_opcodes[];
-extern const int nios2_num_r1_opcodes;
-extern const struct nios2_opcode nios2_r2_opcodes[];
-extern const int nios2_num_r2_opcodes;
-extern struct nios2_opcode *nios2_opcodes;
-extern int nios2_num_opcodes;
+static const struct nios2_opcode nios2_r1_opcodes[];
+static const int nios2_num_r1_opcodes;
+static const struct nios2_opcode nios2_r2_opcodes[];
+static const int nios2_num_r2_opcodes;
+static struct nios2_opcode *nios2_opcodes;
+static int nios2_num_opcodes;

 /* These are the data structures used to hold the register information.  */
-extern const struct nios2_reg nios2_builtin_regs[];
-extern struct nios2_reg *nios2_regs;
-extern const int nios2_num_builtin_regs;
-extern int nios2_num_regs;
+static const struct nios2_reg nios2_builtin_regs[];
+static struct nios2_reg *nios2_regs;
+static const int nios2_num_builtin_regs;
+static int nios2_num_regs;

 /* Return the opcode descriptor for a single instruction.  */
-extern const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long, unsigned long);

 /* Lookup tables for R2 immediate decodings.  */
-extern unsigned int nios2_r2_asi_n_mappings[];
-extern const int nios2_num_r2_asi_n_mappings;
-extern unsigned int nios2_r2_shi_n_mappings[];
-extern const int nios2_num_r2_shi_n_mappings;
-extern unsigned int nios2_r2_andi_n_mappings[];
-extern const int nios2_num_r2_andi_n_mappings;
+static unsigned int nios2_r2_asi_n_mappings[];
+static const int nios2_num_r2_asi_n_mappings;
+static unsigned int nios2_r2_shi_n_mappings[];
+static const int nios2_num_r2_shi_n_mappings;
+static unsigned int nios2_r2_andi_n_mappings[];
+static const int nios2_num_r2_andi_n_mappings;

 /* Lookup table for 3-bit register decodings.  */
-extern int nios2_r2_reg3_mappings[];
-extern const int nios2_num_r2_reg3_mappings;
+static int nios2_r2_reg3_mappings[];
+static const int nios2_num_r2_reg3_mappings;

 /* Lookup table for REG_RANGE value list decodings.  */
-extern unsigned long nios2_r2_reg_range_mappings[];
-extern const int nios2_num_r2_reg_range_mappings;
+static unsigned long nios2_r2_reg_range_mappings[];
+static const int nios2_num_r2_reg_range_mappings;

 #endif /* _NIOS2_H */

@@ -1760,7 +1760,7 @@ extern const int nios2_num_r2_reg_range_mappings;
 */
 /* Register string table */

-const struct nios2_reg nios2_builtin_regs[] = {
+static const struct nios2_reg nios2_builtin_regs[] = {
   /* Standard register names.  */
   {"zero", 0, REG_NORMAL},
   {"at", 1, REG_NORMAL},			/* assembler temporary */
@@ -1896,17 +1896,17 @@ const struct nios2_reg nios2_builtin_regs[] = {

 #define NIOS2_NUM_REGS \
        ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0])))
-const int nios2_num_builtin_regs = NIOS2_NUM_REGS;
+static ATTRIBUTE_UNUSED const int nios2_num_builtin_regs = NIOS2_NUM_REGS;

 /* This is not const in order to allow for dynamic extensions to the
    built-in instruction set.  */
-struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
-int nios2_num_regs = NIOS2_NUM_REGS;
+static struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
+static int nios2_num_regs = NIOS2_NUM_REGS;
 #undef NIOS2_NUM_REGS

 /* This is the opcode table used by the Nios II GNU as, disassembler
    and GDB.  */
-const struct nios2_opcode nios2_r1_opcodes[] =
+static const struct nios2_opcode nios2_r1_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2134,10 +2134,10 @@ const struct nios2_opcode nios2_r1_opcodes[] =

 #define NIOS2_NUM_R1_OPCODES \
        ((sizeof nios2_r1_opcodes) / (sizeof (nios2_r1_opcodes[0])))
-const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;
+static const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;


-const struct nios2_opcode nios2_r2_opcodes[] =
+static const struct nios2_opcode nios2_r2_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2474,37 +2474,37 @@ const struct nios2_opcode nios2_r2_opcodes[] =

 #define NIOS2_NUM_R2_OPCODES \
        ((sizeof nios2_r2_opcodes) / (sizeof (nios2_r2_opcodes[0])))
-const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;
+static const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;

 /* Default to using the R1 instruction tables.  */
-struct nios2_opcode *nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes;
-int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
+static ATTRIBUTE_UNUSED struct nios2_opcode *nios2_opcodes = (struct
nios2_opcode *) nios2_r1_opcodes;
+static ATTRIBUTE_UNUSED int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
 #undef NIOS2_NUM_R1_OPCODES
 #undef NIOS2_NUM_R2_OPCODES

 /* Decodings for R2 asi.n (addi.n/subi.n) immediate values.  */
-unsigned int nios2_r2_asi_n_mappings[] =
+static unsigned int nios2_r2_asi_n_mappings[] =
   {1, 2, 4, 8, 16, 32, 64, 128};
-const int nios2_num_r2_asi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_asi_n_mappings = 8;

 /* Decodings for R2 shi.n (slli.n/srli.n) immediate values.  */
-unsigned int nios2_r2_shi_n_mappings[] =
+static unsigned int nios2_r2_shi_n_mappings[] =
   {1, 2, 3, 8, 12, 16, 24, 31};
-const int nios2_num_r2_shi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_shi_n_mappings = 8;

 /* Decodings for R2 andi.n immediate values.  */
-unsigned int nios2_r2_andi_n_mappings[] =
+static unsigned int nios2_r2_andi_n_mappings[] =
   {1, 2, 3, 4, 8, 0xf, 0x10, 0x1f,
    0x20, 0x3f, 0x7f, 0x80, 0xff, 0x7ff, 0xff00, 0xffff};
-const int nios2_num_r2_andi_n_mappings = 16;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_andi_n_mappings = 16;

 /* Decodings for R2 3-bit register fields.  */
-int nios2_r2_reg3_mappings[] =
+static int nios2_r2_reg3_mappings[] =
   {16, 17, 2, 3, 4, 5, 6, 7};
-const int nios2_num_r2_reg3_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg3_mappings = 8;

 /* Decodings for R2 push.n/pop.n REG_RANGE value list.  */
-unsigned long nios2_r2_reg_range_mappings[] = {
+static unsigned long nios2_r2_reg_range_mappings[] = {
   0x00010000,
   0x00030000,
   0x00070000,
@@ -2514,7 +2514,7 @@ unsigned long nios2_r2_reg_range_mappings[] = {
   0x007f0000,
   0x00ff0000
 };
-const int nios2_num_r2_reg_range_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg_range_mappings = 8;

 /*#include "sysdep.h"
 #include "dis-asm.h"
@@ -2668,7 +2668,7 @@ nios2_init_opcode_hash (nios2_disassembler_state *state)

 /* Return a pointer to an nios2_opcode struct for a given instruction
    word OPCODE for bfd machine MACH, or NULL if there is an error.  */
-const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long opcode, unsigned long mach)
 {
   nios2_opcode_hash *entry;
diff --git a/disas/ppc.c b/disas/ppc.c
index 02be878198..30ca8acf53 100644
--- a/disas/ppc.c
+++ b/disas/ppc.c
@@ -74,8 +74,8 @@ struct powerpc_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct powerpc_opcode powerpc_opcodes[];
-extern const int powerpc_num_opcodes;
+static const struct powerpc_opcode powerpc_opcodes[];
+static const int powerpc_num_opcodes;

 /* Values defined for the flags field of a struct powerpc_opcode.  */

@@ -225,8 +225,8 @@ struct powerpc_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the powerpc_opcodes table.  */

-extern const struct powerpc_operand powerpc_operands[];
-extern const unsigned int num_powerpc_operands;
+static const struct powerpc_operand powerpc_operands[];
+static const unsigned int num_powerpc_operands;

 /* Values defined for the flags field of a struct powerpc_operand.  */

@@ -341,8 +341,8 @@ struct powerpc_macro
   const char *format;
 };

-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
+static const struct powerpc_macro powerpc_macros[];
+static const int powerpc_num_macros;

 /* ppc-opc.c -- PowerPC opcode list
    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
@@ -425,7 +425,7 @@ static long extract_tbr (unsigned long, int, int *);
    omit the parens, since the macros are never used in a context where
    the addition will be ambiguous.  */

-const struct powerpc_operand powerpc_operands[] =
+static const struct powerpc_operand powerpc_operands[] =
 {
   /* The zero index is used to indicate the end of the list of
      operands.  */
@@ -893,8 +893,8 @@ const struct powerpc_operand powerpc_operands[] =
   { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
 };

-const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
-					   / sizeof (powerpc_operands[0]));
+static ATTRIBUTE_UNUSED const unsigned int num_powerpc_operands =
+  sizeof (powerpc_operands) / sizeof (powerpc_operands[0]);

 /* The functions used to insert and extract complicated operands.  */

@@ -2011,7 +2011,7 @@ extract_tbr (unsigned long insn,
    specific instructions before more general instructions.  It is also
    sorted by major opcode.  */

-const struct powerpc_opcode powerpc_opcodes[] = {
+static const struct powerpc_opcode powerpc_opcodes[] = {
 { "attn",    X(0,256), X_MASK,		POWER4,		{ 0 } },
 { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,	PPC64,		{ RA, SI } },
 { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,	PPC64,		{ RA, SI } },
@@ -5036,7 +5036,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {

 };

-const int powerpc_num_opcodes =
+static const int powerpc_num_opcodes =
   sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
 
 /* The macro table.  This is only used by the assembler.  */
@@ -5051,7 +5051,7 @@ const int powerpc_num_opcodes =
    the underlying instructions don't support extracting 0 bits but do
    support extracting the whole word (32 bits in this case).  */

-const struct powerpc_macro powerpc_macros[] = {
+static const struct powerpc_macro powerpc_macros[] = {
 { "extldi",  4,   PPC64,	"rldicr %0,%1,%3,(%2)-1" },
 { "extldi.", 4,   PPC64,	"rldicr. %0,%1,%3,(%2)-1" },
 { "extrdi",  4,   PPC64,	"rldicl %0,%1,(%2)+(%3),64-(%2)" },
@@ -5093,7 +5093,7 @@ const struct powerpc_macro powerpc_macros[] = {
 { "clrlslwi.",4,  PPCCOM,	"rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
 };

-const int powerpc_num_macros =
+static ATTRIBUTE_UNUSED const int powerpc_num_macros =
   sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);


diff --git a/disas/riscv.c b/disas/riscv.c
index 278d9be924..0d124d8b61 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -789,7 +789,7 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {

 /* instruction metadata */

-const rv_opcode_data opcode_data[] = {
+static const rv_opcode_data opcode_data[] = {
     { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
     { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
     { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },
diff --git a/pc-bios/optionrom/linuxboot_dma.c
b/pc-bios/optionrom/linuxboot_dma.c
index cbcf6679d9..a3d5cf76aa 100644
--- a/pc-bios/optionrom/linuxboot_dma.c
+++ b/pc-bios/optionrom/linuxboot_dma.c
@@ -132,9 +132,9 @@ static uint32_t get_e801_addr(void)
 }

 /* Force the asm name without leading underscore, even on Win32. */
-extern void load_kernel(void) asm("load_kernel");
+static void load_kernel(void) asm("load_kernel");

-void load_kernel(void)
+static __attribute__((used)) void load_kernel(void)
 {
     void *setup_addr;
     void *initrd_addr;
diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
index c390c1844a..7e89ba37f9 100644
--- a/scripts/tracetool/format/c.py
+++ b/scripts/tracetool/format/c.py
@@ -49,7 +49,7 @@ def generate(events, backend, group):
             sstate = "TRACE_%s_ENABLED" % e.name.upper(),
             dstate = e.api(e.QEMU_DSTATE))

-    out('TraceEvent *%(group)s_trace_events[] = {',
+    out('static TraceEvent *%(group)s_trace_events[] = {',
         group = group.lower())

     for e in events:
diff --git a/target/hexagon/gen_dectree_import.c
b/target/hexagon/gen_dectree_import.c
index 5b7ecfc6b3..20caee5a2f 100644
--- a/target/hexagon/gen_dectree_import.c
+++ b/target/hexagon/gen_dectree_import.c
@@ -41,7 +41,7 @@ const char * const opcode_names[] = {
  *         "Add 32-bit registers",
  *         { RdV=RsV+RtV;})
  */
-const char * const opcode_syntax[XX_LAST_OPCODE] = {
+static const char * const opcode_syntax[XX_LAST_OPCODE] = {
 #define Q6INSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
    [TAG] = BEH,
 #define EXTINSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 35d790cdd5..586e70dd6a 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -65,7 +65,7 @@ const char * const opcode_wregs[] = {
 #undef IMMINFO
 };

-const char * const opcode_short_semantics[] = {
+static const char * const opcode_short_semantics[] = {
 #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
 #include "shortcode_generated.h.inc"
 #undef DEF_SHORTCODE
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 6b3e9467f1..69d3bc2a9b 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -78,7 +78,7 @@ struct CPUID2CacheDescriptorInfo {
  * Known CPUID 2 cache descriptors.
  * From Intel SDM Volume 2A, CPUID instruction
  */
-struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
+static struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
     [0x06] = { .level = 1, .type = INSTRUCTION_CACHE, .size =   8 * KiB,
                .associativity = 4,  .line_size = 32, },
     [0x08] = { .level = 1, .type = INSTRUCTION_CACHE, .size =  16 * KiB,
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 050dcf2d42..56c54227f7 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -97,7 +97,7 @@ static const S390FeatInit qemu_max_cpu_feat_init = {
S390_FEAT_LIST_QEMU_MAX };
 static S390FeatBitmap qemu_max_cpu_feat;

 /* features part of a base model but not relevant for finding a base model */
-S390FeatBitmap ignored_base_feat;
+static S390FeatBitmap ignored_base_feat;

 void s390_cpudef_featoff(uint8_t gen, uint8_t ec_ga, S390Feat feat)
 {
diff --git a/target/xtensa/core-dc232b/xtensa-modules.c.inc
b/target/xtensa/core-dc232b/xtensa-modules.c.inc
index 164df3b1a4..8bef6535ba 100644
--- a/target/xtensa/core-dc232b/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc232b/xtensa-modules.c.inc
@@ -14060,7 +14060,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dc233c/xtensa-modules.c.inc
b/target/xtensa/core-dc233c/xtensa-modules.c.inc
index 0f32f0804a..24a63a4faf 100644
--- a/target/xtensa/core-dc233c/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc233c/xtensa-modules.c.inc
@@ -15187,7 +15187,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de212/xtensa-modules.c.inc
b/target/xtensa/core-de212/xtensa-modules.c.inc
index 480c68d3c6..19f0d7f5b6 100644
--- a/target/xtensa/core-de212/xtensa-modules.c.inc
+++ b/target/xtensa/core-de212/xtensa-modules.c.inc
@@ -14525,7 +14525,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
index 129c023514..e35ca06243 100644
--- a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
+++ b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
@@ -20740,7 +20740,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
index 28ea3d75fe..4adc52fec3 100644
--- a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
+++ b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
@@ -171888,7 +171888,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   10, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-fsf/xtensa-modules.c.inc
b/target/xtensa/core-fsf/xtensa-modules.c.inc
index c32683ff77..7e7268a224 100644
--- a/target/xtensa/core-fsf/xtensa-modules.c.inc
+++ b/target/xtensa/core-fsf/xtensa-modules.c.inc
@@ -9808,7 +9808,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
index 7e87d216bd..10d56e0118 100644
--- a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
+++ b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
@@ -11348,7 +11348,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
index bc7cf44828..9c0c78e250 100644
--- a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
@@ -45099,7 +45099,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
index 28561147fc..863fcd5b4f 100644
--- a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
@@ -36369,7 +36369,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
-- 
2.17.1


-- 
Best regards,
Yuri Gribov

[PING^2] [PATCH] [NFC] Mark locally used symbols as static.
Posted by Yuri Gribov 3 years ago
Hi all,

This patch makes locally used symbols static to enable more compiler
optimizations on them. Some of the symbols turned out to not be used
at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
they were ok to delete).

The symbols have been identified with a pet project of mine:
https://github.com/yugr/Localizer

Link to patch: https://patchew.org/QEMU/CAJOtW+5DDMsr8QJQxaa1OHT79rpMJCrwkYbuaRTynR_ngUxgHA@mail.gmail.com/

From 4e790fd06becfbbf6fb106ac52ae1e4515f1ac73 Mon Sep 17 00:00:00 2001
From: Yury Gribov <tetra2005@gmail.com>
Date: Sat, 20 Mar 2021 23:39:15 +0300
Subject: [PATCH] Mark locally used symbols as static.

Signed-off-by: Yury Gribov <tetra2005@gmail.com>
Acked-by: Max Filippov <jcmvbkbc@gmail.com> (xtensa)
Acked-by: David Gibson <david@gibson.dropbear.id.au> (ppc)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> (tracetool)
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com> (hexagon)
---
 disas/alpha.c                                 | 16 ++--
 disas/m68k.c                                  | 78 ++++++++---------
 disas/mips.c                                  | 14 ++--
 disas/nios2.c                                 | 84 +++++++++----------
 disas/ppc.c                                   | 26 +++---
 disas/riscv.c                                 |  2 +-
 pc-bios/optionrom/linuxboot_dma.c             |  4 +-
 scripts/tracetool/format/c.py                 |  2 +-
 target/hexagon/gen_dectree_import.c           |  2 +-
 target/hexagon/opcodes.c                      |  2 +-
 target/i386/cpu.c                             |  2 +-
 target/s390x/cpu_models.c                     |  2 +-
 .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
 .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
 target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
 .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
 .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
 target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
 .../xtensa-modules.c.inc                      |  2 +-
 .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
 .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
 21 files changed, 125 insertions(+), 127 deletions(-)

diff --git a/disas/alpha.c b/disas/alpha.c
index 3db90fa665..361a4ed101 100644
--- a/disas/alpha.c
+++ b/disas/alpha.c
@@ -56,8 +56,8 @@ struct alpha_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct alpha_opcode alpha_opcodes[];
-extern const unsigned alpha_num_opcodes;
+static const struct alpha_opcode alpha_opcodes[];
+static const unsigned alpha_num_opcodes;

 /* Values defined for the flags field of a struct alpha_opcode.  */

@@ -137,8 +137,8 @@ struct alpha_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the alpha_opcodes table.  */

-extern const struct alpha_operand alpha_operands[];
-extern const unsigned alpha_num_operands;
+static const struct alpha_operand alpha_operands[];
+static const unsigned alpha_num_operands;

 /* Values defined for the flags field of a struct alpha_operand.  */

@@ -293,7 +293,7 @@ static int extract_ev6hwjhint (unsigned, int *);

 /* The operands table  */

-const struct alpha_operand alpha_operands[] =
+static const struct alpha_operand alpha_operands[] =
 {
   /* The fields are bits, shift, insert, extract, flags */
   /* The zero index is used to indicate end-of-list */
@@ -424,7 +424,7 @@ const struct alpha_operand alpha_operands[] =
     insert_ev6hwjhint, extract_ev6hwjhint }
 };

-const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_operands =
sizeof(alpha_operands)/sizeof(*alpha_operands);

 /* The RB field when it is the same as the RA field in the same insn.
    This operand is marked fake.  The insertion function just copies
@@ -706,7 +706,7 @@ extract_ev6hwjhint(unsigned insn, int *invalid
ATTRIBUTE_UNUSED)
 		that were not assigned to a particular extension.
 */

-const struct alpha_opcode alpha_opcodes[] = {
+static const struct alpha_opcode alpha_opcodes[] = {
   { "halt",		SPCD(0x00,0x0000), BASE, ARG_NONE },
   { "draina",		SPCD(0x00,0x0002), BASE, ARG_NONE },
   { "bpt",		SPCD(0x00,0x0080), BASE, ARG_NONE },
@@ -1732,7 +1732,7 @@ const struct alpha_opcode alpha_opcodes[] = {
   { "bgt",		BRA(0x3F), BASE, ARG_BRA },
 };

-const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
+static ATTRIBUTE_UNUSED const unsigned alpha_num_opcodes =
sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);

 /* OSF register names.  */

diff --git a/disas/m68k.c b/disas/m68k.c
index aefaecfbd6..903d5cfec4 100644
--- a/disas/m68k.c
+++ b/disas/m68k.c
@@ -95,29 +95,29 @@ struct floatformat

 /* floatformats for IEEE single and double, big and little endian.  */

-extern const struct floatformat floatformat_ieee_single_big;
-extern const struct floatformat floatformat_ieee_single_little;
-extern const struct floatformat floatformat_ieee_double_big;
-extern const struct floatformat floatformat_ieee_double_little;
+static const struct floatformat floatformat_ieee_single_big;
+static const struct floatformat floatformat_ieee_single_little;
+static const struct floatformat floatformat_ieee_double_big;
+static const struct floatformat floatformat_ieee_double_little;

 /* floatformat for ARM IEEE double, little endian bytes and big endian words */

-extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
+static const struct floatformat floatformat_ieee_double_littlebyte_bigword;

 /* floatformats for various extendeds.  */

-extern const struct floatformat floatformat_i387_ext;
-extern const struct floatformat floatformat_m68881_ext;
-extern const struct floatformat floatformat_i960_ext;
-extern const struct floatformat floatformat_m88110_ext;
-extern const struct floatformat floatformat_m88110_harris_ext;
-extern const struct floatformat floatformat_arm_ext_big;
-extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
+static const struct floatformat floatformat_i387_ext;
+static const struct floatformat floatformat_m68881_ext;
+static const struct floatformat floatformat_i960_ext;
+static const struct floatformat floatformat_m88110_ext;
+static const struct floatformat floatformat_m88110_harris_ext;
+static const struct floatformat floatformat_arm_ext_big;
+static const struct floatformat floatformat_arm_ext_littlebyte_bigword;
 /* IA-64 Floating Point register spilt into memory.  */
-extern const struct floatformat floatformat_ia64_spill_big;
-extern const struct floatformat floatformat_ia64_spill_little;
-extern const struct floatformat floatformat_ia64_quad_big;
-extern const struct floatformat floatformat_ia64_quad_little;
+static const struct floatformat floatformat_ia64_spill_big;
+static const struct floatformat floatformat_ia64_spill_little;
+static const struct floatformat floatformat_ia64_quad_big;
+static const struct floatformat floatformat_ia64_quad_little;

 /* Convert from FMT to a double.
    FROM is the address of the extended float.
@@ -514,10 +514,10 @@ struct m68k_opcode_alias
    ]  first word, bit 10
 */

-extern const struct m68k_opcode m68k_opcodes[];
-extern const struct m68k_opcode_alias m68k_opcode_aliases[];
+static const struct m68k_opcode m68k_opcodes[];
+static const struct m68k_opcode_alias m68k_opcode_aliases[];

-extern const int m68k_numopcodes, m68k_numaliases;
+static const int m68k_numopcodes, m68k_numaliases;

 /* **** End of m68k-opcode.h */
 /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
@@ -2072,7 +2072,7 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
    be consecutive.  If they aren't, the assembler will bomb at
    runtime.  */

-const struct m68k_opcode m68k_opcodes[] =
+static const struct m68k_opcode m68k_opcodes[] =
 {
 {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
 {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
@@ -4212,7 +4212,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
 };

-const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
+static const int m68k_numopcodes = sizeof m68k_opcodes / sizeof
m68k_opcodes[0];

 /* These aliases used to be in the above table, each one duplicating
    all of the entries for its primary exactly.  This table was
@@ -4221,7 +4221,7 @@ const int m68k_numopcodes = sizeof m68k_opcodes
/ sizeof m68k_opcodes[0];
    aliases above that could be moved down here, except for very minor
    differences.  */

-const struct m68k_opcode_alias m68k_opcode_aliases[] =
+static const struct m68k_opcode_alias m68k_opcode_aliases[] =
 {
   { "add",	"addw", },
   { "adda",	"addaw", },
@@ -4465,7 +4465,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =

 };

-const int m68k_numaliases =
+static ATTRIBUTE_UNUSED const int m68k_numaliases =
   sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
 /* **** End of m68k-opc.c */
 /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
@@ -4523,28 +4523,28 @@ floatformat_always_valid (const struct
floatformat *fmt ATTRIBUTE_UNUSED,
 #define FLOATFORMAT_CHAR_BIT 8

 /* floatformats for IEEE single and double, big and little endian.  */
-const struct floatformat floatformat_ieee_single_big =
+static const struct floatformat floatformat_ieee_single_big =
 {
   floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_single_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_single_little =
 {
   floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
   floatformat_intbit_no,
   "floatformat_ieee_single_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_big =
+static const struct floatformat floatformat_ieee_double_big =
 {
   floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
   "floatformat_ieee_double_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ieee_double_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_little =
 {
   floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4555,7 +4555,7 @@ const struct floatformat floatformat_ieee_double_little =
 /* floatformat for IEEE double, little endian byte order, with big endian word
    ordering, as on the ARM.  */

-const struct floatformat floatformat_ieee_double_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ieee_double_littlebyte_bigword =
 {
   floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
   floatformat_intbit_no,
@@ -4586,14 +4586,14 @@ floatformat_i387_ext_is_valid (const struct
floatformat *fmt, const char *from)
     return 1;
 }

-const struct floatformat floatformat_i387_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i387_ext =
 {
   floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_i387_ext",
   floatformat_i387_ext_is_valid
 };
-const struct floatformat floatformat_m68881_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m68881_ext =
 {
   /* Note that the bits from 16 to 31 are unused.  */
   floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4601,7 +4601,7 @@ const struct floatformat floatformat_m68881_ext =
   "floatformat_m68881_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_i960_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_i960_ext =
 {
   /* Note that the bits from 0 to 15 are unused.  */
   floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4609,14 +4609,14 @@ const struct floatformat floatformat_i960_ext =
   "floatformat_i960_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_ext =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_m88110_ext =
 {
   floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
   floatformat_intbit_yes,
   "floatformat_m88110_ext",
   floatformat_always_valid
 };
-const struct floatformat floatformat_m88110_harris_ext =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_m88110_harris_ext =
 {
   /* Harris uses raw format 128 bytes long, but the number is just an ieee
      double, and the last 64 bits are wasted. */
@@ -4625,7 +4625,7 @@ const struct floatformat floatformat_m88110_harris_ext =
   "floatformat_m88110_ext_harris",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_arm_ext_big =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4633,7 +4633,7 @@ const struct floatformat floatformat_arm_ext_big =
   "floatformat_arm_ext_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_arm_ext_littlebyte_bigword =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
 {
   /* Bits 1 to 16 are unused.  */
   floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
@@ -4641,28 +4641,28 @@ const struct floatformat
floatformat_arm_ext_littlebyte_bigword =
   "floatformat_arm_ext_littlebyte_bigword",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_spill_big =
 {
   floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_spill_little =
+static ATTRIBUTE_UNUSED const struct floatformat
floatformat_ia64_spill_little =
 {
   floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
   floatformat_intbit_yes,
   "floatformat_ia64_spill_little",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_big =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_big =
 {
   floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
   "floatformat_ia64_quad_big",
   floatformat_always_valid
 };
-const struct floatformat floatformat_ia64_quad_little =
+static ATTRIBUTE_UNUSED const struct floatformat floatformat_ia64_quad_little =
 {
   floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
   floatformat_intbit_no,
diff --git a/disas/mips.c b/disas/mips.c
index b9a5204304..b43700be9c 100644
--- a/disas/mips.c
+++ b/disas/mips.c
@@ -931,10 +931,9 @@ enum
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-extern const struct mips_opcode mips_builtin_opcodes[];
-extern const int bfd_mips_num_builtin_opcodes;
-extern struct mips_opcode *mips_opcodes;
-extern int bfd_mips_num_opcodes;
+static const struct mips_opcode mips_builtin_opcodes[];
+static struct mips_opcode *mips_opcodes;
+static int bfd_mips_num_opcodes;
 #define NUMOPCODES bfd_mips_num_opcodes


@@ -1259,7 +1258,7 @@ extern const int bfd_mips16_num_opcodes;
    Many instructions are short hand for other instructions (i.e., The
    jal <register> instruction is short for jalr <register>).  */

-const struct mips_opcode mips_builtin_opcodes[] =
+static const struct mips_opcode mips_builtin_opcodes[] =
 {
 /* These instructions appear first so that the disassembler will find
    them first.  The assemblers uses a hash table based on the
@@ -3509,13 +3508,12 @@ const struct mips_opcode mips_builtin_opcodes[] =

 #define MIPS_NUM_OPCODES \
 	((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
-const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;

 /* const removed from the following to allow for dynamic extensions to the
  * built-in instruction set. */
-struct mips_opcode *mips_opcodes =
+static struct mips_opcode *mips_opcodes =
   (struct mips_opcode *) mips_builtin_opcodes;
-int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
+static int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
 #undef MIPS_NUM_OPCODES

 /* Mips instructions are at maximum this many bytes long.  */
diff --git a/disas/nios2.c b/disas/nios2.c
index c3e82140c7..089ae6ef6f 100644
--- a/disas/nios2.c
+++ b/disas/nios2.c
@@ -1720,38 +1720,38 @@ struct nios2_reg


 /* These are the data structures used to hold the instruction information.  */
-extern const struct nios2_opcode nios2_r1_opcodes[];
-extern const int nios2_num_r1_opcodes;
-extern const struct nios2_opcode nios2_r2_opcodes[];
-extern const int nios2_num_r2_opcodes;
-extern struct nios2_opcode *nios2_opcodes;
-extern int nios2_num_opcodes;
+static const struct nios2_opcode nios2_r1_opcodes[];
+static const int nios2_num_r1_opcodes;
+static const struct nios2_opcode nios2_r2_opcodes[];
+static const int nios2_num_r2_opcodes;
+static struct nios2_opcode *nios2_opcodes;
+static int nios2_num_opcodes;

 /* These are the data structures used to hold the register information.  */
-extern const struct nios2_reg nios2_builtin_regs[];
-extern struct nios2_reg *nios2_regs;
-extern const int nios2_num_builtin_regs;
-extern int nios2_num_regs;
+static const struct nios2_reg nios2_builtin_regs[];
+static struct nios2_reg *nios2_regs;
+static const int nios2_num_builtin_regs;
+static int nios2_num_regs;

 /* Return the opcode descriptor for a single instruction.  */
-extern const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long, unsigned long);

 /* Lookup tables for R2 immediate decodings.  */
-extern unsigned int nios2_r2_asi_n_mappings[];
-extern const int nios2_num_r2_asi_n_mappings;
-extern unsigned int nios2_r2_shi_n_mappings[];
-extern const int nios2_num_r2_shi_n_mappings;
-extern unsigned int nios2_r2_andi_n_mappings[];
-extern const int nios2_num_r2_andi_n_mappings;
+static unsigned int nios2_r2_asi_n_mappings[];
+static const int nios2_num_r2_asi_n_mappings;
+static unsigned int nios2_r2_shi_n_mappings[];
+static const int nios2_num_r2_shi_n_mappings;
+static unsigned int nios2_r2_andi_n_mappings[];
+static const int nios2_num_r2_andi_n_mappings;

 /* Lookup table for 3-bit register decodings.  */
-extern int nios2_r2_reg3_mappings[];
-extern const int nios2_num_r2_reg3_mappings;
+static int nios2_r2_reg3_mappings[];
+static const int nios2_num_r2_reg3_mappings;

 /* Lookup table for REG_RANGE value list decodings.  */
-extern unsigned long nios2_r2_reg_range_mappings[];
-extern const int nios2_num_r2_reg_range_mappings;
+static unsigned long nios2_r2_reg_range_mappings[];
+static const int nios2_num_r2_reg_range_mappings;

 #endif /* _NIOS2_H */

@@ -1760,7 +1760,7 @@ extern const int nios2_num_r2_reg_range_mappings;
 */
 /* Register string table */

-const struct nios2_reg nios2_builtin_regs[] = {
+static const struct nios2_reg nios2_builtin_regs[] = {
   /* Standard register names.  */
   {"zero", 0, REG_NORMAL},
   {"at", 1, REG_NORMAL},			/* assembler temporary */
@@ -1896,17 +1896,17 @@ const struct nios2_reg nios2_builtin_regs[] = {

 #define NIOS2_NUM_REGS \
        ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0])))
-const int nios2_num_builtin_regs = NIOS2_NUM_REGS;
+static ATTRIBUTE_UNUSED const int nios2_num_builtin_regs = NIOS2_NUM_REGS;

 /* This is not const in order to allow for dynamic extensions to the
    built-in instruction set.  */
-struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
-int nios2_num_regs = NIOS2_NUM_REGS;
+static struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs;
+static int nios2_num_regs = NIOS2_NUM_REGS;
 #undef NIOS2_NUM_REGS

 /* This is the opcode table used by the Nios II GNU as, disassembler
    and GDB.  */
-const struct nios2_opcode nios2_r1_opcodes[] =
+static const struct nios2_opcode nios2_r1_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2134,10 +2134,10 @@ const struct nios2_opcode nios2_r1_opcodes[] =

 #define NIOS2_NUM_R1_OPCODES \
        ((sizeof nios2_r1_opcodes) / (sizeof (nios2_r1_opcodes[0])))
-const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;
+static const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES;


-const struct nios2_opcode nios2_r2_opcodes[] =
+static const struct nios2_opcode nios2_r2_opcodes[] =
 {
   /* { name, args, args_test, num_args, size, format,
        match, mask, pinfo, overflow } */
@@ -2474,37 +2474,37 @@ const struct nios2_opcode nios2_r2_opcodes[] =

 #define NIOS2_NUM_R2_OPCODES \
        ((sizeof nios2_r2_opcodes) / (sizeof (nios2_r2_opcodes[0])))
-const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;
+static const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES;

 /* Default to using the R1 instruction tables.  */
-struct nios2_opcode *nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes;
-int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
+static ATTRIBUTE_UNUSED struct nios2_opcode *nios2_opcodes = (struct
nios2_opcode *) nios2_r1_opcodes;
+static ATTRIBUTE_UNUSED int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES;
 #undef NIOS2_NUM_R1_OPCODES
 #undef NIOS2_NUM_R2_OPCODES

 /* Decodings for R2 asi.n (addi.n/subi.n) immediate values.  */
-unsigned int nios2_r2_asi_n_mappings[] =
+static unsigned int nios2_r2_asi_n_mappings[] =
   {1, 2, 4, 8, 16, 32, 64, 128};
-const int nios2_num_r2_asi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_asi_n_mappings = 8;

 /* Decodings for R2 shi.n (slli.n/srli.n) immediate values.  */
-unsigned int nios2_r2_shi_n_mappings[] =
+static unsigned int nios2_r2_shi_n_mappings[] =
   {1, 2, 3, 8, 12, 16, 24, 31};
-const int nios2_num_r2_shi_n_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_shi_n_mappings = 8;

 /* Decodings for R2 andi.n immediate values.  */
-unsigned int nios2_r2_andi_n_mappings[] =
+static unsigned int nios2_r2_andi_n_mappings[] =
   {1, 2, 3, 4, 8, 0xf, 0x10, 0x1f,
    0x20, 0x3f, 0x7f, 0x80, 0xff, 0x7ff, 0xff00, 0xffff};
-const int nios2_num_r2_andi_n_mappings = 16;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_andi_n_mappings = 16;

 /* Decodings for R2 3-bit register fields.  */
-int nios2_r2_reg3_mappings[] =
+static int nios2_r2_reg3_mappings[] =
   {16, 17, 2, 3, 4, 5, 6, 7};
-const int nios2_num_r2_reg3_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg3_mappings = 8;

 /* Decodings for R2 push.n/pop.n REG_RANGE value list.  */
-unsigned long nios2_r2_reg_range_mappings[] = {
+static unsigned long nios2_r2_reg_range_mappings[] = {
   0x00010000,
   0x00030000,
   0x00070000,
@@ -2514,7 +2514,7 @@ unsigned long nios2_r2_reg_range_mappings[] = {
   0x007f0000,
   0x00ff0000
 };
-const int nios2_num_r2_reg_range_mappings = 8;
+static ATTRIBUTE_UNUSED const int nios2_num_r2_reg_range_mappings = 8;

 /*#include "sysdep.h"
 #include "dis-asm.h"
@@ -2668,7 +2668,7 @@ nios2_init_opcode_hash (nios2_disassembler_state *state)

 /* Return a pointer to an nios2_opcode struct for a given instruction
    word OPCODE for bfd machine MACH, or NULL if there is an error.  */
-const struct nios2_opcode *
+static const struct nios2_opcode *
 nios2_find_opcode_hash (unsigned long opcode, unsigned long mach)
 {
   nios2_opcode_hash *entry;
diff --git a/disas/ppc.c b/disas/ppc.c
index 02be878198..30ca8acf53 100644
--- a/disas/ppc.c
+++ b/disas/ppc.c
@@ -74,8 +74,8 @@ struct powerpc_opcode
 /* The table itself is sorted by major opcode number, and is otherwise
    in the order in which the disassembler should consider
    instructions.  */
-extern const struct powerpc_opcode powerpc_opcodes[];
-extern const int powerpc_num_opcodes;
+static const struct powerpc_opcode powerpc_opcodes[];
+static const int powerpc_num_opcodes;

 /* Values defined for the flags field of a struct powerpc_opcode.  */

@@ -225,8 +225,8 @@ struct powerpc_operand
 /* Elements in the table are retrieved by indexing with values from
    the operands field of the powerpc_opcodes table.  */

-extern const struct powerpc_operand powerpc_operands[];
-extern const unsigned int num_powerpc_operands;
+static const struct powerpc_operand powerpc_operands[];
+static const unsigned int num_powerpc_operands;

 /* Values defined for the flags field of a struct powerpc_operand.  */

@@ -341,8 +341,8 @@ struct powerpc_macro
   const char *format;
 };

-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
+static const struct powerpc_macro powerpc_macros[];
+static const int powerpc_num_macros;

 /* ppc-opc.c -- PowerPC opcode list
    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
@@ -425,7 +425,7 @@ static long extract_tbr (unsigned long, int, int *);
    omit the parens, since the macros are never used in a context where
    the addition will be ambiguous.  */

-const struct powerpc_operand powerpc_operands[] =
+static const struct powerpc_operand powerpc_operands[] =
 {
   /* The zero index is used to indicate the end of the list of
      operands.  */
@@ -893,8 +893,8 @@ const struct powerpc_operand powerpc_operands[] =
   { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
 };

-const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
-					   / sizeof (powerpc_operands[0]));
+static ATTRIBUTE_UNUSED const unsigned int num_powerpc_operands =
+  sizeof (powerpc_operands) / sizeof (powerpc_operands[0]);

 /* The functions used to insert and extract complicated operands.  */

@@ -2011,7 +2011,7 @@ extract_tbr (unsigned long insn,
    specific instructions before more general instructions.  It is also
    sorted by major opcode.  */

-const struct powerpc_opcode powerpc_opcodes[] = {
+static const struct powerpc_opcode powerpc_opcodes[] = {
 { "attn",    X(0,256), X_MASK,		POWER4,		{ 0 } },
 { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,	PPC64,		{ RA, SI } },
 { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,	PPC64,		{ RA, SI } },
@@ -5036,7 +5036,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {

 };

-const int powerpc_num_opcodes =
+static const int powerpc_num_opcodes =
   sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);

 /* The macro table.  This is only used by the assembler.  */
@@ -5051,7 +5051,7 @@ const int powerpc_num_opcodes =
    the underlying instructions don't support extracting 0 bits but do
    support extracting the whole word (32 bits in this case).  */

-const struct powerpc_macro powerpc_macros[] = {
+static const struct powerpc_macro powerpc_macros[] = {
 { "extldi",  4,   PPC64,	"rldicr %0,%1,%3,(%2)-1" },
 { "extldi.", 4,   PPC64,	"rldicr. %0,%1,%3,(%2)-1" },
 { "extrdi",  4,   PPC64,	"rldicl %0,%1,(%2)+(%3),64-(%2)" },
@@ -5093,7 +5093,7 @@ const struct powerpc_macro powerpc_macros[] = {
 { "clrlslwi.",4,  PPCCOM,	"rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
 };

-const int powerpc_num_macros =
+static ATTRIBUTE_UNUSED const int powerpc_num_macros =
   sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);


diff --git a/disas/riscv.c b/disas/riscv.c
index 278d9be924..0d124d8b61 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -789,7 +789,7 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {

 /* instruction metadata */

-const rv_opcode_data opcode_data[] = {
+static const rv_opcode_data opcode_data[] = {
     { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
     { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
     { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },
diff --git a/pc-bios/optionrom/linuxboot_dma.c
b/pc-bios/optionrom/linuxboot_dma.c
index cbcf6679d9..a3d5cf76aa 100644
--- a/pc-bios/optionrom/linuxboot_dma.c
+++ b/pc-bios/optionrom/linuxboot_dma.c
@@ -132,9 +132,9 @@ static uint32_t get_e801_addr(void)
 }

 /* Force the asm name without leading underscore, even on Win32. */
-extern void load_kernel(void) asm("load_kernel");
+static void load_kernel(void) asm("load_kernel");

-void load_kernel(void)
+static __attribute__((used)) void load_kernel(void)
 {
     void *setup_addr;
     void *initrd_addr;
diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
index c390c1844a..7e89ba37f9 100644
--- a/scripts/tracetool/format/c.py
+++ b/scripts/tracetool/format/c.py
@@ -49,7 +49,7 @@ def generate(events, backend, group):
             sstate = "TRACE_%s_ENABLED" % e.name.upper(),
             dstate = e.api(e.QEMU_DSTATE))

-    out('TraceEvent *%(group)s_trace_events[] = {',
+    out('static TraceEvent *%(group)s_trace_events[] = {',
         group = group.lower())

     for e in events:
diff --git a/target/hexagon/gen_dectree_import.c
b/target/hexagon/gen_dectree_import.c
index 5b7ecfc6b3..20caee5a2f 100644
--- a/target/hexagon/gen_dectree_import.c
+++ b/target/hexagon/gen_dectree_import.c
@@ -41,7 +41,7 @@ const char * const opcode_names[] = {
  *         "Add 32-bit registers",
  *         { RdV=RsV+RtV;})
  */
-const char * const opcode_syntax[XX_LAST_OPCODE] = {
+static const char * const opcode_syntax[XX_LAST_OPCODE] = {
 #define Q6INSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
    [TAG] = BEH,
 #define EXTINSN(TAG, BEH, ATTRIBS, DESCR, SEM) \
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 35d790cdd5..586e70dd6a 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -65,7 +65,7 @@ const char * const opcode_wregs[] = {
 #undef IMMINFO
 };

-const char * const opcode_short_semantics[] = {
+static const char * const opcode_short_semantics[] = {
 #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
 #include "shortcode_generated.h.inc"
 #undef DEF_SHORTCODE
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 6b3e9467f1..69d3bc2a9b 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -78,7 +78,7 @@ struct CPUID2CacheDescriptorInfo {
  * Known CPUID 2 cache descriptors.
  * From Intel SDM Volume 2A, CPUID instruction
  */
-struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
+static struct CPUID2CacheDescriptorInfo cpuid2_cache_descriptors[] = {
     [0x06] = { .level = 1, .type = INSTRUCTION_CACHE, .size =   8 * KiB,
                .associativity = 4,  .line_size = 32, },
     [0x08] = { .level = 1, .type = INSTRUCTION_CACHE, .size =  16 * KiB,
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 050dcf2d42..56c54227f7 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -97,7 +97,7 @@ static const S390FeatInit qemu_max_cpu_feat_init = {
S390_FEAT_LIST_QEMU_MAX };
 static S390FeatBitmap qemu_max_cpu_feat;

 /* features part of a base model but not relevant for finding a base model */
-S390FeatBitmap ignored_base_feat;
+static S390FeatBitmap ignored_base_feat;

 void s390_cpudef_featoff(uint8_t gen, uint8_t ec_ga, S390Feat feat)
 {
diff --git a/target/xtensa/core-dc232b/xtensa-modules.c.inc
b/target/xtensa/core-dc232b/xtensa-modules.c.inc
index 164df3b1a4..8bef6535ba 100644
--- a/target/xtensa/core-dc232b/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc232b/xtensa-modules.c.inc
@@ -14060,7 +14060,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dc233c/xtensa-modules.c.inc
b/target/xtensa/core-dc233c/xtensa-modules.c.inc
index 0f32f0804a..24a63a4faf 100644
--- a/target/xtensa/core-dc233c/xtensa-modules.c.inc
+++ b/target/xtensa/core-dc233c/xtensa-modules.c.inc
@@ -15187,7 +15187,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de212/xtensa-modules.c.inc
b/target/xtensa/core-de212/xtensa-modules.c.inc
index 480c68d3c6..19f0d7f5b6 100644
--- a/target/xtensa/core-de212/xtensa-modules.c.inc
+++ b/target/xtensa/core-de212/xtensa-modules.c.inc
@@ -14525,7 +14525,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
index 129c023514..e35ca06243 100644
--- a/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
+++ b/target/xtensa/core-de233_fpu/xtensa-modules.c.inc
@@ -20740,7 +20740,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
index 28ea3d75fe..4adc52fec3 100644
--- a/target/xtensa/core-dsp3400/xtensa-modules.c.inc
+++ b/target/xtensa/core-dsp3400/xtensa-modules.c.inc
@@ -171888,7 +171888,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   10, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-fsf/xtensa-modules.c.inc
b/target/xtensa/core-fsf/xtensa-modules.c.inc
index c32683ff77..7e7268a224 100644
--- a/target/xtensa/core-fsf/xtensa-modules.c.inc
+++ b/target/xtensa/core-fsf/xtensa-modules.c.inc
@@ -9808,7 +9808,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
index 7e87d216bd..10d56e0118 100644
--- a/target/xtensa/core-sample_controller/xtensa-modules.c.inc
+++ b/target/xtensa/core-sample_controller/xtensa-modules.c.inc
@@ -11348,7 +11348,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   3 /* insn_size */, 0,
   3, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
index bc7cf44828..9c0c78e250 100644
--- a/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_kc705_be/xtensa-modules.c.inc
@@ -45099,7 +45099,7 @@ length_decoder (const unsigned char *insn)

 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   1 /* big-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
diff --git a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
index 28561147fc..863fcd5b4f 100644
--- a/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
+++ b/target/xtensa/core-test_mmuhifi_c3/xtensa-modules.c.inc
@@ -36369,7 +36369,7 @@ length_decoder (const unsigned char *insn)
 
 /* Top-level ISA structure.  */

-xtensa_isa_internal xtensa_modules = {
+static xtensa_isa_internal xtensa_modules = {
   0 /* little-endian */,
   8 /* insn_size */, 0,
   4, formats, format_decoder, length_decoder,
-- 
2.17.1

--
Best regards,
Yuri Gribov

Re: [PING^2] [PATCH] [NFC] Mark locally used symbols as static.
Posted by Philippe Mathieu-Daudé 3 years ago
Hi Yuri,

On 4/15/21 7:27 PM, Yuri Gribov wrote:
> Hi all,
> 
> This patch makes locally used symbols static to enable more compiler
> optimizations on them. Some of the symbols turned out to not be used
> at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
> they were ok to delete).

It would be easier to integrate your work if your split it
in multiple patches, and send them as a series, and add the
Reviewed-by/Acked-by tags to the corresponding ones (these
could be queued via the qemu-trival tree already). See below.

> The symbols have been identified with a pet project of mine:
> https://github.com/yugr/Localizer
> 
> Link to patch: https://patchew.org/QEMU/CAJOtW+5DDMsr8QJQxaa1OHT79rpMJCrwkYbuaRTynR_ngUxgHA@mail.gmail.com/
> 
> From 4e790fd06becfbbf6fb106ac52ae1e4515f1ac73 Mon Sep 17 00:00:00 2001
> From: Yury Gribov <tetra2005@gmail.com>
> Date: Sat, 20 Mar 2021 23:39:15 +0300
> Subject: [PATCH] Mark locally used symbols as static.
> 
> Signed-off-by: Yury Gribov <tetra2005@gmail.com>
> Acked-by: Max Filippov <jcmvbkbc@gmail.com> (xtensa)
> Acked-by: David Gibson <david@gibson.dropbear.id.au> (ppc)
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> (tracetool)
> Reviewed-by: Taylor Simpson <tsimpson@quicinc.com> (hexagon)
> ---
>  disas/alpha.c                                 | 16 ++--
>  disas/m68k.c                                  | 78 ++++++++---------
>  disas/mips.c                                  | 14 ++--
>  disas/nios2.c                                 | 84 +++++++++----------
>  disas/ppc.c                                   | 26 +++---
>  disas/riscv.c                                 |  2 +-

patch #1, "disas: Mark locally used symbols as static"

>  pc-bios/optionrom/linuxboot_dma.c             |  4 +-

patch #2, "pc-bios/optionrom: Mark locally used symbols as static"

>  scripts/tracetool/format/c.py                 |  2 +-

patch #3, "scripts/tracetool: Mark locally used symbols as static"

>  target/hexagon/gen_dectree_import.c           |  2 +-
>  target/hexagon/opcodes.c                      |  2 +-

patch #4, "target/hexagon: Mark locally used symbols as static"

>  target/i386/cpu.c                             |  2 +-

patch #5, "target/i386: Mark locally used symbols as static"

>  target/s390x/cpu_models.c                     |  2 +-

patch #6, "target/s390x: Mark locally used symbols as static"

>  .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
>  .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
>  target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
>  .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
>  .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
>  target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
>  .../xtensa-modules.c.inc                      |  2 +-
>  .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
>  .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-

patch #7, "target/xtensa: Mark locally used symbols as static"

>  21 files changed, 125 insertions(+), 127 deletions(-)

Regards,

Phil.


Re: [PING^2] [PATCH] [NFC] Mark locally used symbols as static.
Posted by Palmer Dabbelt 3 years ago
On Thu, 15 Apr 2021 10:27:42 PDT (-0700), tetra2005@gmail.com wrote:
> Hi all,
>
> This patch makes locally used symbols static to enable more compiler
> optimizations on them. Some of the symbols turned out to not be used
> at all so I marked them with ATTRIBUTE_UNUSED (as I wasn't sure if
> they were ok to delete).
>
> The symbols have been identified with a pet project of mine:
> https://github.com/yugr/Localizer
>
> Link to patch: https://patchew.org/QEMU/CAJOtW+5DDMsr8QJQxaa1OHT79rpMJCrwkYbuaRTynR_ngUxgHA@mail.gmail.com/
>
> From 4e790fd06becfbbf6fb106ac52ae1e4515f1ac73 Mon Sep 17 00:00:00 2001
> From: Yury Gribov <tetra2005@gmail.com>
> Date: Sat, 20 Mar 2021 23:39:15 +0300
> Subject: [PATCH] Mark locally used symbols as static.
>
> Signed-off-by: Yury Gribov <tetra2005@gmail.com>
> Acked-by: Max Filippov <jcmvbkbc@gmail.com> (xtensa)
> Acked-by: David Gibson <david@gibson.dropbear.id.au> (ppc)
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> (tracetool)
> Reviewed-by: Taylor Simpson <tsimpson@quicinc.com> (hexagon)
> ---
>  disas/alpha.c                                 | 16 ++--
>  disas/m68k.c                                  | 78 ++++++++---------
>  disas/mips.c                                  | 14 ++--
>  disas/nios2.c                                 | 84 +++++++++----------
>  disas/ppc.c                                   | 26 +++---
>  disas/riscv.c                                 |  2 +-
>  pc-bios/optionrom/linuxboot_dma.c             |  4 +-
>  scripts/tracetool/format/c.py                 |  2 +-
>  target/hexagon/gen_dectree_import.c           |  2 +-
>  target/hexagon/opcodes.c                      |  2 +-
>  target/i386/cpu.c                             |  2 +-
>  target/s390x/cpu_models.c                     |  2 +-
>  .../xtensa/core-dc232b/xtensa-modules.c.inc   |  2 +-
>  .../xtensa/core-dc233c/xtensa-modules.c.inc   |  2 +-
>  target/xtensa/core-de212/xtensa-modules.c.inc |  2 +-
>  .../core-de233_fpu/xtensa-modules.c.inc       |  2 +-
>  .../xtensa/core-dsp3400/xtensa-modules.c.inc  |  2 +-
>  target/xtensa/core-fsf/xtensa-modules.c.inc   |  2 +-
>  .../xtensa-modules.c.inc                      |  2 +-
>  .../core-test_kc705_be/xtensa-modules.c.inc   |  2 +-
>  .../core-test_mmuhifi_c3/xtensa-modules.c.inc |  2 +-
>  21 files changed, 125 insertions(+), 127 deletions(-)

You might have better luck splitting these sorts of things up: when 
there's a patch that touches a bunch of different trees it can be 
unclear who is going to merge it, which is frequently how these sorts of 
things get lost.

> diff --git a/disas/riscv.c b/disas/riscv.c
> index 278d9be924..0d124d8b61 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -789,7 +789,7 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {
>
>  /* instruction metadata */
>
> -const rv_opcode_data opcode_data[] = {
> +static const rv_opcode_data opcode_data[] = {
>      { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
>      { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
>      { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },

Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> (RISC-V)

Thanks!