[m-rev.] for review: function trailing and aligned addresses

Julien Fischer juliensf at csse.unimelb.edu.au
Fri Jan 18 16:07:09 AEDT 2008

On Fri, 18 Jan 2008, Mark Brown wrote:

> On 18-Jan-2008, Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
>> Mark had a similar problem with G12's trail module a few months ago.
>> I think we should modify the compiler so that in trailing grades it always
>> enabled gcc's -falign-functions option.
> I agree.  I can't imagine that this option would cause anyone any grief.
> Make sure it is the `-falign-functions=bytes' version though -- the version
> that doesn't specify the alignment size does not do the obvious thing!
> The default size is assembler dependent (and on my Ubuntu system is 1, IIRC).

I know.

> Also, I think the test in MR_USE_TAGGED_TRAIL is not quite right.  It tests
> whether it is safe to use tagged trail entries by looking at whether *mercury*
> data has enough tag bits.  But the trailing interface is C, so really the
> test should be whether we expect there to be enough tag bits in C pointers.

It's not obvious what you would do instead though; it depends on whether the C
pointers are aligned or not.  It's obviously sufficient if what you are
trailing is Mercury data structure - it justs gets a bit iffy when
start trying to trail C ones.

> Note that the same problem occurs with value trail entries -- the user needs
> to ensure that their data structures are aligned properly.
>> Alternatively we could add
>> an extra word at the beginning of function trail entries to store the
>> tag - this would have the advantage that users would not need to worry
>> about what is a fairly obscure point.
> Perhaps a configuration option to make it easier to disable the tagged
> trail optimization?

Perhaps using a tagged trail should not be the default, since its use
places an extra burden on the programmer.  (I'll do a comparison between
the two types of trail on some of the G12 benchmarks in the next couple
of days.)

>> Estimated hours taken: 1
>> Branches: main
>> Document a subtle problem that can occur with function trailing.
>> Fix some failing test cases in the .tr.ll_debug grades.
>> doc/reference_manual.texi:
>> 	Document that the addresses of the C functions used in function trailing
>> 	need to be word aligned.
>> tests/trailing/Mercury.options:
>> 	Fix the failure of some trailing test cases in .ll_debug grades by
>> ensuring
>> 	that C functions are aligned on 64-bit boundaries.  (The set of C
>> 	optimisations implied by the .ll_debug grades disable the
>> -falign-functions
>> 	optimisation.)
>> Julien.
>> Index: doc/reference_manual.texi
>> ===================================================================
>> RCS file:
>> /home/mercury/mercury1/repository/mercury/doc/reference_manual.texi,v
>> retrieving revision 1.415
>> diff -u -r1.415 reference_manual.texi
>> --- doc/reference_manual.texi	14 Jan 2008 00:08:02 -0000	1.415
>> +++ doc/reference_manual.texi	18 Jan 2008 03:21:07 -0000
>> @@ -8922,6 +8922,10 @@
>>  If it is called with anything else (such as @samp{MR_gc}),
>>  then it should probably abort execution with an error message.
>> +Note that in the current implementation the address of the C function
> Is it really just a limitation of the current implementation, or is it
> actually how we intend the interface to be?  If it's the former, we can
> remove the limitation by defining MR_USE_TAGGED_TRAIL to be 0.  But I
> think it should be the latter, so I think you should remove "Note that
> in the current implementation" from the start of that sentence.

I suspect that function alignement wasn't really considered when the interface
was designed - so it's intended in an unintended sort of way.

>> +passed as the first argument of @code{MR_trail_function()} must be word
>> +aligned.
>> +
>>  @node Delayed goals and floundering
>>  @subsection Delayed goals and floundering
> I think it would be good to add something similar to the value trailing
> section too.  Namely, that the MR_Word * addresses must be word aligned.

How's this?

Index: reference_manual.texi
RCS file: /home/mercury/mercury1/repository/mercury/doc/reference_manual.texi,v
retrieving revision 1.415
diff -u -r1.415 reference_manual.texi
--- reference_manual.texi	14 Jan 2008 00:08:02 -0000	1.415
+++ reference_manual.texi	18 Jan 2008 05:00:28 -0000
@@ -8851,6 +8851,9 @@

  @end table

+Note that @var{address} must be word aligned for both
+both @code{MR_trail_current_value()} and @code{MR_trail_value()}.
  @node Function trailing
  @subsection Function trailing

@@ -8922,6 +8925,9 @@
  If it is called with anything else (such as @samp{MR_gc}),
  then it should probably abort execution with an error message.

+Note that the address of the C function passed as the first argument of
+ at code{MR_trail_function()} must be word aligned.
  @node Delayed goals and floundering
  @subsection Delayed goals and floundering

mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au

More information about the reviews mailing list