rr icon indicating copy to clipboard operation
rr copied to clipboard

Build with musl

Open yshui opened this issue 7 years ago • 8 comments

Building rr with musl is not possible right now, there are two main problems:

  1. In musl, lots of *64 and *64_t are macros, e.g. #define stat64 stat. This breaks kernel_abi.h hard.
  2. thread_db is not implemented by musl

yshui avatar Aug 08 '18 00:08 yshui

Other problems:

  1. src/preload/overrides.c calls __sysconf, __pthread_mutex_lock, __pthread_mutex_trylock which are unavailable on musl.

MaskRay avatar Dec 25 '20 04:12 MaskRay

__sysconf is gone now from rr.

Don't __pthread_mutex_lock and __pthread_mutex_trylock already exist in musl?

https://git.musl-libc.org/cgit/musl/tree/src/thread/pthread_mutex_lock.c

https://git.musl-libc.org/cgit/musl/tree/src/thread/pthread_mutex_trylock.c

Manouchehri avatar Jul 22 '22 12:07 Manouchehri

The double underscore versions aren't required since https://github.com/rr-debugger/rr/commit/d8b1db03360df84c4e369b2858a21dc6feee3213

khuey avatar Jul 22 '22 14:07 khuey

fwiw, it still fails to build with multiple errors:

rr-master/src/preload/overrides.c: In function 'fix_mutex_kind':
rr-master/src/preload/overrides.c:46:8: error: 'pthread_mutex_t' has no member named '__data'
   46 |   mutex->__data.__kind &= ~PTHREAD_MUTEX_PRIO_INHERIT_NP;
      |        ^~
rr-master/src/preload/syscallbuf.c: In function 'sys_recvfrom':
rr-master/src/preload/syscallbuf.c:2927:3: error: unknown type name 'socklen_t'
 2927 |   socklen_t* addrlen = (socklen_t*)call->args[5];
      |   ^~~~~~~~~
rr-master/src/test/privileged_net_ioctl.c: In function 'main':
rr-master/src/test/privileged_net_ioctl.c:29:18: warning: implicit declaration of function '__bswap_32'; did you mean '__bswap32'? [-Wimplicit-function-declaration]
   29 | #define htonl(x) __bswap_32(x)
      |                  ^~~~~~~~~~
rr-master/src/test/privileged_net_ioctl.c:145:21: note: in expansion of macro 'htonl'
  145 |     uint32_t host = htonl((uint32_t)10 << 24 | 0x2);
      |                     ^~~~~

