2005-03-14 19:33:55

by Jesse Barnes

[permalink] [raw]
Subject: [PATCH] gcc4 fix for sn_serial.c

The sal_console and sal_console_uart structures have a circular relationship
since they both initialize member fields to pointers of one another. The
current code forward declares sal_console_uart as extern so that sal_console
can take its address, but gcc4 complains about this since the real definition
of sal_console_uart is marked 'static'. This patch just removes the static
qualifier from sal_console_uart to avoid the inconsistency. Does it look ok
to you, Pat?

Signed-off-by: Jesse Barnes <[email protected]>

Thanks,
Jesse


Attachments:
(No filename) (540.00 B)
sn-serial-gcc4-fix.patch (414.00 B)
Download all attachments

2005-03-15 01:04:04

by Adrian Bunk

[permalink] [raw]
Subject: Re: [PATCH] gcc4 fix for sn_serial.c

On Mon, Mar 14, 2005 at 11:32:39AM -0800, Jesse Barnes wrote:
> The sal_console and sal_console_uart structures have a circular relationship
> since they both initialize member fields to pointers of one another. The
> current code forward declares sal_console_uart as extern so that sal_console
> can take its address, but gcc4 complains about this since the real definition
> of sal_console_uart is marked 'static'. This patch just removes the static
> qualifier from sal_console_uart to avoid the inconsistency. Does it look ok
> to you, Pat?
>...
> ===== drivers/serial/sn_console.c 1.12 vs edited =====
> --- 1.12/drivers/serial/sn_console.c 2005-03-07 20:41:31 -08:00
> +++ edited/drivers/serial/sn_console.c 2005-03-14 10:57:19 -08:00
> @@ -801,7 +801,7 @@
>
> #define SAL_CONSOLE &sal_console
>
> -static struct uart_driver sal_console_uart = {
> +struct uart_driver sal_console_uart = {
> .owner = THIS_MODULE,
> .driver_name = "sn_console",
> .dev_name = DEVICE_NAME,

Why can't you solve this without making sal_console_uart global?

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

2005-03-15 17:49:45

by Jesse Barnes

[permalink] [raw]
Subject: Re: [PATCH] gcc4 fix for sn_serial.c

On Monday, March 14, 2005 5:03 pm, Adrian Bunk wrote:
> > -static struct uart_driver sal_console_uart = {
> > +struct uart_driver sal_console_uart = {
> > .owner = THIS_MODULE,
> > .driver_name = "sn_console",
> > .dev_name = DEVICE_NAME,
>
> Why can't you solve this without making sal_console_uart global?

I think that would mean moving some of the structure initializaiton into an
init function somewhere. But the compiler knows the addrs of these
structures, so there must be a better way to do it, I just don't know it.
Any suggestions?

Jesse

2005-04-26 22:58:16

by Andreas Schwab

[permalink] [raw]
Subject: Re: [PATCH] gcc4 fix for sn_serial.c

Jesse Barnes <[email protected]> writes:

> On Monday, March 14, 2005 5:03 pm, Adrian Bunk wrote:
>> > -static struct uart_driver sal_console_uart = {
>> > +struct uart_driver sal_console_uart = {
>> > .owner = THIS_MODULE,
>> > .driver_name = "sn_console",
>> > .dev_name = DEVICE_NAME,
>>
>> Why can't you solve this without making sal_console_uart global?
>
> I think that would mean moving some of the structure initializaiton into an
> init function somewhere.

Just make the tentative definition static.

Signed-off-by: Andreas Schwab <[email protected]>

--- linux-2.6/drivers/serial/sn_console.c.~1~ 2005-04-26 14:42:39.994841943 +0200
+++ linux-2.6/drivers/serial/sn_console.c 2005-04-27 00:50:40.301718840 +0200
@@ -821,7 +821,7 @@ static void __init sn_sal_switch_to_inte

static void sn_sal_console_write(struct console *, const char *, unsigned);
static int __init sn_sal_console_setup(struct console *, char *);
-extern struct uart_driver sal_console_uart;
+static struct uart_driver sal_console_uart;
extern struct tty_driver *uart_console_device(struct console *, int *);

static struct console sal_console = {

Andreas.

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstra?e 5, 90409 N?rnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."

2005-04-26 23:09:19

by Andreas Schwab

[permalink] [raw]
Subject: Re: [PATCH] gcc4 fix for sn_serial.c

Andreas Schwab <[email protected]> writes:

> Jesse Barnes <[email protected]> writes:
>
>> On Monday, March 14, 2005 5:03 pm, Adrian Bunk wrote:
>>> > -static struct uart_driver sal_console_uart = {
>>> > +struct uart_driver sal_console_uart = {
>>> > .owner = THIS_MODULE,
>>> > .driver_name = "sn_console",
>>> > .dev_name = DEVICE_NAME,
>>>
>>> Why can't you solve this without making sal_console_uart global?
>>
>> I think that would mean moving some of the structure initializaiton into an
>> init function somewhere.
>
> Just make the tentative definition static.

And this is the complete patch:

Make sal_console_uart static again.

Signed-off-by: Andreas Schwab <[email protected]>

--- linux-2.6/drivers/serial/sn_console.c.~1~ 2005-04-25 00:33:34.000000000 +0200
+++ linux-2.6/drivers/serial/sn_console.c 2005-04-27 01:05:29.000000000 +0200
@@ -787,7 +787,7 @@ static void __init sn_sal_switch_to_inte

static void sn_sal_console_write(struct console *, const char *, unsigned);
static int __init sn_sal_console_setup(struct console *, char *);
-extern struct uart_driver sal_console_uart;
+static struct uart_driver sal_console_uart;
extern struct tty_driver *uart_console_device(struct console *, int *);

static struct console sal_console = {
@@ -801,7 +801,7 @@ static struct console sal_console = {

#define SAL_CONSOLE &sal_console

-struct uart_driver sal_console_uart = {
+static struct uart_driver sal_console_uart = {
.owner = THIS_MODULE,
.driver_name = "sn_console",
.dev_name = DEVICE_NAME,

Andreas.

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstra?e 5, 90409 N?rnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."