From: Digby Tarvin <digbyt@acm.org>
To: 9fans@cse.psu.edu
Subject: Re: [9fans] useful language extension, or no?
Date: Fri, 19 Jul 2002 19:19:43 +0100 [thread overview]
Message-ID: <200207191819.TAA08286@cthulhu.dircon.co.uk> (raw)
In-Reply-To: <ea94bd2f40b35a968b743ea92d20d3d9@vitanuova.com> from "forsyth@vitanuova.com" at "Jul 19, 2002 04:45:14 pm"
Thanks - I guess that confirms it does what I thought.
Are there any good papers on this sort of stuff, or does one
just have to wade through the source code?
Any recomendations on a worthy successor to the K&R book as a
good reference on the current state of the art of the language...?
Regards,
DigbyT
> it only uses the trampoline code when you call g indirectly through
> a function pointer. if you call it directly it can provide the static link
> itself without that fuss. when you create a function pointer to g,
> as in the call to printf, it does generate code onto the stack that
> loads the static link register then enters g.
> leal -16(%ebp),%eax
> movl $g.9-10,%edx
> movb $185,(%eax)
> movl %ebp,1(%eax)
> movb $233,5(%eax)
> subl %eax,%edx
> movl %edx,6(%eax)
> that's the generation on the fly of the trampoline code.
> note the movl %ebp,1(%eax), which stores the current frame pointer
> as a literal in the generated code.
> the `function pointer' that is later passed to printf is the address of
> -16(%ebp) [offsets might be different in your case], which when
> called will load the literal, and enter g with a pc-relative reference
> (i think that's about right).
>
> you'd need to flush the cache(s) on some architectures, which is
> tricky when it's a privileged operation.
>
> the problem it is trying to solve is to get the right value for the static link register,
> without passing the required value along with the function pointer as a pair.
> providing the right value for the static link register is
> easiest to do if it doesn't exist. there are several
> approaches to implementing displays, and one of them allows nested
> function pointers as a single word but without this crud.
>
> all these implementations of nested functions in C go sadly wrong if
> you call a nested function indirectly when it has gone out of scope.
>
>
--
Digby R. S. Tarvin digbyt@acm.org
http://www.cthulhu.dircon.co.uk
next prev parent reply other threads:[~2002-07-19 18:19 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-19 15:45 forsyth
2002-07-19 18:19 ` Digby Tarvin [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-07-20 5:59 forsyth
2002-07-19 18:35 forsyth
2002-07-19 18:33 David Gordon Hogan
2002-07-19 18:22 David Gordon Hogan
2002-07-19 18:36 ` Digby Tarvin
2002-07-19 6:48 forsyth
2002-07-19 0:52 David Gordon Hogan
2002-07-19 12:53 ` Digby Tarvin
2002-07-19 15:41 ` Mike Haertel
2002-07-19 18:09 ` Digby Tarvin
2002-07-19 18:38 ` Scott Schwartz
2002-07-19 19:07 ` Digby Tarvin
2002-07-29 16:01 ` Ralph Corderoy
2002-07-18 19:24 David Gordon Hogan
2002-07-19 4:22 ` Lucio De Re
2002-07-18 15:02 forsyth
2002-07-18 23:57 ` arisawa
2002-07-29 15:59 ` Douglas A. Gwyn
2002-07-18 12:54 Richard Miller
2002-07-17 13:36 rob pike, esq.
2002-07-16 17:31 presotto
2002-07-17 8:58 ` William Josephson
2002-07-17 8:58 ` Douglas A. Gwyn
2002-07-16 17:01 forsyth
2002-07-17 8:59 ` Douglas A. Gwyn
2002-07-16 16:50 rob pike, esq.
2002-07-16 15:59 ` Sam
2002-07-16 17:04 ` Howard Trickey
2002-07-16 16:20 ` Sam
2002-07-16 16:08 rob pike, esq.
2002-07-16 15:31 ` Sam
2002-07-16 15:53 rob pike, esq.
2002-07-16 15:05 ` Sam
2002-07-16 21:29 ` Steve Kilbane
2002-07-16 14:12 Sam
2002-07-16 16:30 ` Boyd Roberts
2002-07-17 12:49 ` Ian Broster
2002-07-17 12:12 ` Sam
2002-07-17 13:33 ` Lucio De Re
2002-07-17 16:12 ` Fariborz (Skip) Tavakkolian
2002-07-17 22:21 ` arisawa
2002-07-17 22:28 ` Ronald G Minnich
2002-07-18 9:51 ` Douglas A. Gwyn
2002-07-18 10:19 ` Lucio De Re
2002-07-18 10:28 ` Lucio De Re
2002-07-18 14:50 ` Mike Haertel
2002-07-18 14:56 ` Lucio De Re
2002-07-19 5:23 ` arisawa
2002-07-18 14:21 ` Douglas A. Gwyn
2002-07-18 14:55 ` Lucio De Re
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=200207191819.TAA08286@cthulhu.dircon.co.uk \
--to=digbyt@acm.org \
--cc=9fans@cse.psu.edu \
/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;
as well as URLs for NNTP newsgroup(s).