caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Internals details for cmmgen.ml
@ 1999-12-10  8:12 John Prevost
  1999-12-11 18:09 ` Xavier Leroy
  0 siblings, 1 reply; 5+ messages in thread
From: John Prevost @ 1999-12-10  8:12 UTC (permalink / raw)
  To: caml-list

Recently I posted about my work to add support for fast byte access to
regions of memory outside the O'Caml heap.  Since Francois Rouaix
helfully pointed me at fcntl for being sure of the access rights on
file descriptors, I'm continuing to polish things up.

My main focus has been on adding small bits of code to
asmcomp/cmmgen.ml for the new functionality.  Two of the new
primitives (Pregionrefs and Pregionsets) need to check the protection
bits recorded for the region before trying to access it, and somehow
raise an exception if the access check fails.

I'm currently using the following kludge to make bad region access
checks fail:

let region_checkaccess exp = function
  | Reg_Read ->
    Cifthenelse(
      Cop(Cand, [region_prot exp; Cconst_int 1]),
      Cconst_pointer 1,
      Cop(Ccheckbound, [Cconst_int 0; Cconst_int 0]))
  | Reg_Write ->
    Cifthenelse(
      Cop(Cand, [region_prot exp; Cconst_int 2]),
      Cconst_pointer 1,
      Cop(Ccheckbound, [Cconst_int 0; Cconst_int 0]))
(* XXX Bounds check on 0 is a kludge to force exception *)

(Please pardon my code--I may not know enough about C-- to produce the
best possible output, even without trying to finagle this access check.)

Is there a better way for me to cause an exception to be thrown at
this point?  Do I need to fall back to a Cextcall to ask someone to
throw an exception for me?  Or could (and should) I actually use
Craise with arcane knowledge that a certain exception maps to a
certain integer value?

John


P.S.  Kudos to everyone who's involved with the O'Caml compiler.  Now
that I'm getting into the internals a bit, I'm enjoying myself
immensely.  I'm convinced I could never deal with this style of
hackery in the Perl source.  Not only is the code of the various parts
of the compiler fairly easy to follow, but static typing has saved me
from burning myself several times already while modifying cmmgen.ml
and the associated type definitions.  Again, thanks!




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~1999-12-23 16:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-12-10  8:12 Internals details for cmmgen.ml John Prevost
1999-12-11 18:09 ` Xavier Leroy
1999-12-18  0:51   ` John Prevost
1999-12-18 18:56     ` Jerome Vouillon
1999-12-23  5:26       ` John Prevost

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