1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
>Submitter-Id: current-users
>Originator: Jeremie Le Hen
>Organization:
>Confidential: no
>Synopsis: [patch] net/etherboot doesn't compile with gcc4
>Severity: non-critical
>Priority: low
>Category: ports
>Class: sw-bug
>Release: FreeBSD 7.0 i386
>Environment:
System: FreeBSD 7.0
>Description:
GCC 4 is far more nit-picking than its ancestor.
>How-To-Repeat:
Simply try to compile net/etherboot on RELENG_7 or CURRENT.
>Fix:
Drop the following three patchs into the files/ directory.
--- patch-gcc40-1 begins here ---
--- arch/i386/firmware/pcbios/basemem.c.old 2008-02-20 11:24:39.000000000 +0100
+++ arch/i386/firmware/pcbios/basemem.c 2008-02-20 11:24:49.000000000 +0100
@@ -93,6 +93,7 @@
uint16_t size_kb = ( size + remainder + 1023 ) >> 10;
free_base_memory_block_t *free_block =
( free_base_memory_block_t * ) ( ptr - remainder );
+ unsigned char *fbaddr;
if ( ( ptr == NULL ) || ( size == 0 ) ) { return; }
@@ -125,7 +126,9 @@
free_block->magic = FREE_BLOCK_MAGIC;
free_block->size_kb = size_kb;
/* Move up by 1 kB */
- (void *)free_block += ( 1 << 10 );
+ fbaddr = (void *)free_block;
+ fbaddr += ( 1 << 10 );
+ free_block = (void *)fbaddr;
size_kb--;
}
--- patch-gcc40-1 ends here ---
--- patch-gcc40-2 begins here ---
--- drivers/net/natsemi.c.old 2008-02-20 11:29:11.000000000 +0100
+++ drivers/net/natsemi.c 2008-02-20 11:32:13.000000000 +0100
@@ -602,7 +602,7 @@
const char *p) /* Packet */
{
u32 to, nstype;
- u32 tx_status;
+ volatile u32 tx_status;
/* Stop the transmitter */
outl(TxOff, ioaddr + ChipCmd);
@@ -641,7 +641,7 @@
to = currticks() + TX_TIMEOUT;
- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
+ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
/* wait */ ;
if (currticks() >= to) {
--- patch-gcc40-2 ends here ---
--- patch-gcc40-3 begins here ---
--- drivers/net/sis900.c.old 2008-02-20 11:33:10.000000000 +0100
+++ drivers/net/sis900.c 2008-02-20 11:33:54.000000000 +0100
@@ -1083,7 +1083,7 @@
const char *p) /* Packet */
{
u32 to, nstype;
- u32 tx_status;
+ volatile u32 tx_status;
/* Stop the transmitter */
outl(TxDIS | inl(ioaddr + cr), ioaddr + cr);
@@ -1122,7 +1122,7 @@
to = currticks() + TX_TIMEOUT;
- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
+ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
/* wait */ ;
if (currticks() >= to) {
--- patch-gcc40-3 ends here ---
|