diff --git a/cli_classic.c b/cli_classic.c
index 9b9b451..1211989 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -114,8 +114,8 @@
 	int operation_specified = 0;
 	int i;
 
-	const char *optstring = "r:Rw:v:nVEfc:m:l:i:p:Lzh";
-	static struct option long_options[] = {
+	static const char optstring[] = "r:Rw:v:nVEfc:m:l:i:p:Lzh";
+	static const struct option long_options[] = {
 		{"read", 1, 0, 'r'},
 		{"write", 1, 0, 'w'},
 		{"erase", 0, 0, 'E'},
diff --git a/flash.h b/flash.h
index 250482f..91c4cf3 100644
--- a/flash.h
+++ b/flash.h
@@ -188,7 +188,7 @@
 };
 extern enum chipbustype buses_supported;
 extern int verbose;
-extern const char * const flashrom_version;
+extern const char flashrom_version[];
 extern char *chip_to_probe;
 void map_flash_registers(struct flashchip *flash);
 int read_memmapped(struct flashchip *flash, uint8_t *buf, int start, int len);
diff --git a/flashrom.c b/flashrom.c
index f3497d0..938579c 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -38,7 +38,7 @@
 #include "flashchips.h"
 #include "programmer.h"
 
-const char * const flashrom_version = FLASHROM_VERSION;
+const char flashrom_version[] = FLASHROM_VERSION;
 char *chip_to_probe = NULL;
 int verbose = 0;
 
diff --git a/ichspi.c b/ichspi.c
index a087a0b..66c8d51 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -948,10 +948,10 @@
 
 static void do_ich9_spi_frap(uint32_t frap, int i)
 {
-	const char *access_names[4] = {
+	static const char *const access_names[4] = {
 		"locked", "read-only", "write-only", "read-write"
 	};
-	const char *region_names[5] = {
+	static const char *const region_names[5] = {
 		"Flash Descriptor", "BIOS", "Management Engine",
 		"Gigabit Ethernet", "Platform Data"
 	};
diff --git a/print_wiki.c b/print_wiki.c
index 48e0122..db5743e 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -27,7 +27,7 @@
 #include "flashchips.h"
 #include "programmer.h"
 
-static const char * const wiki_header = "= Supported devices =\n\n\
+static const char wiki_header[] = "= Supported devices =\n\n\
 <div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \
 background-color:#eeeeee; align:right; border:1px solid #aabbcc;\"><small>\n\
 Please do '''not''' edit these tables in the wiki directly, they are \
@@ -35,16 +35,16 @@
 '''Last update:''' %s(generated by flashrom %s)\n</small></div>\n";
 
 #if CONFIG_INTERNAL == 1
-static const char * const chipset_th = "{| border=\"0\" style=\"font-size: smaller\"\n\
+static const char chipset_th[] = "{| border=\"0\" style=\"font-size: smaller\"\n\
 |- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
 ! align=\"left\" | Southbridge\n! align=\"left\" | PCI IDs\n\
 ! align=\"left\" | Status\n\n";
 
-static const char * const board_th = "{| border=\"0\" style=\"font-size: smaller\" \
+static const char board_th[] = "{| border=\"0\" style=\"font-size: smaller\" \
 valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
 ! align=\"left\" | Mainboard\n! align=\"left\" | Required option\n! align=\"left\" | Status\n\n";
 
-static const char * const board_intro = "\
+static const char board_intro[] = "\
 \n== Supported mainboards ==\n\n\
 In general, it is very likely that flashrom works out of the box even if your \
 mainboard is not listed below.\n\nThis is a list of mainboards where we have \
@@ -57,14 +57,14 @@
 mainboards on the [[Mailinglist|mailing list]].\n";
 #endif
 
-static const char * const chip_th = "{| border=\"0\" style=\"font-size: smaller\" \
+static const char chip_th[] = "{| border=\"0\" style=\"font-size: smaller\" \
 valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
 ! align=\"left\" | Device\n! align=\"left\" | Size / KB\n\
 ! align=\"left\" | Type\n! align=\"left\" colspan=\"4\" | Status\n\n\
 |- bgcolor=\"#6699ff\"\n| colspan=\"4\" | &nbsp;\n\
 | Probe\n| Read\n| Erase\n| Write\n\n";
 
-static const char * const programmer_section = "\
+static const char programmer_section[] = "\
 \n== Supported programmers ==\n\nThis is a list \
 of supported PCI devices flashrom can use as programmer:\n\n{| border=\"0\" \
 valign=\"top\"\n| valign=\"top\"|\n\n{| border=\"0\" style=\"font-size: \
@@ -73,7 +73,7 @@
 ! align=\"left\" | Status\n\n";
 
 #if CONFIG_INTERNAL == 1
-static const char * const laptop_intro = "\n== Supported laptops/notebooks ==\n\n\
+static const char laptop_intro[] = "\n== Supported laptops/notebooks ==\n\n\
 In general, flashing laptops is more difficult because laptops\n\n\
 * often use the flash chip for stuff besides the BIOS,\n\
 * often have special protection stuff which has to be handled by flashrom,\n\
@@ -167,9 +167,9 @@
 
 		if (boards[i].note) {
 			printf("<sup>%d</sup>\n", num_notes + 1);
-			snprintf((char *)&tmp, 900, "<sup>%d</sup> %s<br />\n",
+			snprintf(tmp, sizeof(tmp), "<sup>%d</sup> %s<br />\n",
 				 1 + num_notes++, boards[i].note);
-			notes = strcat_realloc(notes, (char *)&tmp);
+			notes = strcat_realloc(notes, tmp);
 		} else {
 			printf("\n");
 		}
diff --git a/sb600spi.c b/sb600spi.c
index 4e3e079..845cf58 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -208,7 +208,7 @@
 	struct pci_dev *smbus_dev;
 	uint32_t tmp;
 	uint8_t reg;
-	const char *speed_names[4] = {
+	static const char *const speed_names[4] = {
 		"Reserved", "33", "22", "16.5"
 	};
 
diff --git a/spi25.c b/spi25.c
index fc3173f..c9e1ebf 100644
--- a/spi25.c
+++ b/spi25.c
@@ -33,7 +33,7 @@
 
 static int spi_rdid(unsigned char *readarr, int bytes)
 {
-	const unsigned char cmd[JEDEC_RDID_OUTSIZE] = { JEDEC_RDID };
+	static const unsigned char cmd[JEDEC_RDID_OUTSIZE] = { JEDEC_RDID };
 	int ret;
 	int i;
 
@@ -95,7 +95,7 @@
 
 int spi_write_enable(void)
 {
-	const unsigned char cmd[JEDEC_WREN_OUTSIZE] = { JEDEC_WREN };
+	static const unsigned char cmd[JEDEC_WREN_OUTSIZE] = { JEDEC_WREN };
 	int result;
 
 	/* Send WREN (Write Enable) */
@@ -109,7 +109,7 @@
 
 int spi_write_disable(void)
 {
-	const unsigned char cmd[JEDEC_WRDI_OUTSIZE] = { JEDEC_WRDI };
+	static const unsigned char cmd[JEDEC_WRDI_OUTSIZE] = { JEDEC_WRDI };
 
 	/* Send WRDI (Write Disable) */
 	return spi_send_command(sizeof(cmd), 0, cmd, NULL);
@@ -232,10 +232,10 @@
 
 int probe_spi_res1(struct flashchip *flash)
 {
+	static const unsigned char allff[] = {0xff, 0xff, 0xff};
+	static const unsigned char all00[] = {0x00, 0x00, 0x00};
 	unsigned char readarr[3];
 	uint32_t id2;
-	const unsigned char allff[] = {0xff, 0xff, 0xff};
-	const unsigned char all00[] = {0x00, 0x00, 0x00};
 
 	/* We only want one-byte RES if RDID and REMS are unusable. */
 
@@ -298,7 +298,7 @@
 
 uint8_t spi_read_status_register(void)
 {
-	const unsigned char cmd[JEDEC_RDSR_OUTSIZE] = { JEDEC_RDSR };
+	static const unsigned char cmd[JEDEC_RDSR_OUTSIZE] = { JEDEC_RDSR };
 	/* FIXME: No workarounds for driver/hardware bugs in generic code. */
 	unsigned char readarr[2]; /* JEDEC_RDSR_INSIZE=1 but wbsio needs 2 */
 	int ret;
@@ -486,7 +486,7 @@
  */
 void spi_prettyprint_status_register_sst25vf016(uint8_t status)
 {
-	const char *bpt[] = {
+	static const char *const bpt[] = {
 		"none",
 		"1F0000H-1FFFFFH",
 		"1E0000H-1FFFFFH",
@@ -502,7 +502,7 @@
 
 void spi_prettyprint_status_register_sst25vf040b(uint8_t status)
 {
-	const char *bpt[] = {
+	static const char *const bpt[] = {
 		"none",
 		"0x70000-0x7ffff",
 		"0x60000-0x7ffff",
@@ -837,7 +837,7 @@
 
 int spi_write_status_enable(void)
 {
-	const unsigned char cmd[JEDEC_EWSR_OUTSIZE] = { JEDEC_EWSR };
+	static const unsigned char cmd[JEDEC_EWSR_OUTSIZE] = { JEDEC_EWSR };
 	int result;
 
 	/* Send EWSR (Enable Write Status Register). */
diff --git a/stm50flw0x0x.c b/stm50flw0x0x.c
index 80f518e..60e5c45 100644
--- a/stm50flw0x0x.c
+++ b/stm50flw0x0x.c
@@ -39,7 +39,7 @@
 static int unlock_block_stm50flw0x0x(struct flashchip *flash, int offset)
 {
 	chipaddr wrprotect = flash->virtual_registers + 2;
-	const uint8_t unlock_sector = 0x00;
+	static const uint8_t unlock_sector = 0x00;
 	int j;
 
 	/*
