All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: Gerd Knorr <kraxel@bytesex.org>
Cc: "Kevin P. Fleming" <kpfleming@backtobasicsmgmt.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: var args in kernel?
Date: Mon, 22 Nov 2004 05:16:46 -0500	[thread overview]
Message-ID: <20041122101646.GP10340@devserv.devel.redhat.com> (raw)
In-Reply-To: <20041122094312.GC29305@bytesex>

On Mon, Nov 22, 2004 at 10:43:12AM +0100, Gerd Knorr wrote:
> On Fri, Nov 19, 2004 at 02:41:46PM -0700, Kevin P. Fleming wrote:
> > Gerd Knorr wrote:
> > >Yet another kobject bug.  It uses the varargs list twice in a illegal
> > >way.  That doesn't harm on i386 by pure luck, but blows things up on
> > >amd64 machines.  The patch below fixes it.
> > 
> > Is this safe? The normal glibc varargs implementation says you can't 
> > even call va_start on the same args list twice, you have to use va_copy 
> > to make a clone and then call va_start on that, _before_ you ever call 
> > va_start the first time.
> 
> Hmm, maybe.  I'm not sure who actually implements the varargs (gcc?
> Or glibc/kernel?) and whenever the above applies to the kernel as well
> or not ...

varargs is implemented entirely by GCC (GCC owns the stdarg.h header
and implements the builtin functions that are used in the va_* macros).

You can call va_start on the same args list twice, both:
void foo (int x, ...)
{
  va_list ap, ap2;
  va_start (ap, x);
  va_start (ap2, x);
...
  va_end (ap);
  va_end (ap2);
}
and
void foo (int x, ...)
{
  va_list ap;
  va_start (ap, x);
...
  va_end (ap);
  va_start (ap, x);
...
  va_end (ap);
}
are ok.  What you can't do is e.g.
  va_list ap;
  va_start (ap, x);
  bar (x, ap);
  bar (x, ap);
  va_end (ap);
(i.e. once you pass the ap to some other function, the only thing that you
have to do with it in the caller is va_end).

	Jakub

  reply	other threads:[~2004-11-22 10:17 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-09 15:49 2.6.10-rc1-mm4 Andrew Morton
2004-11-09 16:11 ` 2.6.10-rc1-mm4 Jens Axboe
2004-11-09 19:53   ` 2.6.10-rc1-mm4 Andrew Morton
2004-11-09 21:14     ` 2.6.10-rc1-mm4 Jens Axboe
2004-11-09 21:57       ` 2.6.10-rc1-mm4 Jens Axboe
2004-11-10 16:28       ` 2.6.10-rc1-mm4 Jens Axboe
2004-11-09 16:32 ` 2.6.10-rc1-mm4 Jesse Barnes
2004-11-09 16:41 ` 2.6.10-rc1-mm4 Markus Trippelsdorf
2004-11-09 21:11   ` [patch] 2.6.10-rc1-mm4: bttv-driver.c compile error Adrian Bunk
2004-11-09 21:43     ` Gerd Knorr
2004-11-09 21:55     ` Markus Trippelsdorf
2004-11-10  8:24       ` Gerd Knorr
2004-11-10  8:47         ` Andrew Morton
2004-11-10 11:19         ` Markus Trippelsdorf
2004-11-18 16:58           ` Gerd Knorr
2004-11-19 11:46             ` Markus Trippelsdorf
     [not found]             ` <419E689A.5000704@backtobasicsmgmt.com>
2004-11-22  9:43               ` var args in kernel? Gerd Knorr
2004-11-22 10:16                 ` Jakub Jelinek [this message]
2004-11-22 10:29                   ` Gerd Knorr
2004-11-22 11:03                     ` Jan Engelhardt
2004-11-22 11:33                       ` Jakub Jelinek
2004-11-22 11:39                         ` Jan Engelhardt
2004-11-22 12:41                           ` Andreas Schwab
2004-11-22 21:42                         ` Bill Davidsen
2004-11-22 23:18                           ` Jakub Jelinek
2004-11-22 23:43                           ` Andreas Schwab
2004-11-23 14:05                             ` Jan Engelhardt
2004-11-23 15:07                               ` Andreas Schwab
2004-11-23 16:17                                 ` Jan Engelhardt
2004-11-23 16:45                                   ` Andreas Schwab
2004-12-01 22:49                             ` Bill Davidsen
2004-12-02  0:26                               ` Andreas Schwab
2004-11-09 17:02 ` 2.6.10-rc1-mm4 Stefano Rivoir
2004-11-09 23:18   ` 2.6.10-rc1-mm4 Dave Airlie
2004-11-10  1:30     ` 2.6.10-rc1-mm4 Dave Airlie
2004-11-10  7:44     ` 2.6.10-rc1-mm4 Stefano Rivoir
2004-11-11  7:39     ` 2.6.10-rc1-mm4 Stefano Rivoir
2004-11-09 20:30 ` 2.6.10-rc1-mm4: net/tulip/xircom_tulip_cb.c compile error Adrian Bunk
2004-11-09 21:23 ` [2.6 patch] remove stale bttv_parse prototype Adrian Bunk
2004-11-10 11:40 ` 2.6.10-rc1-mm4 Fabio Coatti
2004-11-10 12:36   ` 2.6.10-rc1-mm4 Rafael J. Wysocki
2004-11-11 10:17 ` 2.6.10-rc1-mm4 Stefano Rivoir
2004-11-11 10:24   ` 2.6.10-rc1-mm4 Andrew Morton

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=20041122101646.GP10340@devserv.devel.redhat.com \
    --to=jakub@redhat.com \
    --cc=kpfleming@backtobasicsmgmt.com \
    --cc=kraxel@bytesex.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.