| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | /*- |
| 2 | * Copyright (c) 1999, 2000 John D. Polstra. | |
| 3 | * All rights reserved. | |
| 4 | * | |
| 5 | * Redistribution and use in source and binary forms, with or without | |
| 6 | * modification, are permitted provided that the following conditions | |
| 7 | * are met: | |
| 8 | * 1. Redistributions of source code must retain the above copyright | |
| 9 | * notice, this list of conditions and the following disclaimer. | |
| 10 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 11 | * notice, this list of conditions and the following disclaimer in the | |
| 12 | * documentation and/or other materials provided with the distribution. | |
| 13 | * | |
| 14 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
| 15 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 17 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
| 18 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 19 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 20 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| 21 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| 22 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| 23 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 24 | * SUCH DAMAGE. | |
| 25 | * | |
| f4f4bfd5 | 26 | * $FreeBSD$ |
| 984263bc MD |
27 | */ |
| 28 | ||
| 29 | #ifndef RTLD_MACHDEP_H | |
| 30 | #define RTLD_MACHDEP_H 1 | |
| 31 | ||
| fcf53d9b JM |
32 | #include <sys/types.h> |
| 33 | #include <machine/atomic.h> | |
| 34 | ||
| 35 | #define CACHE_LINE_SIZE 32 | |
| 36 | ||
| 37 | struct Struct_Obj_Entry; | |
| 38 | ||
| 984263bc MD |
39 | /* Return the address of the .dynamic section in the dynamic linker. */ |
| 40 | #define rtld_dynamic(obj) \ | |
| 41 | ((const Elf_Dyn *)((obj)->relocbase + (Elf_Addr)&_DYNAMIC)) | |
| 42 | ||
| 43 | /* Fixup the jump slot at "where" to transfer control to "target". */ | |
| fcf53d9b JM |
44 | static inline Elf_Addr |
| 45 | reloc_jmpslot(Elf_Addr *where, Elf_Addr target, | |
| 46 | const struct Struct_Obj_Entry *obj, | |
| 47 | const struct Struct_Obj_Entry *refobj, const Elf_Rel *rel) | |
| 984263bc | 48 | { |
| fcf53d9b JM |
49 | #ifdef dbg |
| 50 | dbg("reloc_jmpslot: *%p = %p", (void *)(where), | |
| 51 | (void *)(target)); | |
| 52 | #endif | |
| 53 | (*(Elf_Addr *)(where) = (Elf_Addr)(target)); | |
| 54 | return target; | |
| 984263bc MD |
55 | } |
| 56 | ||
| fcf53d9b JM |
57 | #define make_function_pointer(def, defobj) \ |
| 58 | ((defobj)->relocbase + (def)->st_value) | |
| 984263bc | 59 | |
| fcf53d9b JM |
60 | #define call_initfini_pointer(obj, target) \ |
| 61 | (((InitFunc)(target))()) | |
| 984263bc | 62 | |
| b28bf640 JM |
63 | #define call_array_pointer(target, argc, argv, env) \ |
| 64 | (((InitArrayFunc)(target))(argc, argv, env)) | |
| 65 | ||
| 55b88cae DX |
66 | #define round(size, align) \ |
| 67 | (((size) + (align) - 1) & ~((align) - 1)) | |
| 68 | #define calculate_first_tls_offset(size, align) \ | |
| 69 | round(size, align) | |
| 70 | #define calculate_tls_offset(prev_offset, prev_size, size, align) \ | |
| 71 | round((prev_offset) + (size), align) | |
| 72 | #define calculate_tls_end(off, size) (off) | |
| 73 | ||
| 74 | typedef struct { | |
| 75 | unsigned long ti_module; | |
| 76 | unsigned long ti_offset; | |
| 77 | } tls_index; | |
| 78 | ||
| a1eee96a MD |
79 | struct tls_tcb; |
| 80 | ||
| 55b88cae DX |
81 | extern void *___tls_get_addr(tls_index *ti) __attribute__((__regparm__(1))); |
| 82 | extern void *__tls_get_addr(tls_index *ti); | |
| a1eee96a | 83 | extern void *__tls_get_addr_tcb(struct tls_tcb *tcb, tls_index *ti); |
| 55b88cae | 84 | |
| e9de6dcc JM |
85 | #define RTLD_DEFAULT_STACK_PF_EXEC PF_X |
| 86 | #define RTLD_DEFAULT_STACK_EXEC PROT_EXEC | |
| 87 | ||
| 984263bc | 88 | #endif |