Replace unchecked fwrite() calls
Instead of having unchecked fwrite() calls, introduce nasm_write() which does error checking (and fatal errors if the write fails). Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
505de5dc57
commit
e76a626055
13 changed files with 63 additions and 64 deletions
40
nasmlib.c
40
nasmlib.c
|
@ -1,6 +1,6 @@
|
||||||
/* ----------------------------------------------------------------------- *
|
/* ----------------------------------------------------------------------- *
|
||||||
*
|
*
|
||||||
* Copyright 1996-2013 The NASM Authors - All Rights Reserved
|
* Copyright 1996-2014 The NASM Authors - All Rights Reserved
|
||||||
* See the file AUTHORS included with the NASM distribution for
|
* See the file AUTHORS included with the NASM distribution for
|
||||||
* the specific copyright holders.
|
* the specific copyright holders.
|
||||||
*
|
*
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "nasm.h"
|
#include "nasm.h"
|
||||||
|
@ -143,6 +144,13 @@ no_return nasm_assert_failed(const char *file, int line, const char *msg)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nasm_write(const void *ptr, size_t size, FILE *f)
|
||||||
|
{
|
||||||
|
size_t n = fwrite(ptr, 1, size, f);
|
||||||
|
if (n != size)
|
||||||
|
nasm_error(ERR_FATAL, "unable to write output: %s", strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef nasm_stricmp
|
#ifndef nasm_stricmp
|
||||||
int nasm_stricmp(const char *s1, const char *s2)
|
int nasm_stricmp(const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
|
@ -385,22 +393,22 @@ int32_t seg_alloc(void)
|
||||||
|
|
||||||
void fwriteint16_t(uint16_t data, FILE * fp)
|
void fwriteint16_t(uint16_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
fwrite(&data, 1, 2, fp);
|
nasm_write(&data, 2, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteint32_t(uint32_t data, FILE * fp)
|
void fwriteint32_t(uint32_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
fwrite(&data, 1, 4, fp);
|
nasm_write(&data, 4, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteint64_t(uint64_t data, FILE * fp)
|
void fwriteint64_t(uint64_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
fwrite(&data, 1, 8, fp);
|
nasm_write(&data, 8, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteaddr(uint64_t data, int size, FILE * fp)
|
void fwriteaddr(uint64_t data, int size, FILE * fp)
|
||||||
{
|
{
|
||||||
fwrite(&data, 1, size, fp);
|
nasm_write(&data, size, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* not WORDS_LITTLEENDIAN */
|
#else /* not WORDS_LITTLEENDIAN */
|
||||||
|
@ -409,50 +417,42 @@ void fwriteint16_t(uint16_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
char buffer[2], *p = buffer;
|
char buffer[2], *p = buffer;
|
||||||
WRITESHORT(p, data);
|
WRITESHORT(p, data);
|
||||||
fwrite(buffer, 1, 2, fp);
|
nasm_write(buffer, 2, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteint32_t(uint32_t data, FILE * fp)
|
void fwriteint32_t(uint32_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
char buffer[4], *p = buffer;
|
char buffer[4], *p = buffer;
|
||||||
WRITELONG(p, data);
|
WRITELONG(p, data);
|
||||||
fwrite(buffer, 1, 4, fp);
|
nasm_write(buffer, 1, 4, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteint64_t(uint64_t data, FILE * fp)
|
void fwriteint64_t(uint64_t data, FILE * fp)
|
||||||
{
|
{
|
||||||
char buffer[8], *p = buffer;
|
char buffer[8], *p = buffer;
|
||||||
WRITEDLONG(p, data);
|
WRITEDLONG(p, data);
|
||||||
fwrite(buffer, 1, 8, fp);
|
nasm_write(buffer, 8, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fwriteaddr(uint64_t data, int size, FILE * fp)
|
void fwriteaddr(uint64_t data, int size, FILE * fp)
|
||||||
{
|
{
|
||||||
char buffer[8], *p = buffer;
|
char buffer[8], *p = buffer;
|
||||||
WRITEADDR(p, data, size);
|
WRITEADDR(p, data, size);
|
||||||
fwrite(buffer, 1, size, fp);
|
nasm_write(buffer, size, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t fwritezero(size_t bytes, FILE *fp)
|
void fwritezero(size_t bytes, FILE *fp)
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
|
||||||
size_t blksize;
|
size_t blksize;
|
||||||
size_t rv;
|
|
||||||
|
|
||||||
while (bytes) {
|
while (bytes) {
|
||||||
blksize = (bytes < ZERO_BUF_SIZE) ? bytes : ZERO_BUF_SIZE;
|
blksize = (bytes < ZERO_BUF_SIZE) ? bytes : ZERO_BUF_SIZE;
|
||||||
|
|
||||||
rv = fwrite(zero_buffer, 1, blksize, fp);
|
nasm_write(zero_buffer, blksize, fp);
|
||||||
if (!rv)
|
bytes -= blksize;
|
||||||
break;
|
|
||||||
|
|
||||||
count += rv;
|
|
||||||
bytes -= rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void standard_extension(char *inname, char *outname, char *extension)
|
void standard_extension(char *inname, char *outname, char *extension)
|
||||||
|
|
|
@ -142,6 +142,11 @@ void nasm_free(void *);
|
||||||
char *nasm_strdup(const char *);
|
char *nasm_strdup(const char *);
|
||||||
char *nasm_strndup(const char *, size_t);
|
char *nasm_strndup(const char *, size_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrapper around fwrite() which fatal-errors on output failure.
|
||||||
|
*/
|
||||||
|
void nasm_write(const void *, size_t, FILE *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NASM assert failure
|
* NASM assert failure
|
||||||
*/
|
*/
|
||||||
|
@ -399,7 +404,7 @@ const char *prefix_name(int);
|
||||||
|
|
||||||
#define ZERO_BUF_SIZE 4096
|
#define ZERO_BUF_SIZE 4096
|
||||||
extern const uint8_t zero_buffer[ZERO_BUF_SIZE];
|
extern const uint8_t zero_buffer[ZERO_BUF_SIZE];
|
||||||
size_t fwritezero(size_t bytes, FILE *fp);
|
void fwritezero(size_t bytes, FILE *fp);
|
||||||
|
|
||||||
static inline bool overflow_general(int64_t value, int bytes)
|
static inline bool overflow_general(int64_t value, int bytes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -545,7 +545,7 @@ static void as86_write_section(struct Section *sect, int index)
|
||||||
int32_t tmplen = (length > 64 ? 64 : length);
|
int32_t tmplen = (length > 64 ? 64 : length);
|
||||||
fputc(0x40 | (tmplen & 0x3F), ofile);
|
fputc(0x40 | (tmplen & 0x3F), ofile);
|
||||||
saa_rnbytes(sect->data, buf, tmplen);
|
saa_rnbytes(sect->data, buf, tmplen);
|
||||||
fwrite(buf, 1, tmplen, ofile);
|
nasm_write(buf, tmplen, ofile);
|
||||||
length -= tmplen;
|
length -= tmplen;
|
||||||
} while (length > 0);
|
} while (length > 0);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1468,8 +1468,8 @@ static void do_output_bin(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate Intel hex file output */
|
/* Generate Intel hex file output */
|
||||||
static int write_ith_record(unsigned int len, uint16_t addr,
|
static void write_ith_record(unsigned int len, uint16_t addr,
|
||||||
uint8_t type, void *data)
|
uint8_t type, void *data)
|
||||||
{
|
{
|
||||||
char buf[1+2+4+2+255*2+2+2];
|
char buf[1+2+4+2+255*2+2+2];
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
|
@ -1488,10 +1488,7 @@ static int write_ith_record(unsigned int len, uint16_t addr,
|
||||||
p += sprintf(p, "%02X", dptr[i]);
|
p += sprintf(p, "%02X", dptr[i]);
|
||||||
p += sprintf(p, "%02X\n", csum);
|
p += sprintf(p, "%02X\n", csum);
|
||||||
|
|
||||||
if (fwrite(buf, 1, p-buf, ofile) != (size_t)(p-buf))
|
nasm_write(buf, p-buf, ofile);
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_output_ith(void)
|
static void do_output_ith(void)
|
||||||
|
@ -1542,8 +1539,8 @@ static void do_output_ith(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate Motorola S-records */
|
/* Generate Motorola S-records */
|
||||||
static int write_srecord(unsigned int len, unsigned int alen,
|
static void write_srecord(unsigned int len, unsigned int alen,
|
||||||
uint32_t addr, uint8_t type, void *data)
|
uint32_t addr, uint8_t type, void *data)
|
||||||
{
|
{
|
||||||
char buf[2+2+8+255*2+2+2];
|
char buf[2+2+8+255*2+2+2];
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
|
@ -1576,10 +1573,7 @@ static int write_srecord(unsigned int len, unsigned int alen,
|
||||||
p += sprintf(p, "%02X", dptr[i]);
|
p += sprintf(p, "%02X", dptr[i]);
|
||||||
p += sprintf(p, "%02X\n", csum);
|
p += sprintf(p, "%02X\n", csum);
|
||||||
|
|
||||||
if (fwrite(buf, 1, p-buf, ofile) != (size_t)(p-buf))
|
nasm_write(buf, p-buf, ofile);
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_output_srec(void)
|
static void do_output_srec(void)
|
||||||
|
|
|
@ -998,7 +998,7 @@ static void coff_section_header(char *name, int32_t namepos, int32_t vsize,
|
||||||
|
|
||||||
if (namepos == -1) {
|
if (namepos == -1) {
|
||||||
strncpy(padname, name, 8);
|
strncpy(padname, name, 8);
|
||||||
fwrite(padname, 8, 1, ofile);
|
nasm_write(padname, 8, ofile);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* If name is longer than 8 bytes, write '/' followed
|
* If name is longer than 8 bytes, write '/' followed
|
||||||
|
@ -1020,7 +1020,7 @@ static void coff_section_header(char *name, int32_t namepos, int32_t vsize,
|
||||||
padname[6] = '0' + (namepos / 10);
|
padname[6] = '0' + (namepos / 10);
|
||||||
namepos = namepos % 10;
|
namepos = namepos % 10;
|
||||||
padname[7] = '0' + (namepos);
|
padname[7] = '0' + (namepos);
|
||||||
fwrite(padname, 8, 1, ofile);
|
nasm_write(padname, 8, ofile);
|
||||||
}
|
}
|
||||||
|
|
||||||
fwriteint32_t(0, ofile); /* Virtual size field - set to 0 or vsize */
|
fwriteint32_t(0, ofile); /* Virtual size field - set to 0 or vsize */
|
||||||
|
@ -1073,7 +1073,7 @@ static void coff_symbol(char *name, int32_t strpos, int32_t value,
|
||||||
|
|
||||||
if (name) {
|
if (name) {
|
||||||
strncpy(padname, name, 8);
|
strncpy(padname, name, 8);
|
||||||
fwrite(padname, 8, 1, ofile);
|
nasm_write(padname, 8, ofile);
|
||||||
} else {
|
} else {
|
||||||
fwriteint32_t(0, ofile);
|
fwriteint32_t(0, ofile);
|
||||||
fwriteint32_t(strpos, ofile);
|
fwriteint32_t(strpos, ofile);
|
||||||
|
@ -1097,7 +1097,7 @@ static void coff_write_symbols(void)
|
||||||
*/
|
*/
|
||||||
coff_symbol(".file", 0L, 0L, -2, 0, 0x67, 1);
|
coff_symbol(".file", 0L, 0L, -2, 0, 0x67, 1);
|
||||||
strncpy(filename, coff_infile, 18);
|
strncpy(filename, coff_infile, 18);
|
||||||
fwrite(filename, 18, 1, ofile);
|
nasm_write(filename, 18, ofile);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The section records, with their auxiliaries.
|
* The section records, with their auxiliaries.
|
||||||
|
@ -1108,7 +1108,7 @@ static void coff_write_symbols(void)
|
||||||
coff_symbol(sects[i]->name, 0L, 0L, i + 1, 0, 3, 1);
|
coff_symbol(sects[i]->name, 0L, 0L, i + 1, 0, 3, 1);
|
||||||
fwriteint32_t(sects[i]->len, ofile);
|
fwriteint32_t(sects[i]->len, ofile);
|
||||||
fwriteint16_t(sects[i]->nrelocs,ofile);
|
fwriteint16_t(sects[i]->nrelocs,ofile);
|
||||||
fwrite(filename, 12, 1, ofile);
|
nasm_write(filename, 12, ofile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -935,7 +935,7 @@ static void elf_write(void)
|
||||||
/*
|
/*
|
||||||
* Output the ELF header.
|
* Output the ELF header.
|
||||||
*/
|
*/
|
||||||
fwrite("\177ELF\1\1\1", 7, 1, ofile);
|
nasm_write("\177ELF\1\1\1", 7, ofile);
|
||||||
fputc(elf_osabi, ofile);
|
fputc(elf_osabi, ofile);
|
||||||
fputc(elf_abiver, ofile);
|
fputc(elf_abiver, ofile);
|
||||||
fwritezero(7, ofile);
|
fwritezero(7, ofile);
|
||||||
|
@ -1286,7 +1286,7 @@ static void elf_write_sections(void)
|
||||||
if (elf_sects[i].is_saa)
|
if (elf_sects[i].is_saa)
|
||||||
saa_fpwrite(elf_sects[i].data, ofile);
|
saa_fpwrite(elf_sects[i].data, ofile);
|
||||||
else
|
else
|
||||||
fwrite(elf_sects[i].data, len, 1, ofile);
|
nasm_write(elf_sects[i].data, len, ofile);
|
||||||
fwritezero(align, ofile);
|
fwritezero(align, ofile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1025,7 +1025,7 @@ static void elf_write(void)
|
||||||
/*
|
/*
|
||||||
* Output the ELF header.
|
* Output the ELF header.
|
||||||
*/
|
*/
|
||||||
fwrite("\177ELF\2\1\1", 7, 1, ofile);
|
nasm_write("\177ELF\2\1\1", 7, ofile);
|
||||||
fputc(elf_osabi, ofile);
|
fputc(elf_osabi, ofile);
|
||||||
fputc(elf_abiver, ofile);
|
fputc(elf_abiver, ofile);
|
||||||
fwritezero(7, ofile);
|
fwritezero(7, ofile);
|
||||||
|
@ -1374,7 +1374,7 @@ static void elf_write_sections(void)
|
||||||
if (elf_sects[i].is_saa)
|
if (elf_sects[i].is_saa)
|
||||||
saa_fpwrite(elf_sects[i].data, ofile);
|
saa_fpwrite(elf_sects[i].data, ofile);
|
||||||
else
|
else
|
||||||
fwrite(elf_sects[i].data, len, 1, ofile);
|
nasm_write(elf_sects[i].data, len, ofile);
|
||||||
fwritezero(align, ofile);
|
fwritezero(align, ofile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -983,7 +983,7 @@ static void elf_write(void)
|
||||||
/*
|
/*
|
||||||
* Output the ELF header.
|
* Output the ELF header.
|
||||||
*/
|
*/
|
||||||
fwrite("\177ELF\1\1\1", 7, 1, ofile);
|
nasm_write("\177ELF\1\1\1", 7, ofile);
|
||||||
fputc(elf_osabi, ofile);
|
fputc(elf_osabi, ofile);
|
||||||
fputc(elf_abiver, ofile);
|
fputc(elf_abiver, ofile);
|
||||||
fwritezero(7, ofile);
|
fwritezero(7, ofile);
|
||||||
|
@ -1334,7 +1334,7 @@ static void elf_write_sections(void)
|
||||||
if (elf_sects[i].is_saa)
|
if (elf_sects[i].is_saa)
|
||||||
saa_fpwrite(elf_sects[i].data, ofile);
|
saa_fpwrite(elf_sects[i].data, ofile);
|
||||||
else
|
else
|
||||||
fwrite(elf_sects[i].data, len, 1, ofile);
|
nasm_write(elf_sects[i].data, len, ofile);
|
||||||
fwritezero(align, ofile);
|
fwritezero(align, ofile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -883,8 +883,8 @@ static uint32_t macho_write_segment (uint32_t offset)
|
||||||
|
|
||||||
/* emit section headers */
|
/* emit section headers */
|
||||||
for (s = sects; s != NULL; s = s->next) {
|
for (s = sects; s != NULL; s = s->next) {
|
||||||
fwrite(s->sectname, sizeof(s->sectname), 1, ofile);
|
nasm_write(s->sectname, sizeof(s->sectname), ofile);
|
||||||
fwrite(s->segname, sizeof(s->segname), 1, ofile);
|
nasm_write(s->segname, sizeof(s->segname), ofile);
|
||||||
fwriteint32_t(s->addr, ofile);
|
fwriteint32_t(s->addr, ofile);
|
||||||
fwriteint32_t(s->size, ofile);
|
fwriteint32_t(s->size, ofile);
|
||||||
|
|
||||||
|
@ -1050,8 +1050,8 @@ static void macho_write_symtab (void)
|
||||||
for (i = 0; i < nextdefsym; i++) {
|
for (i = 0; i < nextdefsym; i++) {
|
||||||
sym = extdefsyms[i];
|
sym = extdefsyms[i];
|
||||||
fwriteint32_t(sym->strx, ofile);
|
fwriteint32_t(sym->strx, ofile);
|
||||||
fwrite(&sym->type, 1, 1, ofile); /* symbol type */
|
nasm_write(&sym->type, 1, ofile); /* symbol type */
|
||||||
fwrite(&sym->sect, 1, 1, ofile); /* section */
|
nasm_write(&sym->sect, 1, ofile); /* section */
|
||||||
fwriteint16_t(sym->desc, ofile); /* description */
|
fwriteint16_t(sym->desc, ofile); /* description */
|
||||||
|
|
||||||
/* Fix up the symbol value now that we know the final section
|
/* Fix up the symbol value now that we know the final section
|
||||||
|
@ -1068,8 +1068,8 @@ static void macho_write_symtab (void)
|
||||||
for (i = 0; i < nundefsym; i++) {
|
for (i = 0; i < nundefsym; i++) {
|
||||||
sym = undefsyms[i];
|
sym = undefsyms[i];
|
||||||
fwriteint32_t(sym->strx, ofile);
|
fwriteint32_t(sym->strx, ofile);
|
||||||
fwrite(&sym->type, 1, 1, ofile); /* symbol type */
|
nasm_write(&sym->type, 1, ofile); /* symbol type */
|
||||||
fwrite(&sym->sect, 1, 1, ofile); /* section */
|
nasm_write(&sym->sect, 1, ofile); /* section */
|
||||||
fwriteint16_t(sym->desc, ofile); /* description */
|
fwriteint16_t(sym->desc, ofile); /* description */
|
||||||
|
|
||||||
/* Fix up the symbol value now that we know the final section
|
/* Fix up the symbol value now that we know the final section
|
||||||
|
|
|
@ -1005,7 +1005,7 @@ static void macho_write_header (void)
|
||||||
fwriteint32_t(head_ncmds64, ofile); /* number of load commands */
|
fwriteint32_t(head_ncmds64, ofile); /* number of load commands */
|
||||||
fwriteint32_t(head_sizeofcmds64, ofile); /* size of load commands */
|
fwriteint32_t(head_sizeofcmds64, ofile); /* size of load commands */
|
||||||
fwriteint32_t(0, ofile); /* no flags */
|
fwriteint32_t(0, ofile); /* no flags */
|
||||||
fwriteint32_t(0, ofile); /* reserved for future use */
|
fwriteint32_t(0, ofile); /* reserved for future use */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write out the segment load command at offset. */
|
/* Write out the segment load command at offset. */
|
||||||
|
@ -1036,8 +1036,8 @@ static uint32_t macho_write_segment (uint64_t offset)
|
||||||
|
|
||||||
/* emit section headers */
|
/* emit section headers */
|
||||||
for (s = sects; s != NULL; s = s->next) {
|
for (s = sects; s != NULL; s = s->next) {
|
||||||
fwrite(s->sectname, sizeof(s->sectname), 1, ofile);
|
nasm_write(s->sectname, sizeof(s->sectname), ofile);
|
||||||
fwrite(s->segname, sizeof(s->segname), 1, ofile);
|
nasm_write(s->segname, sizeof(s->segname), ofile);
|
||||||
fwriteint64_t(s->addr, ofile);
|
fwriteint64_t(s->addr, ofile);
|
||||||
fwriteint64_t(s->size, ofile);
|
fwriteint64_t(s->size, ofile);
|
||||||
|
|
||||||
|
@ -1202,9 +1202,9 @@ static void macho_write_symtab (void)
|
||||||
for (sym = syms; sym != NULL; sym = sym->next) {
|
for (sym = syms; sym != NULL; sym = sym->next) {
|
||||||
if ((sym->type & N_EXT) == 0) {
|
if ((sym->type & N_EXT) == 0) {
|
||||||
fwriteint32_t(sym->strx, ofile); /* string table entry number */
|
fwriteint32_t(sym->strx, ofile); /* string table entry number */
|
||||||
fwrite(&sym->type, 1, 1, ofile); /* symbol type */
|
nasm_write(&sym->type, 1, ofile); /* symbol type */
|
||||||
fwrite(&sym->sect, 1, 1, ofile); /* section */
|
nasm_write(&sym->sect, 1, ofile); /* section */
|
||||||
fwriteint16_t(sym->desc, ofile); /* description */
|
fwriteint16_t(sym->desc, ofile); /* description */
|
||||||
|
|
||||||
/* Fix up the symbol value now that we know the final section
|
/* Fix up the symbol value now that we know the final section
|
||||||
sizes. */
|
sizes. */
|
||||||
|
@ -1224,8 +1224,8 @@ static void macho_write_symtab (void)
|
||||||
for (i = 0; i < nextdefsym; i++) {
|
for (i = 0; i < nextdefsym; i++) {
|
||||||
sym = extdefsyms[i];
|
sym = extdefsyms[i];
|
||||||
fwriteint32_t(sym->strx, ofile);
|
fwriteint32_t(sym->strx, ofile);
|
||||||
fwrite(&sym->type, 1, 1, ofile); /* symbol type */
|
nasm_write(&sym->type, 1, ofile); /* symbol type */
|
||||||
fwrite(&sym->sect, 1, 1, ofile); /* section */
|
nasm_write(&sym->sect, 1, ofile); /* section */
|
||||||
fwriteint16_t(sym->desc, ofile); /* description */
|
fwriteint16_t(sym->desc, ofile); /* description */
|
||||||
|
|
||||||
/* Fix up the symbol value now that we know the final section
|
/* Fix up the symbol value now that we know the final section
|
||||||
|
@ -1242,8 +1242,8 @@ static void macho_write_symtab (void)
|
||||||
for (i = 0; i < nundefsym; i++) {
|
for (i = 0; i < nundefsym; i++) {
|
||||||
sym = undefsyms[i];
|
sym = undefsyms[i];
|
||||||
fwriteint32_t(sym->strx, ofile);
|
fwriteint32_t(sym->strx, ofile);
|
||||||
fwrite(&sym->type, 1, 1, ofile); /* symbol type */
|
nasm_write(&sym->type, 1, ofile); /* symbol type */
|
||||||
fwrite(&sym->sect, 1, 1, ofile); /* section */
|
nasm_write(&sym->sect, 1, ofile); /* section */
|
||||||
fwriteint16_t(sym->desc, ofile); /* description */
|
fwriteint16_t(sym->desc, ofile); /* description */
|
||||||
|
|
||||||
// Fix up the symbol value now that we know the final section sizes.
|
// Fix up the symbol value now that we know the final section sizes.
|
||||||
|
|
|
@ -2396,7 +2396,7 @@ static void obj_fwrite(ObjRecord * orp)
|
||||||
len = orp->committed + 1;
|
len = orp->committed + 1;
|
||||||
cksum += (len & 0xFF) + ((len >> 8) & 0xFF);
|
cksum += (len & 0xFF) + ((len >> 8) & 0xFF);
|
||||||
fwriteint16_t(len, ofile);
|
fwriteint16_t(len, ofile);
|
||||||
fwrite(orp->buf, 1, len - 1, ofile);
|
nasm_write(orp->buf, len-1, ofile);
|
||||||
for (ptr = orp->buf; --len; ptr++)
|
for (ptr = orp->buf; --len; ptr++)
|
||||||
cksum += *ptr;
|
cksum += *ptr;
|
||||||
fputc((-cksum) & 0xFF, ofile);
|
fputc((-cksum) & 0xFF, ofile);
|
||||||
|
|
|
@ -670,7 +670,7 @@ static void rdf2_cleanup(int debuginfo)
|
||||||
/* should write imported & exported symbol declarations to header here */
|
/* should write imported & exported symbol declarations to header here */
|
||||||
|
|
||||||
/* generate the output file... */
|
/* generate the output file... */
|
||||||
fwrite(RDOFF2Id, 6, 1, ofile); /* file type magic number */
|
nasm_write(RDOFF2Id, 6, ofile); /* file type magic number */
|
||||||
|
|
||||||
if (bsslength != 0) { /* reserve BSS */
|
if (bsslength != 0) { /* reserve BSS */
|
||||||
bs.type = RDFREC_BSS;
|
bs.type = RDFREC_BSS;
|
||||||
|
|
2
saa.c
2
saa.c
|
@ -278,7 +278,7 @@ void saa_fpwrite(struct SAA *s, FILE * fp)
|
||||||
|
|
||||||
saa_rewind(s);
|
saa_rewind(s);
|
||||||
while (len = s->datalen, (data = saa_rbytes(s, &len)) != NULL)
|
while (len = s->datalen, (data = saa_rbytes(s, &len)) != NULL)
|
||||||
fwrite(data, 1, len, fp);
|
nasm_write(data, len, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void saa_write8(struct SAA *s, uint8_t v)
|
void saa_write8(struct SAA *s, uint8_t v)
|
||||||
|
|
Loading…
Reference in a new issue