On 11.10.17 10:54, William Brown <wibrown@xxxxxxxxxx> wrote:
no it is 8.On Tue, 2017-10-10 at 16:28 +0200, Carsten Grzemba wrote:
> <signaturebeforequotedtext></signaturebeforequotedtext>
> On 10.10.17 16:10, William Brown <wibrown@xxxxxxxxxx> wrote:
> >
> > On Fri, 2017-10-06 at 10:21 +0200, Carsten Grzemba wrote:
> > > Currently the code src/libsds/external/csiphash/csiphash.c do not work on Sparc.
> > > The casting void* or char* to unit64_t* throws Bus-Error.
> > >
> > > The solution would be to copy the content of the void and char pointer so that the variabeles are suitably aligned.
> > > To prevent have to use malloc: do we know the max of src_sz?
> > >
> >
> >
> > What line is this? I assume you are refering to:
> >
> > https://pagure.io/389-ds-base/blob/master/f/src/libsds/external/csiphash/csiphash.c#_82
> >
> yes!
>
> >
> > (https://pagure.io/389-ds-base/blob/master/f/src/libsds/external/csiphash/csiphash.c#_82)
> >
> > No, we can't know the max of src_sz, in theory it could be uint64_t max.
> > So this may not be an option.
> >
> So is malloc for uint64 alignment of the src variable the only option?
>
> >
> >
> >
> > Are you trying this on a 32bit platform perhaps? What's the arch of the
> > machine with the issue?
> >
> 64bit, Fujitsu M4000
> $ isainfo -v
> 64-bit sparcv9 applications
> fmaf vis2 vis popc
I feel like there is something I'm missing here in the problem. What is
sizeof(void *) on this platform? I'm assuming 4 or 16 rather than 8
bytes? Is this correct?
The following programm works on x86 but dumps on Sparc:
#include <stdio.h>
#include <sys/types.h>
int func(const void *str, size_t sz, const char key[16]){
uint64_t *ip = (uint64_t*) str;
printf ("str: %lx:%lx\n", ip, *ip);
}
int main()
{
char str[25] = "ABCDEFGH12345678";
char key[16];
printf ("sizeof void* %d\n", sizeof(void*));
printf ("sizeof char* %d\n", sizeof(char*));
printf ("sizeof uint64_t* %d\n", sizeof(uint64_t*));
func(str, 12, key);
func(&str[1], 11, key);
}
On x86:
grzemba@unstable11x:~/Tests$ gcc -g -m64 -O3 -fPIC -DPIC -MD -MP size_test.c -o st_x86
grzemba@unstable11x:~/Tests$ ./st_x86
sizeof void* 8
sizeof char* 8
sizeof uint64_t* 8
str: ffff80ffbffffb20:4847464544434241
str: ffff80ffbffffb21:3148474645444342
On Sparc:
grzemba@unstable11s:~/Tests$ gcc -g -m64 -O3 -fPIC -DPIC -MD -MP size_test.c -o st_sparc
grzemba@unstable11s:~/Tests$ ./st_sparc
sizeof void* 8
sizeof char* 8
sizeof uint64_t* 8
str: ffffffff7ffff7d0:4142434445464748
Bus Error (core dumped)
grzemba@unstable11s:~/Tests$ gdb st_sparc core
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.11".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/grzemba/Tests/st_sparc...done.
[New LWP 1]
[New LWP 1]
[Thread debugging using libthread_db enabled]
[New Thread 1 (LWP 1)]
Core was generated by `./st_sparc'.
Program terminated with signal 10, Bus error.
#0 0x0000000100000de8 in func (str=0xffffffff7ffff7d1, sz=<optimized out>,
key=0xffffffff7ffff7c0 "") at size_test.c:6
6 printf ("str: %lx:%lx\n", ip, *ip);
(gdb)
_______________________________________________ 389-devel mailing list -- 389-devel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to 389-devel-leave@xxxxxxxxxxxxxxxxxxxxxxx