[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

pread offset issues with new libc



It seems that longrun and similar programs (procmeter3 longrun support,
etc) are broken by the new libc.

This program should read the transmeta vendor cpuid:

#define CPUID_DEVICE "/dev/cpu/0/cpuid"
#define CPUID_TMx86_VENDOR_ID 0x80860000

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>

main () {
        int fd = open(CPUID_DEVICE, O_RDONLY);
        uint32_t data[4];

        if (pread(fd, &data, 16, CPUID_TMx86_VENDOR_ID) != 16) {
                perror("pread");
        }
}

If I strace this, the pread looks like this:

pread(3, 0xbffff834, 16, 18446744071570849792) = -1 EINVAL (Invalid argument)

If I build the same program in a woody chroot, and strace it, I get:

pread(3, "\7\0\206\200TranaCPUsmet", 16, 2156265472) = 16

ltrace on the unstable system shows, much as I expected:

pread(3, 0xbffff814, 16, 0x80860000, 0x40108622)  = -1

Not sure what is happening with the pread offset here, but it
looks like it is getting mangled on the way to the syscall?

-- 
see shy jo

Attachment: pgpYxGu7ZaTpm.pgp
Description: PGP signature


Reply to: