version 1.4, 1997/01/15 23:42:46 |
version 1.5, 2001/07/12 05:17:01 |
|
|
#define word(x,y)((y == ELFDATA2LSB) ? ntohl(htonl(x)) : ntohl(x)) |
#define word(x,y)((y == ELFDATA2LSB) ? ntohl(htonl(x)) : ntohl(x)) |
#define half(x,y)((y == ELFDATA2LSB) ? ntohs(htons(x)) : ntohs(x)) |
#define half(x,y)((y == ELFDATA2LSB) ? ntohs(htons(x)) : ntohs(x)) |
|
|
|
void usage(void); |
|
void pwarn(char *, char *, int); |
|
|
int |
int |
main(int argc, char*argv[]) |
main(int argc, char*argv[]) |
{ |
{ |
|
|
Elf32_Shdr shdr; |
Elf32_Shdr shdr; |
int e; |
int e; |
|
|
if (progname = strrchr(*argv, '/')) |
if ((progname = strrchr(*argv, '/'))) |
++progname; |
++progname; |
else |
else |
progname = *argv; |
progname = *argv; |
|
|
else if (word(shdr.sh_type, e) == SHT_DYNAMIC) |
else if (word(shdr.sh_type, e) == SHT_DYNAMIC) |
ehdr.e_ident[OI_DYNAMIC] = ODYNAMIC; |
ehdr.e_ident[OI_DYNAMIC] = ODYNAMIC; |
} else |
} else |
warn(progname, *argv, errno); |
pwarn(progname, *argv, errno); |
} /* while less than number of section headers */ |
} /* while less than number of section headers */ |
|
|
/* We're ready to modify */ |
/* We're ready to modify */ |
okay = 1; |
okay = 1; |
|
|
} else /* Bogus section header table seek */ |
} else /* Bogus section header table seek */ |
warn(progname, *argv, errno); |
pwarn(progname, *argv, errno); |
|
|
} else { /* olf2elf */ |
} else { /* olf2elf */ |
ehdr.e_ident[EI_MAG0] = ELFMAG0; |
ehdr.e_ident[EI_MAG0] = ELFMAG0; |
|
|
okay = 1; |
okay = 1; |
} /* olf2elf */ |
} /* olf2elf */ |
} else /* Bogus non-ELF file encountered */ |
} else /* Bogus non-ELF file encountered */ |
warn(progname, *argv, ENOEXEC); |
pwarn(progname, *argv, ENOEXEC); |
|
|
/* |
/* |
* Do It. |
* Do It. |
|
|
printf("OLF %s => ELF.\n", *argv); |
printf("OLF %s => ELF.\n", *argv); |
} |
} |
} else /* bad write */ |
} else /* bad write */ |
warn(progname, *argv, errno); |
pwarn(progname, *argv, errno); |
} else /* bad seek */ |
} else /* bad seek */ |
warn(progname, *argv, errno); |
pwarn(progname, *argv, errno); |
} /* okay? */ |
} /* okay? */ |
fsync(fd); |
fsync(fd); |
close(fd); |
close(fd); |
|
|
} else /* couldn't handle file */ |
} else /* couldn't handle file */ |
warn(progname, *argv, errno); |
pwarn(progname, *argv, errno); |
} while (*(++argv) != NULL); |
} while (*(++argv) != NULL); |
|
|
|
|
return (retval); |
return (retval); |
} |
} |
|
|
warn(name, fname, errval) |
void |
|
pwarn(name, fname, errval) |
char *name; |
char *name; |
char *fname; |
char *fname; |
int errval; |
int errval; |
|
|
retval = 1; |
retval = 1; |
} |
} |
|
|
|
void |
usage() |
usage() |
{ |
{ |
register int i; |
register int i; |