mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-26 07:54:36 +00:00
Manually load required symbols.
This commit is contained in:
parent
9de2d312a3
commit
6094d69479
@ -1,3 +1,3 @@
|
|||||||
clang tracy_systrace.c -s -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -fno-stack-protector -Wl,-z,norelro -Wl,--build-id=none -nostdlib -lc
|
clang tracy_systrace.c -s -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -fno-stack-protector -Wl,-z,norelro -Wl,--build-id=none -nostdlib -ldl
|
||||||
strip --strip-all -R .note.gnu.gold-version -R .comment -R .note -R .note.gnu.build-id -R .note.ABI-tag -R .eh_frame -R .eh_frame_hdr -R .gnu.hash -R .gnu.version -R .got a.out
|
strip --strip-all -R .note.gnu.gold-version -R .comment -R .note -R .note.gnu.build-id -R .note.ABI-tag -R .eh_frame -R .eh_frame_hdr -R .gnu.hash -R .gnu.version -R .got a.out
|
||||||
sstrip -z a.out (elfkickers)
|
sstrip -z a.out (elfkickers)
|
||||||
|
@ -6,15 +6,32 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
enum { BufSize = 64*1024 };
|
enum { BufSize = 64*1024 };
|
||||||
|
|
||||||
|
typedef int (*open_t)( const char*, int, ... );
|
||||||
|
typedef void (*exit_t)( int );
|
||||||
|
typedef int (*poll_t)( struct pollfd*, nfds_t, int timeout );
|
||||||
|
typedef int (*nanosleep_t)( const struct timespec*, struct timespec* );
|
||||||
|
typedef ssize_t (*read_t)( int, void*, size_t );
|
||||||
|
typedef ssize_t (*write_t)( int, const void*, size_t );
|
||||||
|
|
||||||
void _start()
|
void _start()
|
||||||
{
|
{
|
||||||
|
void* libc = dlopen( "libc.so", RTLD_LAZY );
|
||||||
|
|
||||||
|
open_t sym_open = dlsym( libc, "open" );
|
||||||
|
exit_t sym_exit = dlsym( libc, "exit" );
|
||||||
|
poll_t sym_poll = dlsym( libc, "poll" );
|
||||||
|
nanosleep_t sym_nanosleep = dlsym( libc, "nanosleep" );
|
||||||
|
read_t sym_read = dlsym( libc, "read" );
|
||||||
|
write_t sym_write = dlsym( libc, "write" );
|
||||||
|
|
||||||
char buf[BufSize];
|
char buf[BufSize];
|
||||||
|
|
||||||
int kernelFd = open( "/sys/kernel/debug/tracing/trace_pipe", O_RDONLY );
|
int kernelFd = sym_open( "/sys/kernel/debug/tracing/trace_pipe", O_RDONLY );
|
||||||
if( kernelFd < 0 ) exit( 0 );
|
if( kernelFd < 0 ) sym_exit( 0 );
|
||||||
|
|
||||||
struct pollfd pfd;
|
struct pollfd pfd;
|
||||||
pfd.fd = kernelFd;
|
pfd.fd = kernelFd;
|
||||||
@ -26,11 +43,11 @@ void _start()
|
|||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
while( poll( &pfd, 1, 0 ) <= 0 ) nanosleep( &sleepTime, NULL );
|
while( sym_poll( &pfd, 1, 0 ) <= 0 ) sym_nanosleep( &sleepTime, NULL );
|
||||||
const int rd = read( kernelFd, buf, BufSize );
|
const int rd = sym_read( kernelFd, buf, BufSize );
|
||||||
if( rd <= 0 ) break;
|
if( rd <= 0 ) break;
|
||||||
write( STDOUT_FILENO, buf, rd );
|
sym_write( STDOUT_FILENO, buf, rd );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit( 0 );
|
sym_exit( 0 );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user