public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@zip.com.au>
To: Momchil Velikov <velco@fadata.bg>
Cc: Oliver Xymoron <oxymoron@waste.org>,
	vda <vda@port.imtp.ilyichevsk.odessa.ua>,
	linux-kernel@vger.kernel.org, "H . J . Lu" <hjl@lucon.org>
Subject: Re: Extern variables in *.c files
Date: Wed, 02 Jan 2002 23:19:29 -0800	[thread overview]
Message-ID: <3C340601.E9A3507F@zip.com.au> (raw)
In-Reply-To: <02010216180403.01928@manta> <Pine.LNX.4.43.0201021322120.30079-100000@waste.org> <3C337EF1.4C7C72AB@zip.com.au>, <3C337EF1.4C7C72AB@zip.com.au> <87ell8wgo9.fsf@fadata.bg>

Momchil Velikov wrote:
> 
> >>>>> "Andrew" == Andrew Morton <akpm@zip.com.au> writes:
> 
> Andrew> Oliver Xymoron wrote:
> >>
> >> On Wed, 2 Jan 2002, vda wrote:
> >>
> >> > I grepped kernel *.c (not *.h!) files for extern variable definitions.
> >> > Much to my surprize, I found ~1500 such defs.
> >> >
> >> > Isn't that bad C code style? What will happen if/when type of variable gets
> >> > changed? (int->long).
> >>
> >> Yes; Int->long won't change anything on 32-bit machines and will break
> >> silently on 64-bit ones. The trick is finding appropriate places to put
> >> such definitions so that all the things that need them can include them
> >> without circular dependencies.
> >>
> 
> Andrew> Isn't there some way to get the linker to detect the differing
> Andrew> sizes?
> `--warn-common'
>      Warn when a common symbol is combined with another common symbol
>      or with a symbol definition.  Unix linkers allow this somewhat
>      sloppy practice, but linkers on some other operating systems do
>      not.  This option allows you to find potential problems from
>      combining global symbols.  Unfortunately, some C libraries use
>      this practice, so you may get some warnings about symbols in the
>      libraries as well as in your programs.
> 

Alas, it doesn't quite work as we'd like:

akpm-1:/home/akpm> cat a.c
int a;

main()
{}
akpm-1:/home/akpm> cat b.c
extern char a;

int b()
{return a;}
akpm-1:/home/akpm> gcc -fno-common -Wl,--warn-common a.c b.c
akpm-1:/home/akpm> 

No warnings emitted.  If b.c doesn't use `extern' it will fail
to link because of -fno-common.

What we'd *like* to happen is for the linker to determine that
the `extern char' and the `int' declarations are a mismatch.
Maybe the object file doesn't have the size info for `extern'
variables.   The compiler emits it though.

We can actually get what we want by disabling `-fno-common' and enabling
`--warn-common', but that's rather awkward. 

Perhaps HJ can suggest a solution?

-

  reply	other threads:[~2002-01-03  7:27 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-02 18:18 Extern variables in *.c files vda
2002-01-02 19:24 ` Oliver Xymoron
2002-01-02 21:43   ` Andrew Morton
2002-01-02 22:07     ` Momchil Velikov
2002-01-03  7:19       ` Andrew Morton [this message]
2002-01-03  7:42         ` H . J . Lu
2002-01-03  7:56           ` Andrew Morton
2002-01-03  8:24             ` Keith Owens
2002-01-03  9:57             ` Russell King
2002-01-04  0:28               ` Extern variables in *.c files (maintainers pls read this) vda
2002-01-03 23:14                 ` Olaf Dietsche

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3C340601.E9A3507F@zip.com.au \
    --to=akpm@zip.com.au \
    --cc=hjl@lucon.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oxymoron@waste.org \
    --cc=vda@port.imtp.ilyichevsk.odessa.ua \
    --cc=velco@fadata.bg \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox