----- Original Message -----
> From: "Sebastian Andrzej Siewior" <[email protected]>
> To: "Jérémie Galarneau" <[email protected]>
> Cc: [email protected], "Mathieu Desnoyers"
> <[email protected]>
> Sent: Monday, August 11, 2014 3:15:48 PM
> Subject: Re: Bug#757722: babeltrace: please enable build on sparc
>
> On 2014-08-11 14:31:08 [-0400], Jérémie Galarneau wrote:
> > It seems you don't have the following patch applied:
> >
> > commit 6a0b6cd5133db9e3c72914d4e5dd7fc792360934
> > Author: Mathieu Desnoyers <[email protected]>
> > Date: Wed Jul 16 10:58:48 2014 -0400
> >
> > Fix: don't perform unaligned integer read/writes
> >
> > Signed-off-by: Mathieu Desnoyers <[email protected]>
> >
> > I may be misunderstanding here, but we don't read floats directly in a
> > trace. We basically use the ctf_integer_read functions, as you can see
> > in _ctf_float_copy() in formats/ctf/types/floats.c
> >
> > That patch should ensure the accesses are always aligned (see the use
> > of memcpy).
> >
> > Have you spotted a place where an unaligned float access is performed?
>
> No, this is all good. I *assumed* that you also do double handling that
> way and therefore suggested use an alignment of 8. If you don't then it
> is all good.
>
> > > And the second bug I stumbled on is in test_ctf_writer:
> > > |…
> > > |ok 75 - Flush trace stream with one event
> > > |ok 76 - Add a new event class to a stream class after writing an event
> > > |ok 77 - Append 100 000 events to a stream
> > > |
> > > |Program received signal SIGSEGV, Segmentation fault.
> > > |0xf7f6f778 in ctf_integer_write (ppos=0x70022328, definition=<optimized
> > > |out>) at integer.c:325
> > > |325
> > > |bt_bitfield_write_be(mmap_align_addr(pos->base_mma)
> > > |+
> > > |(gdb) bt
> > > |#0 0xf7f6f778 in ctf_integer_write (ppos=0x70022328,
> > > |definition=<optimized out>) at integer.c:325
> > > |#1 0xf7f88014 in bt_ctf_field_integer_serialize (field=0x700cd928,
> > > |pos=0x70022328) at event-fields.c:1065
> > > |#2 0xf7f88c88 in bt_ctf_field_serialize (field=0x700cd928,
> > > |pos=0x70022328) at event-fields.c:660
> > > |#3 0xf7f88f10 in bt_ctf_field_structure_serialize (field=0x700cd8c8,
> > > |pos=0x70022328) at event-fields.c:1143
> > > |#4 0xf7f88c88 in bt_ctf_field_serialize (field=0x700cd8c8,
> > > |pos=0x70022328) at event-fields.c:660
> > > |#5 0xf7f857bc in bt_ctf_stream_flush (stream=0x70022310) at
> > > |stream.c:458
> > > |#6 0x7000577c in packet_resize_test (stream_class=<optimized out>,
> > > |stream=0x70022310, clock=0x70022108) at test_ctf_writer.c:698
> > > |#7 0x70002750 in main (argc=<optimized out>, argv=0xffffd6f4) at
> > > |test_ctf_writer.c:818
> > > |
> > > |=> 0xf7f6f778 <+600>: ldub [ %l3 + %l1 ], %g4
> > > |
> > > |l1 0x10002 65538
> > > |l3 0xf7bb4000 -138723328
> > >
> > > and _bt_bitfield_write_le() had __ptr = 0xf7bb4000 and this_unit = 65538
> > >
> > > |(gdb) print *((struct ctf_stream_pos *)ppos)->base_mma
> > > |$3 = {page_aligned_addr = 0xf7bb4000, page_aligned_length = 131072, addr
> > > |= 0xf7bb4000, length = 131072}
> > >
> > > So it looks like it tried to load a byte from 0xf7bb4000 + 0x10002 and
> > > this segfaulted. The mapping should be 131072 bytes in size it should
> > > fit. This is confirmed by proc, too
> > > |f7bb0000-f7bd0000 -w-s 00010000 fe:02 262357
> > > |/tmp/ctfwriter_5uYQD4/test_stream_0
> > > |Size: 128 kB
> > >
> > > So everything looks legal…
> > >
> >
> > Thanks for looking into this! Any idea what could cause this to fail?
>
> Not really. What I learnt is that you extend file's size with fallocate()
> and then mmap() it for writing. The area that you write is covered by the
> mmap() and file so it should be fine.
> I try later to extract a minimal testcase out of it or replace it with
> write() and see how that goes.
You might want to double-check the parameters passed to mmap() when mapping
this region. mmap(2) describes:
SIGSEGV
Attempted write into a region mapped as read-only.
Thoughts ?
Thanks,
Mathieu
>
> > Jérémie
>
> Sebastian
>
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]