00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <private.h>
00025
00026 #ifndef lint
00027 static const char rcsid[] = "@(#) $Id: flag.c,v 1.1.1.1 2005/10/21 19:00:00 marcel Exp $";
00028 #endif
00029
00030 static unsigned
00031 _elf_flag(unsigned *f, Elf_Cmd cmd, unsigned flags) {
00032 if (cmd == ELF_C_SET) {
00033 return *f |= flags;
00034 }
00035 if (cmd == ELF_C_CLR) {
00036 return *f &= ~flags;
00037 }
00038 seterr(ERROR_INVALID_CMD);
00039 return 0;
00040 }
00041
00042 unsigned
00043 elf_flagdata(Elf_Data *data, Elf_Cmd cmd, unsigned flags) {
00044 Scn_Data *sd = (Scn_Data*)data;
00045
00046 if (!sd) {
00047 return 0;
00048 }
00049 elf_assert(sd->sd_magic == DATA_MAGIC);
00050 return _elf_flag(&sd->sd_data_flags, cmd, flags);
00051 }
00052
00053 unsigned
00054 elf_flagehdr(Elf *elf, Elf_Cmd cmd, unsigned flags) {
00055 if (!elf) {
00056 return 0;
00057 }
00058 elf_assert(elf->e_magic == ELF_MAGIC);
00059 return _elf_flag(&elf->e_ehdr_flags, cmd, flags);
00060 }
00061
00062 unsigned
00063 elf_flagelf(Elf *elf, Elf_Cmd cmd, unsigned flags) {
00064 if (!elf) {
00065 return 0;
00066 }
00067 elf_assert(elf->e_magic == ELF_MAGIC);
00068 return _elf_flag(&elf->e_elf_flags, cmd, flags);
00069 }
00070
00071 unsigned
00072 elf_flagphdr(Elf *elf, Elf_Cmd cmd, unsigned flags) {
00073 if (!elf) {
00074 return 0;
00075 }
00076 elf_assert(elf->e_magic == ELF_MAGIC);
00077 return _elf_flag(&elf->e_phdr_flags, cmd, flags);
00078 }
00079
00080 unsigned
00081 elf_flagscn(Elf_Scn *scn, Elf_Cmd cmd, unsigned flags) {
00082 if (!scn) {
00083 return 0;
00084 }
00085 elf_assert(scn->s_magic == SCN_MAGIC);
00086 return _elf_flag(&scn->s_scn_flags, cmd, flags);
00087 }
00088
00089 unsigned
00090 elf_flagshdr(Elf_Scn *scn, Elf_Cmd cmd, unsigned flags) {
00091 if (!scn) {
00092 return 0;
00093 }
00094 elf_assert(scn->s_magic == SCN_MAGIC);
00095 return _elf_flag(&scn->s_shdr_flags, cmd, flags);
00096 }