Changeset View
Changeset View
Standalone View
Standalone View
head/libexec/rtld-elf/aarch64/rtld_machdep.h
Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | #define make_function_pointer(def, defobj) \ | ||||
((defobj)->relocbase + (def)->st_value) | ((defobj)->relocbase + (def)->st_value) | ||||
#define call_initfini_pointer(obj, target) \ | #define call_initfini_pointer(obj, target) \ | ||||
(((InitFunc)(target))()) | (((InitFunc)(target))()) | ||||
#define call_init_pointer(obj, target) \ | #define call_init_pointer(obj, target) \ | ||||
(((InitArrFunc)(target))(main_argc, main_argv, environ)) | (((InitArrFunc)(target))(main_argc, main_argv, environ)) | ||||
/* | |||||
* Pass zeros into the ifunc resolver so we can change them later. The first | |||||
* 8 arguments on arm64 are passed in registers so make them known values | |||||
* if we decide to use them later. Because of this ifunc resolvers can assume | |||||
* no arguments are passeed in, and if this changes later will be able to | |||||
* compare the argument with 0 to see if it is set. | |||||
*/ | |||||
#define call_ifunc_resolver(ptr) \ | #define call_ifunc_resolver(ptr) \ | ||||
(((Elf_Addr (*)(void))ptr)()) | (((Elf_Addr (*)(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, \ | ||||
uint64_t, uint64_t, uint64_t))ptr)(0, 0, 0, 0, 0, 0, 0, 0)) | |||||
#define round(size, align) \ | #define round(size, align) \ | ||||
(((size) + (align) - 1) & ~((align) - 1)) | (((size) + (align) - 1) & ~((align) - 1)) | ||||
#define calculate_first_tls_offset(size, align) \ | #define calculate_first_tls_offset(size, align) \ | ||||
round(16, align) | round(16, align) | ||||
#define calculate_tls_offset(prev_offset, prev_size, size, align) \ | #define calculate_tls_offset(prev_offset, prev_size, size, align) \ | ||||
round(prev_offset + prev_size, align) | round(prev_offset + prev_size, align) | ||||
#define calculate_tls_end(off, size) ((off) + (size)) | #define calculate_tls_end(off, size) ((off) + (size)) | ||||
Show All 17 Lines |