[LLVMdev] Android, llvm-ar and setLastModificationAndAccessTime

James Lyon jameslyon0 at gmail.com
Tue Nov 26 00:50:46 PST 2013


I think this is an NDK bug then. I just re-downloaded it to check, and 
indeed in the NDK from 
http://developer.android.com/tools/sdk/ndk/index.html that's not true, 
platforms/android-19/arch-arm/usr/lib/libc.so and 
platforms/android-9/arch-arm/usr/lib/libc.so are identical.

James

On 26/11/13 00:06, Stephen Hines wrote:
> This is only available for apps that target API level 19 and up. On 18 
> and lower, the futimens() function won't be available via libc.so. You 
> will need to target API 19 (KitKat) in order to actually use it. If I 
> do an "nm -D 
> prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/libc.so", I can 
> see futimens() is present. On the others, it is definitely missing.
>
> Steve
>
>
> On Mon, Nov 25, 2013 at 3:57 PM, James Lyon <jameslyon0 at gmail.com 
> <mailto:jameslyon0 at gmail.com>> wrote:
>
>     Hmmm.... following up on your point I've noticed something
>     strange. futimens is missing from the NDK (r9b; it's not in any
>     headers and the libc.so files are the same all the way back to
>     android-9), which is why I thought it's missing from Android
>     generally. The NDK is by far the easiest way to cross-compile
>     since it provides a standalone cross-compilation toolchain. It is
>     however present in
>
>     https://android.googlesource.com/platform/prebuilts/ndk/+/master/9/platforms/android-19/arch-arm/usr/include/sys/stat.h
>
>     which seems odd to me. Steve, perhaps you know whether this is
>     intentional? My googling isn't getting me anywhere on why the file
>     I've linked is different to
>     platforms/android-19/arch-arm/usr/include/sys/stat.h in the NDK.
>
>     James
>
>
>     On 25/11/13 22:12, Stephen Hines wrote:
>>     On Mon, Nov 25, 2013 at 12:36 PM, Alp Toker <alp at nuanti.com
>>     <mailto:alp at nuanti.com>> wrote:
>>
>>
>>         On 25/11/2013 18:27, Stephen Hines wrote:
>>
>>             futimens() is available in Android KitKat. We work
>>             extensively with LLVM and this allowed us to remove our
>>             ugly workaround for not having this functionality.
>>
>>
>>         Hi Steve,
>>
>>         Is your work on a branch somewhere?
>>
>>
>>     It is all available as part of the Android Open Source Project
>>     (AOSP). I should mention that we do not use the JIT path, but
>>     LLVM does require futimens() to build properly for Android (hence
>>     us fixing this missing part of bionic). If you want to look at
>>     local patches that we have for LLVM/Clang, those are available in
>>     "external/llvm" and "external/clang". We have very few
>>     differences from upstream LLVM.
>>
>>
>>         James is putting a lot of time into this, and the LLVM
>>         community has been making best efforts to help review his
>>         patches which can be difficult for those who don't normally
>>         work with the Android platform.
>>
>>         So if the work is already out there, that'd be useful to know
>>         in order to avoid duplication of effort. There are lots of
>>         other useful things we could be doing if support for that
>>         platform is already complete somewhere on Github :-)
>>
>>
>>     http://source.android.com <http://source.android.com/> has
>>     instructions for how to pull down AOSP. We don't use github.
>>
>>     Steve
>>
>>
>>         Cheers,
>>         Alp.
>>
>>
>>
>>             Steve
>>
>>
>>
>>             On Mon, Nov 25, 2013 at 8:30 AM, James Lyon
>>             <jameslyon0 at gmail.com <mailto:jameslyon0 at gmail.com>
>>             <mailto:jameslyon0 at gmail.com
>>             <mailto:jameslyon0 at gmail.com>>> wrote:
>>
>>                 Hi,
>>
>>                 I've been trying to get LLVM working as a JIT
>>             compiler on Android
>>                 for a while. It works now, except that the
>>                 setLastModificationAndAccessTime function won't build
>>             because the
>>                 Bionic C library lacks both futimes and futimens.
>>             There doesn't
>>                 appear to be any "nice" workaround for this problem:
>>             the only ways
>>                 I can think of to make
>>             setLastModificationAndAccessTime work are
>>                 either to go by /proc/self/fd or invoke the system
>>             call directly
>>                 (the second option isn't helped by the fact that the
>>             Android
>>                 headers don't define the relevant system call number
>>             and it varies
>>                 between platforms).
>>
>>                 Right now the only part of LLVM that uses this
>>             function is
>>                 llvm-ar, so it's not as if lack of support for this
>>             function is a
>>                 serious shortcoming. I don't really know the history of
>>                 PathV1/PathV2 but I think the simplest solutions are:
>>
>>                  1. Have setLastModificationAndAccessTime fail on
>>             platforms
>>
>>                     without futimes/futimens (by ENOSYS). This is
>>             pretty ugly
>>                     because having a function which can never succeed
>>             seems likely
>>                     to confuse users.
>>                  2. Only declare setLastModificationAndAccessTime if
>>             it is
>>
>>                     actually available (add something to
>>             llvm-config.h to indicate
>>                     this). The downside here is that (in theory at
>>             least) users
>>                     need to know that
>>             setLastModificationAndAccessTime might be
>>                     missing, although in practise they can probably
>>             ignore the issue.
>>
>>                 (1) is trivial to implement and is what I'm doing
>>             now; I can also
>>                 create a patch to do (2), I just thought I'd ask for
>>             opinions first.
>>
>>                 Regards,
>>
>>                 James
>>
>>             _______________________________________________
>>                 LLVM Developers mailing list
>>             LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>             <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>
>>
>>             http://llvm.cs.uiuc.edu
>>             http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>
>>
>>             _______________________________________________
>>             LLVM Developers mailing list
>>             LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>             http://llvm.cs.uiuc.edu
>>             http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>         -- 
>>         http://www.nuanti.com
>>         the browser experts
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131126/292b40ab/attachment.html>


More information about the llvm-dev mailing list