9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
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


  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).