[LLVMbugs] [Bug 5480] New: lli -force-interpreter tries to lookup symbols that still have \x01 in their name

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Fri Nov 13 05:14:02 PST 2009


http://llvm.org/bugs/show_bug.cgi?id=5480

           Summary: lli -force-interpreter tries to lookup symbols that
                    still have \x01 in their name
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: timo.lindfors at iki.fi
                CC: llvmbugs at cs.uiuc.edu


Steps to reproduce:
1) cat > testcase.c <<EOF
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    struct stat fileinfo;

    stat("/etc/motd", &fileinfo);
    printf("%d\n", fileinfo.st_ino);
    return 0;
}
EOF
2) llvm-gcc -c -o testcase.bc -emit-llvm -O2 testcase.c
3) lli -force-interpreter testcase.bc

Expected results:
3) lli runs the program and it prints the inode number of /etc/motd

Actual results:
3) LLVM ERROR: Tried to execute an unknown external function: i32 (i32, i8*, {
i64, i16, i32, i32, i32, i32, i32, i64, i16, i64, i32, i64, { i32, i32 }, {
i32, i32 }, { i32, i32 }, i64 }*)* __xstat64

More info:
1) lli tries to dlsym "\x01__xstat64" but the \x01 in the error message just is
not visible in terminal.
2) distro is debian stable
3) llvm revision is 86985
4) llvm-gcc revision is 86986
5) A very crude patch to fix the issue is

Index: lib/System/DynamicLibrary.cpp
===================================================================
--- lib/System/DynamicLibrary.cpp       (revision 86985)
+++ lib/System/DynamicLibrary.cpp       (working copy)
@@ -70,6 +70,9 @@
 }

 void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
+  if (symbolName && symbolName[0] == '\1') {
+      symbolName++;
+  }
   // First check symbols added via AddSymbol().
   if (ExplicitSymbols) {
     std::map<std::string, void *>::iterator I =

but I don't yet understand enough LLVM to figure out where this really should
be done. In Mangler perhaps?


-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list