From efaffbc9d6277f774a7382214b3cfefae2bfd784 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 15 Aug 2012 09:41:21 +0100 Subject: etherboot: Build fixes for gcc 4.7. Signed-off-by: Keir Fraser --- tools/firmware/etherboot/patches/build_fix_1.patch | 28 +++++++++++++ tools/firmware/etherboot/patches/build_fix_2.patch | 48 ++++++++++++++++++++++ tools/firmware/etherboot/patches/build_fix_3.patch | 13 ++++++ tools/firmware/etherboot/patches/series | 3 ++ 4 files changed, 92 insertions(+) create mode 100644 tools/firmware/etherboot/patches/build_fix_1.patch create mode 100644 tools/firmware/etherboot/patches/build_fix_2.patch create mode 100644 tools/firmware/etherboot/patches/build_fix_3.patch (limited to 'tools/firmware') diff --git a/tools/firmware/etherboot/patches/build_fix_1.patch b/tools/firmware/etherboot/patches/build_fix_1.patch new file mode 100644 index 0000000000..9eacb9b46e --- /dev/null +++ b/tools/firmware/etherboot/patches/build_fix_1.patch @@ -0,0 +1,28 @@ +Fix compile error in isabus_probe with gcc 4.7 + +The copy of ipxe used during Xen tools build does not define +ISA_PROBE_ADDRS. As a result isa_extra_probe_addrs[] has a size of 0. +ISA_IOADDR() tries to access that empty array, which is detected by the +newer gcc (or perhaps the warning was just turned into an error) + +drivers/bus/isa.c: In function 'isabus_probe': +drivers/bus/isa.c:112:18: error: array subscript is above array bounds [-Werror=array-bounds] + +--- + src/drivers/bus/isa.c | 3 +++ + 1 file changed, 3 insertions(+) + +Index: ipxe/src/drivers/bus/isa.c +=================================================================== +--- ipxe.orig/src/drivers/bus/isa.c ++++ ipxe/src/drivers/bus/isa.c +@@ -97,6 +97,9 @@ static int isabus_probe ( struct root_de + int ioidx; + int rc; + ++ if ( ISA_EXTRA_PROBE_ADDR_COUNT == 0 ) ++ return 0; ++ + for_each_table_entry ( driver, ISA_DRIVERS ) { + for ( ioidx = ISA_IOIDX_MIN ( driver ) ; + ioidx <= ISA_IOIDX_MAX ( driver ) ; ioidx++ ) { diff --git a/tools/firmware/etherboot/patches/build_fix_2.patch b/tools/firmware/etherboot/patches/build_fix_2.patch new file mode 100644 index 0000000000..da24ddd883 --- /dev/null +++ b/tools/firmware/etherboot/patches/build_fix_2.patch @@ -0,0 +1,48 @@ +fix compile error in isabus_probe with gcc4.7 + +The copy of ipxe used during Xen tools build fails to compile with gcc +4.7: +drivers/net/myri10ge.c: In function 'myri10ge_command': +drivers/net/myri10ge.c:308:3: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] +drivers/net/myri10ge.c:310:2: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] + +This patch simply turns the pad array into quantities of u32. +If thats not the right fix due to hardware limitations, I can provide a +different patch. + +--- + src/drivers/net/myri10ge.c | 6 +++--- + src/drivers/net/myri10ge_mcp.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +Index: ipxe/src/drivers/net/myri10ge.c +=================================================================== +--- ipxe.orig/src/drivers/net/myri10ge.c ++++ ipxe/src/drivers/net/myri10ge.c +@@ -304,10 +304,10 @@ static int myri10ge_command ( struct myr + command->response_addr.high = 0; + command->response_addr.low + = htonl ( virt_to_bus ( &priv->dma->command_response ) ); +- for ( i=0; i<36; i+=4 ) +- * ( uint32 * ) &command->pad[i] = 0; ++ for ( i=0; i<9; i++ ) ++ command->pad[i] = 0; + wmb(); +- * ( uint32 * ) &command->pad[36] = 0; ++ command->pad[9] = 0; + + /* Wait up to 2 seconds for a response. */ + +Index: ipxe/src/drivers/net/myri10ge_mcp.h +=================================================================== +--- ipxe.orig/src/drivers/net/myri10ge_mcp.h ++++ ipxe/src/drivers/net/myri10ge_mcp.h +@@ -80,7 +80,7 @@ struct mcp_cmd { + /* 16 */ + struct mcp_dma_addr response_addr; + /* 24 */ +- uint8_t pad[40]; ++ uint32_t pad[10]; + }; + typedef struct mcp_cmd mcp_cmd_t; + diff --git a/tools/firmware/etherboot/patches/build_fix_3.patch b/tools/firmware/etherboot/patches/build_fix_3.patch new file mode 100644 index 0000000000..13eeb47656 --- /dev/null +++ b/tools/firmware/etherboot/patches/build_fix_3.patch @@ -0,0 +1,13 @@ +diff --git a/src/drivers/infiniband/qib7322.c b/src/drivers/infiniband/qib7322.c +index b66f8ef..d8a54c9 100644 +--- a/src/drivers/infiniband/qib7322.c ++++ b/src/drivers/infiniband/qib7322.c +@@ -2120,7 +2120,7 @@ static int qib7322_ahb_write ( struct qib7322 *qib7322, unsigned int location, + */ + static int qib7322_ahb_mod_reg ( struct qib7322 *qib7322, unsigned int location, + uint32_t value, uint32_t mask ) { +- uint32_t old_value; ++ uint32_t old_value = 0; + uint32_t new_value; + int rc; + diff --git a/tools/firmware/etherboot/patches/series b/tools/firmware/etherboot/patches/series index 86cb300865..5bd7df8090 100644 --- a/tools/firmware/etherboot/patches/series +++ b/tools/firmware/etherboot/patches/series @@ -1 +1,4 @@ boot_prompt_option.patch +build_fix_1.patch +build_fix_2.patch +build_fix_3.patch -- cgit v1.2.3