uti: identify UTI thread by thread local variable
Change-Id: I64372a932378e4ead09ea27fbf5b52062a109756
This commit is contained in:
@ -1,3 +1,4 @@
|
|||||||
|
#define _GNU_SOURCE
|
||||||
#include <libsyscall_intercept_hook_point.h>
|
#include <libsyscall_intercept_hook_point.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -10,9 +11,11 @@
|
|||||||
#include "../include/uti.h"
|
#include "../include/uti.h"
|
||||||
#include "./archdep_uti.h"
|
#include "./archdep_uti.h"
|
||||||
|
|
||||||
|
#define DEBUG_UTI
|
||||||
|
|
||||||
static struct uti_desc uti_desc;
|
static struct uti_desc uti_desc;
|
||||||
|
|
||||||
#define DEBUG_UTI
|
static __thread int on_linux = -1;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hook(long syscall_number,
|
hook(long syscall_number,
|
||||||
@ -21,8 +24,6 @@ hook(long syscall_number,
|
|||||||
long arg4, long arg5,
|
long arg4, long arg5,
|
||||||
long *result)
|
long *result)
|
||||||
{
|
{
|
||||||
//return 1; /* debug */
|
|
||||||
int tid = uti_syscall0(__NR_gettid);
|
|
||||||
struct terminate_thread_desc term_desc;
|
struct terminate_thread_desc term_desc;
|
||||||
unsigned long code;
|
unsigned long code;
|
||||||
int stack_top;
|
int stack_top;
|
||||||
@ -31,12 +32,21 @@ hook(long syscall_number,
|
|||||||
if (!uti_desc.start_syscall_intercept) {
|
if (!uti_desc.start_syscall_intercept) {
|
||||||
return 1; /* System call isn't taken over */
|
return 1; /* System call isn't taken over */
|
||||||
}
|
}
|
||||||
if (tid != uti_desc.mck_tid) {
|
|
||||||
|
/* new thread */
|
||||||
|
if (on_linux == -1) {
|
||||||
|
int tid = uti_syscall0(__NR_gettid);
|
||||||
|
|
||||||
|
on_linux = (tid == uti_desc.mck_tid) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (on_linux == 0) {
|
||||||
if (uti_desc.syscalls2 && syscall_number >= 0 && syscall_number < 512) {
|
if (uti_desc.syscalls2 && syscall_number >= 0 && syscall_number < 512) {
|
||||||
uti_desc.syscalls2[syscall_number]++;
|
uti_desc.syscalls2[syscall_number]++;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_UTI
|
#ifdef DEBUG_UTI
|
||||||
if (uti_desc.syscalls && syscall_number >= 0 && syscall_number < 512) {
|
if (uti_desc.syscalls && syscall_number >= 0 && syscall_number < 512) {
|
||||||
uti_desc.syscalls[syscall_number]++;
|
uti_desc.syscalls[syscall_number]++;
|
||||||
|
|||||||
Reference in New Issue
Block a user