Addr VG_(client_base); /* client address space limits */
Addr VG_(client_end);
Addr VG_(client_mapbase);
-Addr VG_(client_trampoline_code);
Addr VG_(clstk_base);
Addr VG_(clstk_end);
UWord VG_(clstk_id);
#include "pub_core_basics.h"
#include "pub_core_threadstate.h"
#include "pub_core_aspacemgr.h"
+#include "pub_core_debuginfo.h"
#include "pub_core_libcbase.h"
#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
space at an arbitary address. Therefore, this code must be completely
position-independent.
*/
+.global VG_(client_trampoline_code)
.global VG_(trampoline_code_start)
.global VG_(trampoline_code_length)
.global VG_(tramp_sigreturn_offset)
tramp_code_end:
.data
+VG_(client_trampoline_code):
+ .long 0
VG_(trampoline_code_length):
.long tramp_code_end - VG_(trampoline_code_start)
VG_(tramp_sigreturn_offset):
extern Addr VG_(clstk_base); // client stack range
extern Addr VG_(clstk_end);
extern UWord VG_(clstk_id); // client stack id
-extern Addr VG_(client_trampoline_code);
extern Addr VG_(brk_base); // start of brk
extern Addr VG_(brk_limit); // current brk
// over the client's, for arcane signal return and syscall purposes...
//--------------------------------------------------------------------
+extern Addr VG_(client_trampoline_code);
+
// Platform-specifics aren't neatly factored out here, since some of the
// constants are not used on all platforms. But it's non-obvious how
// to do it better.