[-]
[+]
|
Changed |
_service:tar_git:libhybris.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="tar_git">
<param name="url">https://github.com/mer-hybris/libhybris.git</param>
<param name="branch">master</param>
- <param name="revision">0.0.5.40</param>
+ <param name="revision">HEAD</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.42.tar.bz2/libhybris/hybris/common/hooks.c
^
|
@@ -3073,6 +3073,7 @@
HOOK_DIRECT_NO_DEBUG(ptsname),
HOOK_TO(__hybris_set_errno_internal, _hybris_hook___set_errno),
HOOK_DIRECT_NO_DEBUG(getservbyname),
+ HOOK_DIRECT_NO_DEBUG(close), /* avoid calling fdsan functions */
/* libgen.h */
HOOK_INDIRECT(basename),
HOOK_INDIRECT(dirname),
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.42.tar.bz2/libhybris/hybris/common/q/linker.cpp
^
|
@@ -76,6 +76,9 @@
//#include "android-base/stringprintf.h"
//#include "ziparchive/zip_archive.h"
+#ifdef WANT_ARM_TRACING
+#include "../wrappers.h"
+#endif
#define TMPFS_MAGIC 0x01021994
@@ -2428,7 +2431,19 @@
const TlsIndex ti { tls_module->module_id, sym->st_value };
*symbol = TLS_GET_ADDR(&ti);
} else {
+#ifdef WANT_ARM_TRACING
+ switch(ELF_ST_TYPE(sym->st_info))
+ {
+ case STT_FUNC:
+ case STT_GNU_IFUNC:
+ case STT_ARM_TFUNC:
+ *symbol = reinterpret_cast<void*>(_create_wrapper((char*)symbol, (void*)found->resolve_symbol_address(sym), WRAPPER_DYNHOOK));
+ default:
+ *symbol = reinterpret_cast<void*>(found->resolve_symbol_address(sym));
+ }
+#else
*symbol = reinterpret_cast<void*>(found->resolve_symbol_address(sym));
+#endif
}
failure_guard.Disable();
LD_LOG(kLogDlsym,
@@ -2942,6 +2957,28 @@
return false;
}
}
+#ifdef WANT_ARM_TRACING
+ else
+ {
+ // this will be slower.
+ if (!lookup_version_info(version_tracker, sym, sym_name, &vi)) {
+ return false;
+ }
+
+ if (!soinfo_do_lookup(this, sym_name, vi, &lsi, global_group, local_group, &s)) {
+ return false;
+ }
+
+ switch(ELF_ST_TYPE(s->st_info))
+ {
+ case STT_FUNC:
+ case STT_GNU_IFUNC:
+ case STT_ARM_TFUNC:
+ sym_addr = (ElfW(Addr))_create_wrapper(sym_name, (void*)sym_addr, WRAPPER_HOOKED);
+ break;
+ }
+ }
+#endif
if (sym_addr == 0 && s == nullptr) {
// We only allow an undefined symbol if this is a weak reference...
@@ -3039,7 +3076,22 @@
sym_name, get_realpath());
return false;
}
+#ifdef WANT_ARM_TRACING
+ switch(ELF_ST_TYPE(s->st_info))
+ {
+ case STT_FUNC:
+ case STT_GNU_IFUNC:
+ case STT_ARM_TFUNC:
+ sym_addr = (ElfW(Addr))_create_wrapper(sym_name,
+ (void*)lsi->resolve_symbol_address(s), WRAPPER_UNHOOKED);
+ break;
+ default:
+ sym_addr = lsi->resolve_symbol_address(s);
+ break;
+ }
+#else
sym_addr = lsi->resolve_symbol_address(s);
+#endif
}
#if !defined(__LP64__)
if (protect_segments) {
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.42.tar.bz2/libhybris/hybris/common/q/linker_globals.h
^
|
@@ -82,6 +82,10 @@
size_t linker_get_error_buffer_size();
extern void* (*_get_hooked_symbol)(const char *sym, const char *requester);
+#ifdef WANT_ARM_TRACING
+extern void *(*_create_wrapper)(const char *symbol, void *function, int wrapper_type);
+#endif
+
class DlErrorRestorer {
public:
DlErrorRestorer() {
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.42.tar.bz2/libhybris/hybris/common/q/linker_main.cpp
^
|
@@ -785,10 +785,10 @@
ldpreload_env = getenv("HYBRIS_LD_PRELOAD");
}
- if (DEFAULT_HYBRIS_LD_LIBRARY_PATH)
- parse_LD_LIBRARY_PATH(DEFAULT_HYBRIS_LD_LIBRARY_PATH);
- else
+ if (ldpath_env)
parse_LD_LIBRARY_PATH(ldpath_env);
+ else
+ parse_LD_LIBRARY_PATH(DEFAULT_HYBRIS_LD_LIBRARY_PATH);
parse_LD_PRELOAD(ldpreload_env);
DEBUG("sdk_version %d\n", sdk_version);
@@ -798,6 +798,9 @@
_get_hooked_symbol = get_hooked_symbol;
_linker_enable_gdb_support = enable_linker_gdb_support;
+#ifdef WANT_ARM_TRACING
+ _create_wrapper = create_wrapper;
+#endif
soinfo tmp_linker_so(nullptr, nullptr, nullptr, 0, 0);
generate_tmpsoinfo(tmp_linker_so);
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.42.tar.bz2/libhybris/hybris/common/wrapper_code.h
^
|
@@ -22,8 +22,11 @@
extern "C" {
#endif
-void wrapper_code_generic() __attribute__((naked,noinline)) __attribute__((target("arm")));
+#ifdef __aarch64__
+void wrapper_code_generic() __attribute__((naked,noinline));
+#endif
#ifdef __arm__
+void wrapper_code_generic() __attribute__((naked,noinline)) __attribute__((target("arm")));
void wrapper_code_generic_thumb() __attribute__((naked,noinline)) __attribute__((target("thumb")));
#endif
|