[LLVMdev] [llvm-commits] Dealing with a corrupted /proc/self/exe link
Benjamin Kramer
benny.kra at gmail.com
Fri Jul 13 12:17:52 PDT 2012
On 13.07.2012, at 09:46, Gabor Greif <gabor.greif at alcatel-lucent.com> wrote:
> Hi all,
>
> I am in charge of the controlled introduction of clang into
> our builds at my workplace. Since all our tools must run from
> a ClearCase view for automatic dependency tracking, we have been
> biten by a Linux bug, and readlink("/proc/self/exe", ...) gives
> nonsensical results. So we need to introduce a configure option
> for disallowing this method of executable discovery (the other
> one works well).
Interesting, can you describe the linux bug? Are the kernel devs aware of it?
We often had reports about /proc/self/exe not working (and thus clang crashing)
in chrooted environments. It is possible to mount /proc into the chroot but this
seems to be missing from many setups. The code in LLVM that uses /proc/self/exe
returns an empty string on error which confuses clang.
I don't really like having an autoconf switch for this as long as you can determine
whether the result from /proc/self/exe is valid. When you're adding a fallback to
Path.inc anyways, why not just try reading /proc/self/exe first, and if it fails, use
your fallback? That would also fix the chroot problem.
- Ben
>
> Here is the patch:
>
>
>
> Index: autoconf/configure.ac
> ===================================================================
> --- autoconf/configure.ac (revision 160127)
> +++ autoconf/configure.ac (working copy)
> @@ -647,6 +647,20 @@
> AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
> [Define if timestamp information (e.g., __DATE__) is allowed])
>
> +dnl Enable reading of the "/proc/self/exe" link.
> +AC_ARG_ENABLE(proc-self-exe,
> + AS_HELP_STRING([--enable-proc-self-exe],
> + [Enable reading of the "/proc/self/exe" link (default is YES)]),,
> + enableval=default)
> +case "$enableval" in
> + yes) AC_SUBST(ENABLE_PROC_SELF_EXE,[1]) ;;
> + no) AC_SUBST(ENABLE_PROC_SELF_EXE,[0]) ;;
> + default) AC_SUBST(ENABLE_PROC_SELF_EXE,[1]) ;;
> + *) AC_MSG_ERROR([Invalid setting for --enable-proc-self-exe. Use "yes" or "no"]) ;;
> +esac
> +AC_DEFINE_UNQUOTED([ENABLE_PROC_SELF_EXE],$ENABLE_PROC_SELF_EXE,
> + [Define if reading of the "/proc/self/exe" link is allowed])
> +
> dnl Allow specific targets to be specified for building (or not)
> TARGETS_TO_BUILD=""
> AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
>
>
> I'll commit after a LGTM.
>
> However before tweaking lib/Support/Unix/Path.inc I have to add a cmake
> modification, which can be simply <always on>. Hints how to do this are
> welcome, but I guess I'll figure it out.
>
> So what do you think?
>
> Cheers,
>
> Gabor
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-dev
mailing list