(i'm using gcc 12.1.1 and musl 1.2.3 on Alpine edge)

ptrcnull avatar Sep 20 '22 02:09 ptrcnull

  1. In musl, lots of *64 and *64_t are macros, e.g. #define stat64 stat. This breaks kernel_abi.h hard.

This seems to still be a big issuem resulting in lots of redefinition errors:

** Building CXX object CMakeFiles/rr.dir/src/CPUFeaturesCommand.cc.o
In file included from /home/build/rr/src/ScopedFd.h:9,
                 from /home/build/rr/src/CompressedWriter.h:13,
                 from /home/build/rr/src/CompressedWriter.cc:5:
/home/build/rr/src/kernel_abi.h:429:19: error: redeclaration of 'typedef int64_t rr::BaseArch<arch_, wordsize>::off_t'
  429 |   typedef int64_t off64_t;
      |                   ^~~~~~~
In file included from /home/build/rr/src/Registers.h:15,
                 from /home/build/rr/src/Event.h:12,
                 from /home/build/rr/src/TraceFrame.h:10,
                 from /home/build/rr/src/util.h:21,
                 from /home/build/rr/src/CompressedWriter.cc:17:
/home/build/rr/src/kernel_abi.h:420:27: note: previous declaration 'typedef rr::BaseArch<arch_, wordsize>::syscall_slong_t rr::BaseArch<arch_, wordsize>::off_t'
  420 |   typedef syscall_slong_t off_t;
      |                           ^~~~~
In file included from /home/build/rr/src/ScopedFd.h:6:
/home/build/rr/src/kernel_abi.h:430:19: error: redeclaration of 'typedef int64_t rr::BaseArch<arch_, wordsize>::off_t'
  430 |   typedef int64_t loff_t;
      |                   ^~~~~~
/home/build/rr/src/kernel_abi.h:420:27: note: previous declaration 'typedef rr::BaseArch<arch_, wordsize>::syscall_slong_t rr::BaseArch<arch_, wordsize>::off_t'
  420 |   typedef syscall_slong_t off_t;
      |                           ^~~~~
In file included from /home/build/rr/src/ScopedFd.h:8:
/home/build/rr/src/kernel_abi.h:432:20: error: redeclaration of 'typedef uint64_t rr::BaseArch<arch_, wordsize>::ino_t'
  432 |   typedef uint64_t ino64_t;
      |                    ^~~~~~~
/home/build/rr/src/kernel_abi.h:426:27: note: previous declaration 'typedef rr::BaseArch<arch_, wordsize>::syscall_ulong_t rr::BaseArch<arch_, wordsize>::ino_t'
  426 |   typedef syscall_ulong_t ino_t;
      |                           ^~~~~
/home/build/rr/src/kernel_abi.h:433:19: error: redeclaration of 'typedef int64_t rr::BaseArch<arch_, wordsize>::blkcnt_
'
  433 |   typedef int64_t blkcnt64_t;
      |                   ^~~~~~~~~~
/home/build/rr/src/kernel_abi.h:421:27: note: previous declaration 'typedef rr::BaseArch<arch_, wordsize>::syscall_slong_t rr::BaseArch<arch_, wordsize>::blkcnt_t'
  421 |   typedef syscall_slong_t blkcnt_t;
      |                           ^~~~~~~~
In file included from /home/build/rr/src/kernel_abi.h:1967:
/home/build/obj/SyscallEnumsX64.generated:93:10: error: redeclaration of 'stat'
   93 |   stat = 4,
      |          ^
In file included from /home/build/rr/src/ScopedFd.h:7:
/home/build/obj/SyscallEnumsX64.generated:41:3: note: previous declaration 'stat'
   41 |   stat64 = -40,
      |   ^~~~~~
/home/build/obj/SyscallEnumsX64.generated:94:11: error: redeclaration of 'fstat'
   94 |   fstat = 5,
      |           ^
/home/build/obj/SyscallEnumsX64.generated:43:3: note: previous declaration 'fstat'
   43 |   fstat64 = -42,
      |   ^~~~~~~
/home/build/obj/SyscallEnumsX64.generated:95:11: error: redeclaration of 'lstat'
   95 |   lstat = 6,
      |           ^
/home/build/obj/SyscallEnumsX64.generated:42:3: note: previous declaration 'lstat'
   42 |   lstat64 = -41,
      |   ^~~~~~~
/home/build/obj/SyscallEnumsX64.generated:165:14: error: redeclaration of 'truncate'
  165 |   truncate = 76,
      |              ^~
/home/build/obj/SyscallEnumsX64.generated:39:3: note: previous declaration 'truncate'
   39 |   truncate64 = -38,
      |   ^~~~~~~~~~
/home/build/obj/SyscallEnumsX64.generated:166:15: error: redeclaration of 'ftruncate'
  166 |   ftruncate = 77,
      |               ^~
/home/build/obj/SyscallEnumsX64.generated:40:3: note: previous declaration 'ftruncate'
   40 |   ftruncate64 = -39,
      |   ^~~~~~~~~~~
/home/build/obj/SyscallEnumsX64.generated:351:13: error: redeclaration of 'fstatat'
  351 |   fstatat = 262,
      |             ^~~
/home/build/obj/SyscallEnumsX64.generated:68:3: note: previous declaration 'fstatat'
   68 |   fstatat64 = -67,
      |   ^~~~~~~~~
In file included from /home/build/rr/src/kernel_abi.h:2178:
/home/build/obj/SyscallEnumsX86.generated:203:16: error: redeclaration of 'truncate'
  203 |   truncate64 = 193,
      |                ^~~
/home/build/obj/SyscallEnumsX86.generated:102:3: note: previous declaration 'truncate'
  102 |   truncate = 92,
      |   ^~~~~~~~
/home/build/obj/SyscallEnumsX86.generated:204:17: error: redeclaration of 'ftruncate'
  204 |   ftruncate64 = 194,
      |                 ^~~
/home/build/obj/SyscallEnumsX86.generated:103:3: note: previous declaration 'ftruncate'
  103 |   ftruncate = 93,
      |   ^~~~~~~~~
/home/build/obj/SyscallEnumsX86.generated:205:12: error: redeclaration of 'stat'
  205 |   stat64 = 195,
      |            ^~~
/home/build/obj/SyscallEnumsX86.generated:116:3: note: previous declaration 'stat'
  116 |   stat = 106,
      |   ^~~~
/home/build/obj/SyscallEnumsX86.generated:206:13: error: redeclaration of 'lstat'
  206 |   lstat64 = 196,
      |             ^~~
/home/build/obj/SyscallEnumsX86.generated:117:3: note: previous declaration 'lstat'
  117 |   lstat = 107,
      |   ^~~~~
/home/build/obj/SyscallEnumsX86.generated:207:13: error: redeclaration of 'fstat'
  207 |   fstat64 = 197,
      |             ^~~
/home/build/obj/SyscallEnumsX86.generated:118:3: note: previous declaration 'fstat'
  118 |   fstat = 108,
      |   ^~~~~
/home/build/obj/SyscallEnumsX86.generated:306:15: error: redeclaration of 'fstatat'
  306 |   fstatat64 = 300,
      |               ^~~
/home/build/obj/SyscallEnumsX86.generated:2:3: note: previous declaration 'fstatat'
    2 |   fstatat = -1,
      |   ^~~~~~~
In file included from /home/build/rr/src/kernel_abi.h:2424:
/home/build/obj/SyscallEnumsGeneric.generated:82:13: error: redeclaration of 'stat'
   82 |   stat64 = -81,
      |             ^~
/home/build/obj/SyscallEnumsGeneric.generated:52:3: note: previous declaration 'stat'
   52 |   stat = -51,
      |   ^~~~
/home/build/obj/SyscallEnumsGeneric.generated:83:14: error: redeclaration of 'lstat'
   83 |   lstat64 = -82,
      |              ^~
/home/build/obj/SyscallEnumsGeneric.generated:53:3: note: previous declaration 'lstat'
   53 |   lstat = -52,
      |   ^~~~~
/home/build/obj/SyscallEnumsGeneric.generated:190:14: error: redeclaration of 'truncate'
  190 |   truncate = 45,
      |              ^~
/home/build/obj/SyscallEnumsGeneric.generated:80:3: note: previous declaration 'truncate'
   80 |   truncate64 = -79,
      |   ^~~~~~~~~~
/home/build/obj/SyscallEnumsGeneric.generated:191:15: error: redeclaration of 'ftruncate'
  191 |   ftruncate = 46,
      |               ^~
/home/build/obj/SyscallEnumsGeneric.generated:81:3: note: previous declaration 'ftruncate'
   81 |   ftruncate64 = -80,
      |   ^~~~~~~~~~~
/home/build/obj/SyscallEnumsGeneric.generated:224:13: error: redeclaration of 'fstatat'
  224 |   fstatat = 79,
      |             ^~
/home/build/obj/SyscallEnumsGeneric.generated:118:3: note: previous declaration 'fstatat'
  118 |   fstatat64 = -117,
      |   ^~~~~~~~~
/home/build/obj/SyscallEnumsGeneric.generated:225:11: error: redeclaration of 'fstat'
  225 |   fstat = 80,
      |           ^~
/home/build/obj/SyscallEnumsGeneric.generated:84:3: note: previous declaration 'fstat'
   84 |   fstat64 = -83,
      |   ^~~~~~~**

GitMensch avatar May 05 '23 20:05 GitMensch

Should this issue be closed as duplicate of the (later, but with more content) issue #2363 [note: similar issues are also on Alpine stable]?

GitMensch avatar May 05 '23 20:05 GitMensch