[LLVMdev] use of undeclared identifier '__NR_*' error while building clang

1,146 views
Skip to first unread message

Sandeep K Chaudhary

unread,
Jun 9, 2014, 8:16:44 PM6/9/14
to LLVM Developers Mailing List, cfe...@cs.uiuc.edu
Hi guys,

I am following this[1] tutorial to install clang. However, I have made a small change in the configure command, and I am running it with '--enable-optimized' option to avoid the debug build. 

I am getting the errors (given at the end) related to undeclared identifiers '__NR_*'. Can someone please provide some input about how to tackle this issue? 

On my other machine, I followed the same guide[1] (without the --enable-optimized option), and everything built successfully.


====================
warning: clang_darwin.mk: dropping arch 'x86_64h' from lib 'ubsan_osx' (ld does not support it)
make[5]: Entering directory `/home/sandeep/llvm_clang/llvm/projects/compiler-rt'
  COMPILE:   clang_linux/san-i386/i386: /home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
/home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:123:27: error: use of undeclared identifier '__NR_open'
  return internal_syscall(SYSCALL(open), (uptr)filename, flags);
                          ^
/home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc:17:24: note: expanded from macro 'SYSCALL'
# define SYSCALL(name) __NR_ ## name
                       ^
<scratch space>:62:1: note: expanded from here
__NR_open
^
/home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:132:27: error: use of undeclared identifier '__NR_open'
  return internal_syscall(SYSCALL(open), (uptr)filename, flags, mode);
                          ^
--------------

/home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:516:27: error: use of undeclared identifier '__NR_fork'
  return internal_syscall(SYSCALL(fork));
                          ^
/home/sandeep/llvm_clang/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc:17:24: note: expanded from macro 'SYSCALL'
# define SYSCALL(name) __NR_ ## name
                       ^
<scratch space>:62:1: note: expanded from here
__NR_fork
^
12 errors generated.
make[5]: *** [/home/sandeep/llvm_clang/build/tools/clang/runtime/compiler-rt/clang_linux/san-i386/i386/SubDir.lib__sanitizer_common/sanitizer_linux.o] Error 1
make[5]: Leaving directory `/home/sandeep/llvm_clang/llvm/projects/compiler-rt'
make[4]: *** [BuildRuntimeLibraries] Error 2
make[4]: Leaving directory `/home/sandeep/llvm_clang/build/tools/clang/runtime/compiler-rt'
make[3]: *** [compiler-rt/.makeall] Error 2
make[3]: Leaving directory `/home/sandeep/llvm_clang/build/tools/clang/runtime'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/home/sandeep/llvm_clang/build/tools/clang'
make[1]: *** [clang/.makeall] Error 2
make[1]: Leaving directory `/home/sandeep/llvm_clang/build/tools'
make: *** [all] Error 1

Thanks and regards,
Sandeep.

Reid Kleckner

unread,
Jun 9, 2014, 8:41:24 PM6/9/14
to Sandeep K Chaudhary, LLVM Developers Mailing List
-cfe-dev

Based on your question on IRC, it sounds like there's something wrong with your Linux headers.  Make sure you have something that provides the syscall numbers in /usr/include.  My workstation has them in x86_64-linux-gnu/asm/unistd_(32|64).h:

$ ack '__NR_fork' /usr/include/
/usr/include/asm-generic/unistd.h
849:#define __NR_fork 1079
851:__SYSCALL(__NR_fork, sys_fork)
853:__SYSCALL(__NR_fork, sys_ni_syscall)
857:#define __NR_syscalls (__NR_fork+1)

/usr/include/x86_64-linux-gnu/asm/unistd_32.h
10:#define __NR_fork              2

/usr/include/x86_64-linux-gnu/asm/unistd_64.h
136:#define __NR_fork                           57
137:__SYSCALL(__NR_fork, stub_fork)

/usr/include/x86_64-linux-gnu/bits/syscall.h
70:#define SYS_fork __NR_fork
417:#define SYS_fork __NR_fork


_______________________________________________
cfe-dev mailing list
cfe...@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev


Alexey Samsonov

unread,
Jun 9, 2014, 8:49:03 PM6/9/14
to Sandeep K Chaudhary, cfe...@cs.uiuc.edu, LLVM Developers Mailing List
Hi,

Can you provide details about your system (uname -a)? It is weird that you don't have __NR_open defined in your system headers.
As a workaround, you may drop compiler-rt repository from your checkout, it's possible to build Clang without it.

On Mon, Jun 9, 2014 at 5:08 PM, Sandeep K Chaudhary <babbusa...@gmail.com> wrote:
_______________________________________________
cfe-dev mailing list
cfe...@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev




--
Alexey Samsonov
vono...@gmail.com

Sandeep K Chaudhary

unread,
Jun 9, 2014, 9:24:40 PM6/9/14
to Reid Kleckner, LLVM Developers Mailing List
Hi Reid,

Thanks for the reply !

Earlier the build was complaining about not having /asm in /usr/include so I created a symbolic link to it with asm-generic, after that I am encountering this issue.

I just grep'ed for '__NR_fork', and I can see these numbers in the header files.

sandeep@ubuntu:/usr/include$ grep -rni __NR_fork .
./asm-generic/unistd.h:850:#define __NR_fork 1079
./asm-generic/unistd.h:852:__SYSCALL(__NR_fork, sys_fork)
./asm-generic/unistd.h:854:__SYSCALL(__NR_fork, sys_ni_syscall)
./asm-generic/unistd.h:858:#define __NR_syscalls (__NR_fork+1)
./x86_64-linux-gnu/asm/unistd_x32.h:51:#define __NR_fork (__X32_SYSCALL_BIT + 57)
./x86_64-linux-gnu/asm/unistd_64.h:61:#define __NR_fork 57
./x86_64-linux-gnu/asm/unistd_32.h:6:#define __NR_fork 2
./x86_64-linux-gnu/bits/syscall.h:70:#define SYS_fork __NR_fork
./x86_64-linux-gnu/bits/syscall.h:418:#define SYS_fork __NR_fork
./x86_64-linux-gnu/bits/syscall.h:730:#define SYS_fork __NR_fork

So these numbers are available in /usr/include. Are these not sufficient?

Thanks,
Sandeep.


--
Thanks and regards,
Sandeep K Chaudhary.

Sandeep K Chaudhary

unread,
Jun 9, 2014, 9:28:08 PM6/9/14
to Alexey Samsonov, LLVM Developers Mailing List
Hi Alexey !

Thanks for the reply ! 

Below is the output of 'uname -a'

sandeep@ubuntu:/usr/include$ uname -a
Linux ubuntu 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

I recently upgraded my Linux version (to Ubuntu 14.04). Could the issue be because of that?

So to drop compiler-rt, I can just delete the whole directory and do an incremental build? The reason I'm asking this is - it takes more than a couple of hours for the build on my system. It would be great if I can avoid it. Please let me know.

Thanks and regards,
Sandeep.

Alexey Samsonov

unread,
Jun 13, 2014, 6:47:07 PM6/13/14
to Sandeep K Chaudhary, LLVM Developers Mailing List
On Mon, Jun 9, 2014 at 6:12 PM, Sandeep K Chaudhary <babbusa...@gmail.com> wrote:
Hi Reid,

Thanks for the reply !

Earlier the build was complaining about not having /asm in /usr/include so I created a symbolic link to it with asm-generic, after that I am encountering this issue.

I just grep'ed for '__NR_fork', and I can see these numbers in the header files.

sandeep@ubuntu:/usr/include$ grep -rni __NR_fork .
./asm-generic/unistd.h:850:#define __NR_fork 1079
./asm-generic/unistd.h:852:__SYSCALL(__NR_fork, sys_fork)
./asm-generic/unistd.h:854:__SYSCALL(__NR_fork, sys_ni_syscall)
./asm-generic/unistd.h:858:#define __NR_syscalls (__NR_fork+1)
./x86_64-linux-gnu/asm/unistd_x32.h:51:#define __NR_fork (__X32_SYSCALL_BIT + 57)
./x86_64-linux-gnu/asm/unistd_64.h:61:#define __NR_fork 57
./x86_64-linux-gnu/asm/unistd_32.h:6:#define __NR_fork 2
./x86_64-linux-gnu/bits/syscall.h:70:#define SYS_fork __NR_fork
./x86_64-linux-gnu/bits/syscall.h:418:#define SYS_fork __NR_fork
./x86_64-linux-gnu/bits/syscall.h:730:#define SYS_fork __NR_fork

So these numbers are available in /usr/include. Are these not sufficient?

Sanitizers use this line to get syscall numbers:
  #include <sys/syscall.h>
 
_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




--
Alexey Samsonov
vono...@gmail.com

Alexey Samsonov

unread,
Jun 13, 2014, 6:50:46 PM6/13/14
to Sandeep K Chaudhary, LLVM Developers Mailing List
Hi!


On Mon, Jun 9, 2014 at 6:16 PM, Sandeep K Chaudhary <babbusa...@gmail.com> wrote:
Hi Alexey !

Thanks for the reply ! 

Below is the output of 'uname -a'

sandeep@ubuntu:/usr/include$ uname -a
Linux ubuntu 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

I recently upgraded my Linux version (to Ubuntu 14.04). Could the issue be because of that?

So to drop compiler-rt, I can just delete the whole directory and do an incremental build? The reason I'm asking this is - it takes more than a couple of hours for the build on my system. It would be great if I can avoid it. Please let me know.

No, I think you would need to re-configure your build after deleting compiler-rt.



--
Alexey Samsonov
vono...@gmail.com
Reply all
Reply to author
Forward
0 new messages