summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>1999-12-17 15:27:21 +0000
committermarcel <marcel@FreeBSD.org>1999-12-17 15:27:21 +0000
commitc926be6ea7337529b70771aa567e9d10a6238901 (patch)
treed406a0d79d376737cd247f2da59cbb46f14e7183 /usr.sbin
parent37b2004d094765ca1230841e342a5b2c1c969eb8 (diff)
downloadFreeBSD-src-c926be6ea7337529b70771aa567e9d10a6238901.zip
FreeBSD-src-c926be6ea7337529b70771aa567e9d10a6238901.tar.gz
o Don't use long for 64 bit variables. Use u_int64_t instead.
o Fix printf format specifiers on Alpha and add i386 version. o Minor style fixes while there. o Add -Wall compiler option.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/elf2exe/Makefile2
-rw-r--r--usr.sbin/elf2exe/elf2exe.c107
2 files changed, 62 insertions, 47 deletions
diff --git a/usr.sbin/elf2exe/Makefile b/usr.sbin/elf2exe/Makefile
index d8ce6a1..aaf16c2 100644
--- a/usr.sbin/elf2exe/Makefile
+++ b/usr.sbin/elf2exe/Makefile
@@ -3,7 +3,7 @@
PROG= elf2exe
SRCS= elf2exe.c
MAN8= elf2exe.8
-
+CFLAGS+= -Wall
MANSUBDIR=/${MACHINE_ARCH}
.include <bsd.prog.mk>
diff --git a/usr.sbin/elf2exe/elf2exe.c b/usr.sbin/elf2exe/elf2exe.c
index d874b27..3689af8 100644
--- a/usr.sbin/elf2exe/elf2exe.c
+++ b/usr.sbin/elf2exe/elf2exe.c
@@ -36,11 +36,12 @@ static const char rcsid[] =
#include <sys/types.h>
#include <sys/elf64.h>
#include <err.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
-#include <fcntl.h>
#define ALPHA_FMAGIC 0x184
@@ -99,6 +100,7 @@ int
open_elffile(char *filename)
{
int fileno = open(filename, O_RDONLY);
+
if (fileno < 0)
err(1, filename);
return (fileno);
@@ -109,7 +111,8 @@ Elf64_Ehdr *
load_ehdr(int fileno)
{
Elf64_Ehdr *ehdr;
- int bytes = sizeof(*ehdr);
+ size_t bytes = sizeof(*ehdr);
+
ehdr = malloc(bytes);
if (ehdr) {
lseek(fileno, 0, SEEK_SET);
@@ -122,8 +125,9 @@ load_ehdr(int fileno)
Elf64_Phdr *
load_phdr(int fileno, Elf64_Ehdr *ehdr)
{
- int bytes = ehdr->e_phentsize * ehdr->e_phnum;
+ size_t bytes = ehdr->e_phentsize * ehdr->e_phnum;
Elf64_Phdr *phdr = malloc(bytes);
+
if (phdr) {
lseek(fileno, ehdr->e_phoff, SEEK_SET);
if (read(fileno, phdr, bytes) != bytes)
@@ -135,9 +139,9 @@ load_phdr(int fileno, Elf64_Ehdr *ehdr)
Elf64_Shdr *
load_shdr(int fileno, Elf64_Ehdr *ehdr)
{
- int bytes = ehdr->e_shentsize * ehdr->e_shnum;
-
+ size_t bytes = ehdr->e_shentsize * ehdr->e_shnum;
Elf64_Shdr *shdr = malloc(bytes);
+
if (shdr) {
lseek(fileno, ehdr->e_shoff, SEEK_SET);
if (read(fileno, shdr, bytes) != bytes)
@@ -149,32 +153,35 @@ load_shdr(int fileno, Elf64_Ehdr *ehdr)
char *
find_shstrtable(int fileno, int sections, Elf64_Shdr *shdr)
{
+ size_t bytes;
char *shstrtab = NULL;
- int i;
- int shstrtabindex;
+ int i, shstrtabindex;
+
for (i = 0; shstrtab == NULL && i < sections; i++) {
if (shdr[i].sh_type == 3 && shdr[i].sh_flags == 0) {
shstrtabindex = i;
- shstrtab = malloc(shdr[shstrtabindex].sh_size);
+ bytes = shdr[shstrtabindex].sh_size;
+ shstrtab = malloc(bytes);
if (shstrtab == NULL)
errx(1, "malloc failed");
lseek(fileno, shdr[shstrtabindex].sh_offset, SEEK_SET);
- read(fileno, shstrtab, shdr[shstrtabindex].sh_size);
-
+ read(fileno, shstrtab, bytes);
+
if (strcmp (shstrtab + shdr[i].sh_name, ".shstrtab")) {
free(shstrtab);
shstrtab = NULL;
}
}
}
- return shstrtab;
+ return (shstrtab);
}
int
open_exefile(char *filename)
{
int fileno = open(filename, O_RDWR | O_TRUNC | O_CREAT, 0666);
+
if (fileno < 0)
err(1, filename);
return (fileno);
@@ -192,60 +199,60 @@ section_name(Elf64_Shdr *shdr, int i)
return (shstrtab + shdr[i].sh_name);
}
-long
+int
section_index(Elf64_Shdr *shdr, int sections, char *name)
{
int i;
-
+
for (i = 0; i < sections; i++)
if (strcmp (name, section_name(shdr, i)) == 0)
return (i);
-
- return -1;
+ return (-1);
}
/* first byte of section */
-long
+u_int64_t
section_start(Elf64_Shdr *shdr, int sections, char *name)
{
int i = section_index(shdr, sections, name);
- if (i < 0)
- return -1;
- return shdr[i].sh_addr;
+ if (i < 0)
+ return (-1);
+ return (shdr[i].sh_addr);
}
/* last byte of section */
-long
+u_int64_t
section_end(Elf64_Shdr *shdr, int sections, char *name)
{
int i = section_index(shdr, sections, name);
- if (i < 0)
- return -1;
- return shdr[i].sh_addr + shdr[i].sh_size -1;
+ if (i < 0)
+ return (-1);
+ return (shdr[i].sh_addr + shdr[i].sh_size -1);
}
/* last byte of section */
-long
+u_int64_t
section_size(Elf64_Shdr *shdr, int sections, char *name)
{
int i = section_index(shdr, sections, name);
+
if (i < 0)
- return -1;
+ return (-1);
- return shdr[i].sh_size;
+ return (shdr[i].sh_size);
}
/* file position of section start */
-long
+u_int64_t
section_fpos(Elf64_Shdr *shdr, int sections, char *name)
{
int i = section_index(shdr, sections, name);
- if (i < 0)
- return -1;
- return shdr[i].sh_offset;
+ if (i < 0)
+ return (-1);
+ return (shdr[i].sh_offset);
}
void
@@ -262,14 +269,13 @@ main(int argc, char** argv)
Elf64_Ehdr *ehdr;
Elf64_Phdr *phdr;
Elf64_Shdr *shdr;
- int shstrtabindex;
FILHDR filehdr;
AOUTHDR aouthdr;
SCNHDR textscn, datascn;
- long textstart, textsize, textsize2, textfsize, textfpos;
- long datastart, datasize, datafsize, datafpos;
- long bssstart, bsssize;
- long progentry;
+ u_int64_t textstart, textsize, textsize2, textfsize, textfpos;
+ u_int64_t datastart, datasize, datafsize, datafpos;
+ u_int64_t bssstart, bsssize;
+ u_int64_t progentry;
char* p;
int sections;
@@ -293,11 +299,16 @@ main(int argc, char** argv)
for (i = 1; i < sections; i++) {
printf("section %d (%s): "
- "type=%x flags=0%x "
- "offs=%x size=%x addr=%x\n",
- i, shstrtab + shdr[i].sh_name,
- shdr[i].sh_type, shdr[i].sh_flags,
- shdr[i].sh_offset, shdr[i].sh_size, shdr[i].sh_addr);
+#if defined(__alpha__)
+ "type=%x flags=0%lx "
+ "offs=%lx size=%lx addr=%lx\n",
+#else
+ "type=%x flags=0%llx "
+ "offs=%llx size=%llx addr=%llx\n",
+#endif
+ i, shstrtab + shdr[i].sh_name,
+ shdr[i].sh_type, shdr[i].sh_flags,
+ shdr[i].sh_offset, shdr[i].sh_size, shdr[i].sh_addr);
}
textstart = section_start(shdr, sections, ".text");
@@ -316,10 +327,15 @@ main(int argc, char** argv)
bssstart = section_start(shdr, sections, ".bss");
bsssize = section_size(shdr, sections, ".bss");
- printf ("text: %x(%x) @%x data: %x(%x) @%x bss: %x(%x)\n",
- textstart, textsize, textfpos,
- datastart, datasize, datafpos,
- bssstart, bsssize);
+#if defined(__alpha__)
+ printf ("text: %lx(%lx) @%lx data: %lx(%lx) @%lx bss: %lx(%lx)\n",
+#else
+ printf("text: %llx(%llx) @%llx data: %llx(%llx) @%llx "
+ "bss: %llx(%llx)\n",
+#endif
+ textstart, textsize, textfpos,
+ datastart, datasize, datafpos,
+ bssstart, bsssize);
memset(&filehdr, 0, sizeof filehdr);
memset(&aouthdr, 0, sizeof aouthdr);
@@ -391,6 +407,5 @@ main(int argc, char** argv)
write(outfd, p, ROUNDUP(datasize, 512));
free(p);
- return 0;
+ return (0);
}
-
OpenPOWER on IntegriCloud