include_directories(${LUAJIT_INCLUDE_DIR})
add_executable(bcc-lua src/main.c bcc.o)
target_link_libraries(bcc-lua ${LUAJIT_LIBRARIES})
+ target_link_libraries(bcc-lua -Wl,--whole-archive bcc-static -Wl,--no-whole-archive)
install(TARGETS bcc-lua RUNTIME DESTINATION bin)
endif()
local str = require("debug").getinfo(1, "S").source:sub(2)
local script_path = str:match("(.*/)").."/?.lua;"
package.path = script_path..package.path
-rawset(_G, "BCC_STANDALONE_NAME", "bcc-probe")
require("bcc.run")()
void bcc_symcache_refresh(void *resolver);
]]
-return ffi.load(os.getenv("LIBBCC_SO_PATH") or rawget(_G, "LIBBCC_SO_PATH") or "bcc")
+if rawget(_G, "BCC_STANDALONE") then
+ return ffi.C
+else
+ return ffi.load(
+ os.getenv("LIBBCC_SO_PATH") or
+ rawget(_G, "LIBBCC_SO_PATH") or
+ "bcc")
+end
return function()
require("bcc.vendor.helpers")
- local progname = rawget(_G, "BCC_STANDALONE_NAME") or "bcc-lua"
+ local standalone = rawget(_G, "BCC_STANDALONE")
+ local progname = standalone or "bcc-probe"
local function print_usage()
io.stderr:write(string.format(
- "usage: %s [[--so-path=PATH|--version|--verbose] --] path_to_script.lua [...]\n",
+ "usage: %s [[--version|--verbose] --] path_to_script.lua [...]\n",
progname))
os.exit(1)
end
local k = table.remove(arg, 1)
if k == "--" then
break
- elseif string.starts(k, "--so-path=") then
+ elseif standalone == nil and string.starts(k, "--so-path=") then
rawset(_G, "LIBBCC_SO_PATH", string.lstrip(k, "--so-path="))
elseif k == "--llvm-debug" then
rawset(_G, "LIBBCC_LLVM_DEBUG", 1)
}
}
-static void find_local_libbcc(lua_State *L)
-{
- char buffer[4096];
- char *dirname;
-
- if (readlink("/proc/self/exe", buffer, sizeof(buffer)) < 0)
- return;
-
- dirname = strrchr(buffer, '/');
- if (dirname == NULL)
- return;
-
- strcpy(dirname + 1, "libbcc.so");
-
- if (access(buffer, F_OK|R_OK|X_OK) != 0)
- return;
-
- lua_pushstring(L, buffer);
- lua_setglobal(L, "LIBBCC_SO_PATH");
-}
-
static int pmain(lua_State *L)
{
struct Smain *s = (struct Smain *)lua_touserdata(L, 1);
lua_gc(L, LUA_GCSTOP, 0);
luaL_openlibs(L);
lua_gc(L, LUA_GCRESTART, 0);
- find_local_libbcc(L);
s->status = dolibrary(L, "bcc", 0);
if (s->status)
return 0;
lua_pushstring(L, progname);
- lua_setglobal(L, "BCC_STANDALONE_NAME");
+ lua_setglobal(L, "BCC_STANDALONE");
pushargv(L, s->argv, s->argc, 1);
lua_setglobal(L, "arg");
return EXIT_FAILURE;
}
+ if (geteuid() != 0) {
+ l_message(argv[0], "bcc-lua must be ran as root");
+ return EXIT_FAILURE;
+ }
+
progname = argv[0];
s.argc = argc;
s.argv = argv;