1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker * 5*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*8d67ca89SAndroid Build Coastguard Worker * are met: 8*8d67ca89SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 9*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in 12*8d67ca89SAndroid Build Coastguard Worker * the documentation and/or other materials provided with the 13*8d67ca89SAndroid Build Coastguard Worker * distribution. 14*8d67ca89SAndroid Build Coastguard Worker * 15*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16*8d67ca89SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17*8d67ca89SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18*8d67ca89SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19*8d67ca89SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21*8d67ca89SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22*8d67ca89SAndroid Build Coastguard Worker * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23*8d67ca89SAndroid Build Coastguard Worker * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24*8d67ca89SAndroid Build Coastguard Worker * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25*8d67ca89SAndroid Build Coastguard Worker * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 27*8d67ca89SAndroid Build Coastguard Worker */ 28*8d67ca89SAndroid Build Coastguard Worker 29*8d67ca89SAndroid Build Coastguard Worker #pragma once 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 32*8d67ca89SAndroid Build Coastguard Worker 33*8d67ca89SAndroid Build Coastguard Worker #include <linux/elf.h> 34*8d67ca89SAndroid Build Coastguard Worker #include <linux/elf-em.h> 35*8d67ca89SAndroid Build Coastguard Worker #undef EI_PAD 36*8d67ca89SAndroid Build Coastguard Worker 37*8d67ca89SAndroid Build Coastguard Worker #include <bits/auxvec.h> 38*8d67ca89SAndroid Build Coastguard Worker #include <bits/elf_common.h> 39*8d67ca89SAndroid Build Coastguard Worker 40*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.intro.html */ 41*8d67ca89SAndroid Build Coastguard Worker typedef __u64 Elf32_Xword; 42*8d67ca89SAndroid Build Coastguard Worker typedef __s64 Elf32_Sxword; 43*8d67ca89SAndroid Build Coastguard Worker 44*8d67ca89SAndroid Build Coastguard Worker typedef struct { 45*8d67ca89SAndroid Build Coastguard Worker __u32 a_type; 46*8d67ca89SAndroid Build Coastguard Worker union { 47*8d67ca89SAndroid Build Coastguard Worker __u32 a_val; 48*8d67ca89SAndroid Build Coastguard Worker } a_un; 49*8d67ca89SAndroid Build Coastguard Worker } Elf32_auxv_t; 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker typedef struct { 52*8d67ca89SAndroid Build Coastguard Worker __u64 a_type; 53*8d67ca89SAndroid Build Coastguard Worker union { 54*8d67ca89SAndroid Build Coastguard Worker __u64 a_val; 55*8d67ca89SAndroid Build Coastguard Worker } a_un; 56*8d67ca89SAndroid Build Coastguard Worker } Elf64_auxv_t; 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.sheader.html */ 59*8d67ca89SAndroid Build Coastguard Worker typedef struct { 60*8d67ca89SAndroid Build Coastguard Worker Elf32_Word ch_type; 61*8d67ca89SAndroid Build Coastguard Worker Elf32_Word ch_size; 62*8d67ca89SAndroid Build Coastguard Worker Elf32_Word ch_addralign; 63*8d67ca89SAndroid Build Coastguard Worker } Elf32_Chdr; 64*8d67ca89SAndroid Build Coastguard Worker typedef struct { 65*8d67ca89SAndroid Build Coastguard Worker Elf64_Word ch_type; 66*8d67ca89SAndroid Build Coastguard Worker Elf64_Word ch_reserved; 67*8d67ca89SAndroid Build Coastguard Worker Elf64_Xword ch_size; 68*8d67ca89SAndroid Build Coastguard Worker Elf64_Xword ch_addralign; 69*8d67ca89SAndroid Build Coastguard Worker } Elf64_Chdr; 70*8d67ca89SAndroid Build Coastguard Worker 71*8d67ca89SAndroid Build Coastguard Worker typedef struct { 72*8d67ca89SAndroid Build Coastguard Worker Elf32_Word l_name; 73*8d67ca89SAndroid Build Coastguard Worker Elf32_Word l_time_stamp; 74*8d67ca89SAndroid Build Coastguard Worker Elf32_Word l_checksum; 75*8d67ca89SAndroid Build Coastguard Worker Elf32_Word l_version; 76*8d67ca89SAndroid Build Coastguard Worker Elf32_Word l_flags; 77*8d67ca89SAndroid Build Coastguard Worker } Elf32_Lib; 78*8d67ca89SAndroid Build Coastguard Worker typedef struct { 79*8d67ca89SAndroid Build Coastguard Worker Elf64_Word l_name; 80*8d67ca89SAndroid Build Coastguard Worker Elf64_Word l_time_stamp; 81*8d67ca89SAndroid Build Coastguard Worker Elf64_Word l_checksum; 82*8d67ca89SAndroid Build Coastguard Worker Elf64_Word l_version; 83*8d67ca89SAndroid Build Coastguard Worker Elf64_Word l_flags; 84*8d67ca89SAndroid Build Coastguard Worker } Elf64_Lib; 85*8d67ca89SAndroid Build Coastguard Worker 86*8d67ca89SAndroid Build Coastguard Worker typedef struct { 87*8d67ca89SAndroid Build Coastguard Worker Elf32_Xword m_value; 88*8d67ca89SAndroid Build Coastguard Worker Elf32_Word m_info; 89*8d67ca89SAndroid Build Coastguard Worker Elf32_Word m_poffset; 90*8d67ca89SAndroid Build Coastguard Worker Elf32_Half m_repeat; 91*8d67ca89SAndroid Build Coastguard Worker Elf32_Half m_stride; 92*8d67ca89SAndroid Build Coastguard Worker } Elf32_Move; 93*8d67ca89SAndroid Build Coastguard Worker typedef struct { 94*8d67ca89SAndroid Build Coastguard Worker Elf64_Xword m_value; 95*8d67ca89SAndroid Build Coastguard Worker Elf64_Xword m_info; 96*8d67ca89SAndroid Build Coastguard Worker Elf64_Xword m_poffset; 97*8d67ca89SAndroid Build Coastguard Worker Elf64_Half m_repeat; 98*8d67ca89SAndroid Build Coastguard Worker Elf64_Half m_stride; 99*8d67ca89SAndroid Build Coastguard Worker } Elf64_Move; 100*8d67ca89SAndroid Build Coastguard Worker 101*8d67ca89SAndroid Build Coastguard Worker typedef __u16 Elf32_Section; 102*8d67ca89SAndroid Build Coastguard Worker typedef __u16 Elf64_Section; 103*8d67ca89SAndroid Build Coastguard Worker 104*8d67ca89SAndroid Build Coastguard Worker typedef struct { 105*8d67ca89SAndroid Build Coastguard Worker Elf32_Half si_boundto; 106*8d67ca89SAndroid Build Coastguard Worker Elf32_Half si_flags; 107*8d67ca89SAndroid Build Coastguard Worker } Elf32_Syminfo; 108*8d67ca89SAndroid Build Coastguard Worker typedef struct { 109*8d67ca89SAndroid Build Coastguard Worker Elf64_Half si_boundto; 110*8d67ca89SAndroid Build Coastguard Worker Elf64_Half si_flags; 111*8d67ca89SAndroid Build Coastguard Worker } Elf64_Syminfo; 112*8d67ca89SAndroid Build Coastguard Worker 113*8d67ca89SAndroid Build Coastguard Worker typedef Elf32_Half Elf32_Versym; 114*8d67ca89SAndroid Build Coastguard Worker typedef Elf64_Half Elf64_Versym; 115*8d67ca89SAndroid Build Coastguard Worker 116*8d67ca89SAndroid Build Coastguard Worker typedef struct { 117*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vd_version; 118*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vd_flags; 119*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vd_ndx; 120*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vd_cnt; 121*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vd_hash; 122*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vd_aux; 123*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vd_next; 124*8d67ca89SAndroid Build Coastguard Worker } Elf32_Verdef; 125*8d67ca89SAndroid Build Coastguard Worker 126*8d67ca89SAndroid Build Coastguard Worker typedef struct { 127*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vda_name; 128*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vda_next; 129*8d67ca89SAndroid Build Coastguard Worker } Elf32_Verdaux; 130*8d67ca89SAndroid Build Coastguard Worker 131*8d67ca89SAndroid Build Coastguard Worker typedef struct { 132*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vd_version; 133*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vd_flags; 134*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vd_ndx; 135*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vd_cnt; 136*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vd_hash; 137*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vd_aux; 138*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vd_next; 139*8d67ca89SAndroid Build Coastguard Worker } Elf64_Verdef; 140*8d67ca89SAndroid Build Coastguard Worker 141*8d67ca89SAndroid Build Coastguard Worker typedef struct { 142*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vda_name; 143*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vda_next; 144*8d67ca89SAndroid Build Coastguard Worker } Elf64_Verdaux; 145*8d67ca89SAndroid Build Coastguard Worker 146*8d67ca89SAndroid Build Coastguard Worker typedef struct { 147*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vn_version; 148*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vn_cnt; 149*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vn_file; 150*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vn_aux; 151*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vn_next; 152*8d67ca89SAndroid Build Coastguard Worker } Elf32_Verneed; 153*8d67ca89SAndroid Build Coastguard Worker 154*8d67ca89SAndroid Build Coastguard Worker typedef struct { 155*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vna_hash; 156*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vna_flags; 157*8d67ca89SAndroid Build Coastguard Worker Elf32_Half vna_other; 158*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vna_name; 159*8d67ca89SAndroid Build Coastguard Worker Elf32_Word vna_next; 160*8d67ca89SAndroid Build Coastguard Worker } Elf32_Vernaux; 161*8d67ca89SAndroid Build Coastguard Worker 162*8d67ca89SAndroid Build Coastguard Worker typedef struct { 163*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vn_version; 164*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vn_cnt; 165*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vn_file; 166*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vn_aux; 167*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vn_next; 168*8d67ca89SAndroid Build Coastguard Worker } Elf64_Verneed; 169*8d67ca89SAndroid Build Coastguard Worker 170*8d67ca89SAndroid Build Coastguard Worker typedef struct { 171*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vna_hash; 172*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vna_flags; 173*8d67ca89SAndroid Build Coastguard Worker Elf64_Half vna_other; 174*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vna_name; 175*8d67ca89SAndroid Build Coastguard Worker Elf64_Word vna_next; 176*8d67ca89SAndroid Build Coastguard Worker } Elf64_Vernaux; 177*8d67ca89SAndroid Build Coastguard Worker 178*8d67ca89SAndroid Build Coastguard Worker /* Relocation table entry for relative (in section of type SHT_RELR). */ 179*8d67ca89SAndroid Build Coastguard Worker typedef Elf32_Word Elf32_Relr; 180*8d67ca89SAndroid Build Coastguard Worker typedef Elf64_Xword Elf64_Relr; 181*8d67ca89SAndroid Build Coastguard Worker 182*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch5.dynamic.html */ 183*8d67ca89SAndroid Build Coastguard Worker 184*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NOW 0x00000001 /* Perform complete relocation processing. */ 185*8d67ca89SAndroid Build Coastguard Worker #define DF_1_GROUP 0x00000004 186*8d67ca89SAndroid Build Coastguard Worker #define DF_1_INITFIRST 0x00000020 187*8d67ca89SAndroid Build Coastguard Worker #define DF_1_DIRECT 0x00000100 188*8d67ca89SAndroid Build Coastguard Worker #define DF_1_TRANS 0x00000200 189*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NODUMP 0x00001000 /* Object cannot be dumped with dldump(3) */ 190*8d67ca89SAndroid Build Coastguard Worker #define DF_1_CONFALT 0x00002000 191*8d67ca89SAndroid Build Coastguard Worker #define DF_1_ENDFILTEE 0x00004000 192*8d67ca89SAndroid Build Coastguard Worker #define DF_1_DISPRELDNE 0x00008000 193*8d67ca89SAndroid Build Coastguard Worker #define DF_1_DISPRELPND 0x00010000 194*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NODIRECT 0x00020000 195*8d67ca89SAndroid Build Coastguard Worker #define DF_1_IGNMULDEF 0x00040000 /* Internal use */ 196*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NOKSYMS 0x00080000 /* Internal use */ 197*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NOHDR 0x00100000 /* Internal use */ 198*8d67ca89SAndroid Build Coastguard Worker #define DF_1_EDITED 0x00200000 199*8d67ca89SAndroid Build Coastguard Worker #define DF_1_NORELOC 0x00400000 /* Internal use */ 200*8d67ca89SAndroid Build Coastguard Worker #define DF_1_SYMINTPOSE 0x00800000 201*8d67ca89SAndroid Build Coastguard Worker #define DF_1_GLOBAUDIT 0x01000000 202*8d67ca89SAndroid Build Coastguard Worker #define DF_1_SINGLETON 0x02000000 203*8d67ca89SAndroid Build Coastguard Worker #define DF_1_STUB 0x04000000 204*8d67ca89SAndroid Build Coastguard Worker 205*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.reloc.html */ 206*8d67ca89SAndroid Build Coastguard Worker #define ELF32_R_INFO(sym, type) ((((Elf32_Word)sym) << 8) | ((type) & 0xff)) 207*8d67ca89SAndroid Build Coastguard Worker #define ELF64_R_INFO(sym, type) ((((Elf64_Xword)sym) << 32) | ((type) & 0xffffffff)) 208*8d67ca89SAndroid Build Coastguard Worker 209*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.symtab.html */ 210*8d67ca89SAndroid Build Coastguard Worker #define ELF_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) 211*8d67ca89SAndroid Build Coastguard Worker #define ELF32_ST_INFO(b,t) ELF_ST_INFO(b,t) 212*8d67ca89SAndroid Build Coastguard Worker #define ELF64_ST_INFO(b,t) ELF_ST_INFO(b,t) 213*8d67ca89SAndroid Build Coastguard Worker 214*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.sheader.html */ 215*8d67ca89SAndroid Build Coastguard Worker #define GRP_MASKOS 0x0ff00000 216*8d67ca89SAndroid Build Coastguard Worker #define GRP_MASKPROC 0xf0000000 217*8d67ca89SAndroid Build Coastguard Worker 218*8d67ca89SAndroid Build Coastguard Worker /* http://www.sco.com/developers/gabi/latest/ch4.sheader.html */ 219*8d67ca89SAndroid Build Coastguard Worker /* 220*8d67ca89SAndroid Build Coastguard Worker * Standard replacement for SHT_ANDROID_RELR. 221*8d67ca89SAndroid Build Coastguard Worker */ 222*8d67ca89SAndroid Build Coastguard Worker #define SHT_RELR 19 223*8d67ca89SAndroid Build Coastguard Worker #undef SHT_NUM 224*8d67ca89SAndroid Build Coastguard Worker #define SHT_NUM 20 225*8d67ca89SAndroid Build Coastguard Worker 226*8d67ca89SAndroid Build Coastguard Worker /* 227*8d67ca89SAndroid Build Coastguard Worker * Experimental support for SHT_RELR sections. For details, see proposal 228*8d67ca89SAndroid Build Coastguard Worker * at https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg. 229*8d67ca89SAndroid Build Coastguard Worker * 230*8d67ca89SAndroid Build Coastguard Worker * This was eventually replaced by SHT_RELR and DT_RELR (which are identical 231*8d67ca89SAndroid Build Coastguard Worker * other than their different constants), but those constants are only 232*8d67ca89SAndroid Build Coastguard Worker * supported by the OS in API levels >= 30. 233*8d67ca89SAndroid Build Coastguard Worker */ 234*8d67ca89SAndroid Build Coastguard Worker #define SHT_ANDROID_RELR 0x6fffff00 235*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELR 0x6fffe000 236*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELRSZ 0x6fffe001 237*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELRENT 0x6fffe003 238*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELRCOUNT 0x6fffe005 239*8d67ca89SAndroid Build Coastguard Worker 240*8d67ca89SAndroid Build Coastguard Worker /* 241*8d67ca89SAndroid Build Coastguard Worker * Android compressed REL/RELA sections. These were generated by the relocation 242*8d67ca89SAndroid Build Coastguard Worker * packer in old versions of Android, and can be generated directly by lld 243*8d67ca89SAndroid Build Coastguard Worker * with https://reviews.llvm.org/D39152. 244*8d67ca89SAndroid Build Coastguard Worker * 245*8d67ca89SAndroid Build Coastguard Worker * This was replaced by SHT_ANDROID_RELR in API level 28 (but is supported 246*8d67ca89SAndroid Build Coastguard Worker * in all API levels >= 23). 247*8d67ca89SAndroid Build Coastguard Worker */ 248*8d67ca89SAndroid Build Coastguard Worker #define SHT_ANDROID_REL 0x60000001 249*8d67ca89SAndroid Build Coastguard Worker #define SHT_ANDROID_RELA 0x60000002 250*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_REL 0x6000000f // DT_LOOS + 2 251*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELSZ 0x60000010 // DT_LOOS + 3 252*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELA 0x60000011 // DT_LOOS + 4 253*8d67ca89SAndroid Build Coastguard Worker #define DT_ANDROID_RELASZ 0x60000012 // DT_LOOS + 5 254*8d67ca89SAndroid Build Coastguard Worker 255*8d67ca89SAndroid Build Coastguard Worker /* arm64 psabi. */ 256*8d67ca89SAndroid Build Coastguard Worker 257*8d67ca89SAndroid Build Coastguard Worker /* TODO: upstreamed to FreeBSD as https://github.com/freebsd/freebsd-src/pull/1141/. */ 258*8d67ca89SAndroid Build Coastguard Worker #define DT_AARCH64_MEMTAG_MODE 0x70000009 259*8d67ca89SAndroid Build Coastguard Worker #define DT_AARCH64_MEMTAG_HEAP 0x7000000b 260*8d67ca89SAndroid Build Coastguard Worker #define DT_AARCH64_MEMTAG_STACK 0x7000000c 261*8d67ca89SAndroid Build Coastguard Worker #define DT_AARCH64_MEMTAG_GLOBALS 0x7000000d 262*8d67ca89SAndroid Build Coastguard Worker #define DT_AARCH64_MEMTAG_GLOBALSSZ 0x7000000f 263*8d67ca89SAndroid Build Coastguard Worker 264*8d67ca89SAndroid Build Coastguard Worker /* Linux traditionally doesn't have the trailing 64 that BSD has on these. */ 265*8d67ca89SAndroid Build Coastguard Worker #define R_AARCH64_TLS_DTPREL R_AARCH64_TLS_DTPREL64 266*8d67ca89SAndroid Build Coastguard Worker #define R_AARCH64_TLS_DTPMOD R_AARCH64_TLS_DTPMOD64 267*8d67ca89SAndroid Build Coastguard Worker #define R_AARCH64_TLS_TPREL R_AARCH64_TLS_TPREL64 268*8d67ca89SAndroid Build Coastguard Worker 269*8d67ca89SAndroid Build Coastguard Worker /* TODO: upstream these to FreeBSD? */ 270*8d67ca89SAndroid Build Coastguard Worker #define R_ARM_TLS_DESC 13 271*8d67ca89SAndroid Build Coastguard Worker #define R_ARM_IRELATIVE 160 272*8d67ca89SAndroid Build Coastguard Worker 273*8d67ca89SAndroid Build Coastguard Worker /* riscv64 psabi. */ 274*8d67ca89SAndroid Build Coastguard Worker 275*8d67ca89SAndroid Build Coastguard Worker /* 276*8d67ca89SAndroid Build Coastguard Worker * https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#relocations 277*8d67ca89SAndroid Build Coastguard Worker * Missing from FreeBSD and the Linux uapi headers. 278*8d67ca89SAndroid Build Coastguard Worker * TODO: upstreamed to FreeBSD as https://github.com/freebsd/freebsd-src/pull/1141. 279*8d67ca89SAndroid Build Coastguard Worker */ 280*8d67ca89SAndroid Build Coastguard Worker #define R_RISCV_TLSDESC 12 281*8d67ca89SAndroid Build Coastguard Worker #define R_RISCV_TLSDESC_HI20 62 282*8d67ca89SAndroid Build Coastguard Worker #define R_RISCV_TLSDESC_LOAD_LO12 63 283*8d67ca89SAndroid Build Coastguard Worker #define R_RISCV_TLSDESC_ADD_LO12 64 284*8d67ca89SAndroid Build Coastguard Worker #define R_RISCV_TLSDESC_CALL 65 285*8d67ca89SAndroid Build Coastguard Worker 286*8d67ca89SAndroid Build Coastguard Worker /* https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#program-header-table */ 287*8d67ca89SAndroid Build Coastguard Worker #define PT_RISCV_ATTRIBUTES 0x70000003 288*8d67ca89SAndroid Build Coastguard Worker 289*8d67ca89SAndroid Build Coastguard Worker /* https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#section-types */ 290*8d67ca89SAndroid Build Coastguard Worker #define SHT_RISCV_ATTRIBUTES 0x70000003 291*8d67ca89SAndroid Build Coastguard Worker 292*8d67ca89SAndroid Build Coastguard Worker /* FreeBSD spells this slightly differently to Linux. Linux is correct according to 293*8d67ca89SAndroid Build Coastguard Worker * https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#file-header 294*8d67ca89SAndroid Build Coastguard Worker * so I've sent https://github.com/freebsd/freebsd-src/pull/1148 upstream. 295*8d67ca89SAndroid Build Coastguard Worker */ 296*8d67ca89SAndroid Build Coastguard Worker #define EF_RISCV_FLOAT_ABI EF_RISCV_FLOAT_ABI_MASK 297*8d67ca89SAndroid Build Coastguard Worker 298*8d67ca89SAndroid Build Coastguard Worker /* FreeBSD spells this slightly differently to Linux. */ 299*8d67ca89SAndroid Build Coastguard Worker #define R_X86_64_JUMP_SLOT R_X86_64_JMP_SLOT 300