This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Register a signal handler in _dl_start to handle SIGSEGV for dynamiclinker


Hi

I am doing a research project on IA-64 and glibc-2.5. My goal is to do instrumentation to enable whole-program (including those functions in library, or dynamic linker) taint tracking.

For that purpose, I need to register a special handler to handle SIGSEGV at the very start of any program, for I use unmapped area as the bitmap for taint tracking (more specifically, 0x0 ~ 0x1000000000000000 on Itanium).

My problem is, when I hook signal handler at _dl_start (very start of the dynamic linker, according to my study of code) to enable taint tracking for dynamic linker, the special signal handler seems not work - that is, when I run ld.so, it reports Segment fault directly without trapping into my own signal handler. However, I dump the code and discover the hook function has been called before such access.

The code to register the signal handler is shown below:

===================================================

int oldact_saved = shift_sigaction(SIGSEGV, NULL, &oldact);

 act.sa_handler = NULL;
 act.sa_sigaction = B_sigaction;
 act.sa_mask = oldact.sa_mask;
 act.sa_flags = SA_SIGINFO;

int newact_reged = shift_sigaction(SIGSEGV, &act, NULL);

===================================================

BTW. I use gdb to debug the ld.so, but gdb cannot stop at the break points ...

So, am I missing something here to register a signal handler for dynamic linker?

Thanks

yours sincerely

Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]