15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Macros to enable writing native and generic ELF access code. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 2003 Red Hat, Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This file is part of Red Hat elfutils. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Written by Ulrich Drepper <drepper@redhat.com>, 2003. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Red Hat elfutils is free software; you can redistribute it and/or modify 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it under the terms of the GNU General Public License as published by the 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Free Software Foundation; version 2 of the License. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Red Hat elfutils is distributed in the hope that it will be useful, but 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WITHOUT ANY WARRANTY; without even the implied warranty of 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) General Public License for more details. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) You should have received a copy of the GNU General Public License along 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) with Red Hat elfutils; if not, write to the Free Software Foundation, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Red Hat elfutils is an included package of the Open Invention Network. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) An included package of the Open Invention Network is a package for which 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Open Invention Network licensees cross-license their patents. No patent 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) license is granted, either expressly or impliedly, by designation as an 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) included package. Should you wish to participate in the Open Invention 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Network licensing program, please visit www.openinventionnetwork.com 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) <http://www.openinventionnetwork.com>. */ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef HAVE_CONFIG_H 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <config.h> 299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <libebl.h> 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* By default the linker is handling all architectures. But it can 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) be configured to be a native-only linker. */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if NATIVE_ELF == 32 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 32-bit only. */ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Ehdr Elf32_Ehdr 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# define XElf_Shdr Elf32_Shdr 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Off Elf32_Off 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Addr Elf32_Addr 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Half Elf32_Half 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Word Elf32_Word 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Xword Elf32_Word 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sxword Elf32_Sword 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Versym Elf32_Versym 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym Elf32_Sym 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rel Elf32_Rel 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rela Elf32_Rela 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Ehdr_vardef(name) Elf32_Ehdr *name 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr(elf, name) name = elf32_getehdr (elf) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr_copy(elf, name, copy) \ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (copy) = *(name = elf32_getehdr (elf)) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_newehdr(elf, klass) elf32_newehdr (elf) 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch# define xelf_update_ehdr(elf, ehdr) \ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (elf), (void) (ehdr), 1) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getclass(elf) ELFCLASS32 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Phdr_vardef(name) Elf32_Phdr *name 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# define xelf_newphdr(elf, n) elf32_newphdr (elf, n) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr(elf, idx, name) name = elf32_getphdr (elf) + idx 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr_ptr(elf, idx, name) name = elf32_getphdr (elf) + idx 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_phdr(elf, idx, phdr) \ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (elf), (void) (idx), (void) (phdr), 1) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Shdr_vardef(name) Elf32_Shdr *name 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getshdr(scn, name) name = elf32_getshdr (scn) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getshdr_copy(scn, name, copy) \ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (copy) = *(name = elf32_getshdr (scn)) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_shdr(scn, shdr) \ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (scn), (void) (shdr), 1) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym_vardef(name) Elf32_Sym *name 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# define xelf_getsym(data, idx, name) \ 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch name = &((Elf32_Sym *) (data)->d_buf)[idx] 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# define xelf_getsym_ptr(data, idx, name) \ 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Sym *) (data)->d_buf)[idx] 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \ 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (name1 = &((Elf32_Sym *) ((data)->d_buf))[idx]); \ 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name2 = (unlikely ((ndxdata) != NULL) \ 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ? ((Elf32_Word *) ((ndxdata)->d_buf))[idx] : 0) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_update_sym(data, idx, sym) \ 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (sym), 1) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \ 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (datachanged) \ 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ((Elf32_Sym *) ((data)->d_buf))[idx] = *name1; \ 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (unlikely (ndxdata != NULL)) \ 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ((Elf32_Word *) ((ndxdata)->d_buf))[idx] = name2 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)# define XElf_Versym_vardef(name) Elf32_Versym name 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getversym_copy(data, idx, name) \ 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (name = ((Elf32_Versym *) ((data)->d_buf))[idx], &name) 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Dyn_vardef(name) Elf32_Dyn *name 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getdyn(data, idx, name) \ 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Dyn *) ((data)->d_buf))[idx] 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getdyn_ptr(data, idx, name) \ 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Dyn *) ((data)->d_buf))[idx] 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_update_dyn(data, idx, name) \ 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Rel_vardef(name) Elf32_Rel *name 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getrel(data, idx, name) \ 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Rel *) ((data)->d_buf))[idx] 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getrel_ptr(data, idx, name) \ 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Rel *) ((data)->d_buf))[idx] 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_update_rel(data, idx, name) \ 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Rela_vardef(name) Elf32_Rela *name 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getrela(data, idx, name) \ 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Rela *) ((data)->d_buf))[idx] 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getrela_ptr(data, idx, name) \ 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = &((Elf32_Rela *) ((data)->d_buf))[idx] 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_update_rela(data, idx, name) \ 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Verdef_vardef(name) Elf32_Verdef *name 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define xelf_getverdef(data, offset, name) \ 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name = ((Elf32_Verdef *) ((char *) ((data)->d_buf) + (offset))) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define XElf_Verdaux_vardef(name) Elf32_Verdaux *name 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getverdaux(data, offset, name) \ 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = ((Elf32_Verdaux *) ((char *) ((data)->d_buf) + (offset))) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_TYPE(info) ELF32_ST_TYPE (info) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_BIND(info) ELF32_ST_BIND (info) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_INFO(bind, type) ELF32_ST_INFO (bind, type) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_VISIBILITY(info) ELF32_ST_VISIBILITY (info) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_SYM(info) ELF32_R_SYM (info) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_TYPE(info) ELF32_R_TYPE (info) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_INFO(sym, type) ELF32_R_INFO (sym, type) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_fsize(elf, type, cnt) \ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (__builtin_constant_p (type) \ 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ? ({ size_t fsize; \ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) \ 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { \ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_BYTE: fsize = 1; break; \ 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_ADDR: fsize = sizeof (Elf32_Addr); break; \ 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_DYN: fsize = sizeof (Elf32_Dyn); break; \ 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_EHDR: fsize = sizeof (Elf32_Ehdr); break; \ 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_HALF: fsize = sizeof (Elf32_Half); break; \ 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_OFF: fsize = sizeof (Elf32_Off); break; \ 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_PHDR: fsize = sizeof (Elf32_Phdr); break; \ 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_RELA: fsize = sizeof (Elf32_Rela); break; \ 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_REL: fsize = sizeof (Elf32_Rel); break; \ 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SHDR: fsize = sizeof (Elf32_Shdr); break; \ 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SWORD: fsize = sizeof (Elf32_Sword); break; \ 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SYM: fsize = sizeof (Elf32_Sym); break; \ 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ELF_T_WORD: fsize = sizeof (Elf32_Word); break; \ 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_XWORD: fsize = sizeof (Elf32_Xword); break; \ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SXWORD: fsize = sizeof (Elf32_Sxword); break; \ 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VDEF: fsize = sizeof (Elf32_Verdef); break; \ 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ELF_T_VDAUX: fsize = sizeof (Elf32_Verdaux); break; \ 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VNEED: fsize = sizeof (Elf32_Verneed); break; \ 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VNAUX: fsize = sizeof (Elf32_Vernaux); break; \ 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_NHDR: fsize = sizeof (Elf32_Nhdr); break; \ 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SYMINFO: fsize = sizeof (Elf32_Syminfo); break; \ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_MOVE: fsize = sizeof (Elf32_Move); break; \ 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: fsize = 0; break; \ 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fsize * (cnt); }) \ 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : gelf_fsize (elf, type, cnt, EV_CURRENT)) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif NATIVE_ELF == 64 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 64-bit only. */ 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Ehdr Elf64_Ehdr 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Shdr Elf64_Shdr 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Addr Elf64_Addr 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Half Elf64_Half 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Off Elf64_Off 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Word Elf64_Word 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Xword Elf64_Xword 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sxword Elf64_Sxword 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Versym Elf64_Versym 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym Elf64_Sym 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rel Elf64_Rel 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rela Elf64_Rela 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Ehdr_vardef(name) Elf64_Ehdr *name 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr(elf, name) name = elf64_getehdr (elf) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr_copy(elf, name, copy) \ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (copy) = *(name = elf64_getehdr (elf)) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_newehdr(elf, klass) elf64_newehdr (elf) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_ehdr(elf, ehdr) \ 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (elf), (void) (ehdr), 1) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getclass(elf) ELFCLASS32 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Phdr_vardef(name) Elf64_Phdr *name 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_newphdr(elf, n) elf64_newphdr (elf, n) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr(elf, idx, name) name = elf64_getphdr (elf) + idx 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr_ptr(elf, idx, name) name = elf64_getphdr (elf) + idx 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_phdr(elf, idx, phdr) \ 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (elf), (void) (idx), (void) (phdr), 1) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Shdr_vardef(name) Elf64_Shdr *name 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getshdr(scn, name) name = elf64_getshdr (scn) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# define xelf_getshdr_copy(scn, name, copy) \ 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (copy) = *(name = elf64_getshdr (scn)) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_shdr(scn, shdr) \ 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (scn), (void) (shdr), 1) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym_vardef(name) Elf64_Sym *name 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# define xelf_getsym(data, idx, name) \ 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Sym *) (data)->d_buf)[idx] 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getsym_ptr(data, idx, name) \ 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Sym *) (data)->d_buf)[idx] 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \ 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (name1 = &((Elf64_Sym *) ((data)->d_buf))[idx]); \ 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name2 = (unlikely ((ndxdata) != NULL) \ 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ? ((Elf32_Word *) ((ndxdata)->d_buf))[idx] : 0) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# define xelf_update_sym(data, idx, sym) \ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (sym), 1) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (datachanged) \ 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ((Elf64_Sym *) ((data)->d_buf))[idx] = *name1; \ 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ndxdata != NULL) \ 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (((Elf32_Word *) ((ndxdata)->d_buf))[idx] = name2) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Versym_vardef(name) Elf64_Versym name 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getversym_copy(data, idx, name) \ 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (name = ((Elf64_Versym *) ((data)->d_buf))[idx], (&name)) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Dyn_vardef(name) Elf64_Dyn *name 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getdyn(data, idx, name) \ 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Dyn *) ((data)->d_buf))[idx] 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getdyn_ptr(data, idx, name) \ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Dyn *) ((data)->d_buf))[idx] 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_dyn(data, idx, name) \ 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rel_vardef(name) Elf64_Rel *name 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrel(data, idx, name) \ 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Rel *) ((data)->d_buf))[idx] 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrel_ptr(data, idx, name) \ 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Rel *) ((data)->d_buf))[idx] 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_rel(data, idx, name) \ 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rela_vardef(name) Elf64_Rela *name 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrela(data, idx, name) \ 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Rela *) ((data)->d_buf))[idx] 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrela_ptr(data, idx, name) \ 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &((Elf64_Rela *) ((data)->d_buf))[idx] 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# define xelf_update_rela(data, idx, name) \ 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* nothing */ ((void) (data), (void) (idx), (void) (name), 1) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Verdef_vardef(name) Elf64_Verdef *name 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getverdef(data, offset, name) \ 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = ((Elf64_Verdef *) ((char *) ((data)->d_buf) + (offset))) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 256b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# define XElf_Verdaux_vardef(name) Elf64_Verdaux *name 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getverdaux(data, offset, name) \ 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = ((Elf64_Verdaux *) ((char *) ((data)->d_buf) + (offset))) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_TYPE(info) ELF64_ST_TYPE (info) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_BIND(info) ELF64_ST_BIND (info) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_INFO(bind, type) ELF64_ST_INFO (bind, type) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_VISIBILITY(info) ELF64_ST_VISIBILITY (info) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_SYM(info) ELF64_R_SYM (info) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_TYPE(info) ELF64_R_TYPE (info) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_INFO(sym, type) ELF64_R_INFO (sym, type) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_fsize(elf, type, cnt) \ 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (__builtin_constant_p (type) \ 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ? ({ size_t fsize; \ 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) \ 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { \ 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_BYTE: fsize = 1; break; \ 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_ADDR: fsize = sizeof (Elf64_Addr); break; \ 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_DYN: fsize = sizeof (Elf64_Dyn); break; \ 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_EHDR: fsize = sizeof (Elf64_Ehdr); break; \ 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_HALF: fsize = sizeof (Elf64_Half); break; \ 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_OFF: fsize = sizeof (Elf64_Off); break; \ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_PHDR: fsize = sizeof (Elf64_Phdr); break; \ 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_RELA: fsize = sizeof (Elf64_Rela); break; \ 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_REL: fsize = sizeof (Elf64_Rel); break; \ 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SHDR: fsize = sizeof (Elf64_Shdr); break; \ 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SWORD: fsize = sizeof (Elf64_Sword); break; \ 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SYM: fsize = sizeof (Elf64_Sym); break; \ 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_WORD: fsize = sizeof (Elf64_Word); break; \ 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_XWORD: fsize = sizeof (Elf64_Xword); break; \ 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SXWORD: fsize = sizeof (Elf64_Sxword); break; \ 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VDEF: fsize = sizeof (Elf64_Verdef); break; \ 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VDAUX: fsize = sizeof (Elf64_Verdaux); break; \ 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VNEED: fsize = sizeof (Elf64_Verneed); break; \ 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_VNAUX: fsize = sizeof (Elf64_Vernaux); break; \ 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_NHDR: fsize = sizeof (Elf64_Nhdr); break; \ 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_SYMINFO: fsize = sizeof (Elf64_Syminfo); break; \ 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ELF_T_MOVE: fsize = sizeof (Elf64_Move); break; \ 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: fsize = 0; break; \ 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fsize * (cnt); }) \ 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : gelf_fsize (elf, type, cnt, EV_CURRENT)) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <gelf.h> 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Generic linker. */ 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Ehdr GElf_Ehdr 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Shdr GElf_Shdr 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Addr GElf_Addr 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Half GElf_Half 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Off GElf_Off 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Word GElf_Word 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Xword GElf_Xword 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sxword GElf_Sxword 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Versym GElf_Versym 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym GElf_Sym 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rel GElf_Rel 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rela GElf_Rela 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Ehdr_vardef(name) GElf_Ehdr name##_mem; GElf_Ehdr *name 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr(elf, name) name = gelf_getehdr (elf, &name##_mem) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getehdr_copy(elf, name, copy) \ 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getehdr (elf, &(copy)) 321b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# define xelf_newehdr(elf, klass) gelf_newehdr (elf, klass) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_ehdr(elf, ehdr) gelf_update_ehdr (elf, ehdr) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getclass(elf) gelf_getclass (elf) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Phdr_vardef(name) GElf_Phdr name##_mem; GElf_Phdr *name 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_newphdr(elf, n) gelf_newphdr (elf, n) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr(elf, idx, name) \ 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getphdr (elf, idx, &name##_mem) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getphdr_ptr(elf, idx, name) \ 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &name##_mem 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_phdr(elf, idx, phdr) \ 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_update_phdr (elf, idx, phdr) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Shdr_vardef(name) GElf_Shdr name##_mem; GElf_Shdr *name 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getshdr(scn, name) name = gelf_getshdr (scn, &name##_mem) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getshdr_copy(scn, name, copy) \ 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getshdr (scn, &(copy)) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_shdr(scn, shdr) gelf_update_shdr (scn, shdr) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Sym_vardef(name) GElf_Sym name##_mem; GElf_Sym *name 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getsym(data, idx, name) \ 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getsym (data, idx, &name##_mem) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getsym_ptr(data, idx, name) \ 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &name##_mem 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \ 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name1 = gelf_getsymshndx (data, ndxdata, idx, &name1##_mem, &(name2)) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_sym(data, idx, sym) gelf_update_sym (data, idx, sym) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \ 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_update_symshndx (data, ndxdata, idx, name1, name2) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Versym_vardef(name) GElf_Versym name 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getversym_copy(data, idx, name) \ 354b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) gelf_getversym (data, idx, &name) 355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 356b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# define XElf_Dyn_vardef(name) GElf_Dyn name##_mem; GElf_Dyn *name 357b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# define xelf_getdyn(data, idx, name) \ 358b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) name = gelf_getdyn (data, idx, &name##_mem) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getdyn_ptr(data, idx, name) \ 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &name##_mem 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_dyn(data, idx, name) \ 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_update_dyn (data, idx, name) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rel_vardef(name) GElf_Rel name##_mem; GElf_Rel *name 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrel(data, idx, name) \ 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getrel (data, idx, &name##_mem) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrel_ptr(data, idx, name) \ 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &name##_mem 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_rel(data, idx, name) \ 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_update_rel (data, idx, name) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Rela_vardef(name) GElf_Rela name##_mem; GElf_Rela *name 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrela(data, idx, name) \ 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getrela (data, idx, &name##_mem) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getrela_ptr(data, idx, name) \ 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = &name##_mem 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_update_rela(data, idx, name) \ 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_update_rela (data, idx, name) 379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Verdef_vardef(name) GElf_Verdef name##_mem; GElf_Verdef *name 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getverdef(data, offset, name) \ 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getverdef (data, offset, &name##_mem) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XElf_Verdaux_vardef(name) GElf_Verdaux name##_mem; GElf_Verdaux *name 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_getverdaux(data, offset, name) \ 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = gelf_getverdaux (data, offset, &name##_mem) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_TYPE(info) GELF_ST_TYPE (info) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_BIND(info) GELF_ST_BIND (info) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_INFO(bind, type) GELF_ST_INFO (bind, type) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_ST_VISIBILITY(info) GELF_ST_VISIBILITY (info) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_SYM(info) GELF_R_SYM (info) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_TYPE(info) GELF_R_TYPE (info) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define XELF_R_INFO(sym, type) GELF_R_INFO (sym, type) 396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define xelf_fsize(elf, type, cnt) \ 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gelf_fsize (elf, type, cnt, EV_CURRENT) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)