@ -49,7 +49,7 @@ static struct version_info {
struct emitter {
void ( * cell ) ( void * , cell_t ) ;
void ( * string ) ( void * , char * , int ) ;
void ( * string ) ( void * , const char * , int ) ;
void ( * align ) ( void * , int ) ;
void ( * data ) ( void * , struct data ) ;
void ( * beginnode ) ( void * , struct label * labels ) ;
@ -64,7 +64,7 @@ static void bin_emit_cell(void *e, cell_t val)
* dtbuf = data_append_cell ( * dtbuf , val ) ;
}
static void bin_emit_string ( void * e , char * str , int len )
static void bin_emit_string ( void * e , const char * str , int len )
{
struct data * dtbuf = e ;
@ -144,22 +144,14 @@ static void asm_emit_cell(void *e, cell_t val)
( val > > 8 ) & 0xff , val & 0xff ) ;
}
static void asm_emit_string ( void * e , char * str , int len )
static void asm_emit_string ( void * e , const char * str , int len )
{
FILE * f = e ;
char c = 0 ;
if ( len ! = 0 ) {
/* XXX: ewww */
c = str [ len ] ;
str [ len ] = ' \0 ' ;
}
fprintf ( f , " \t .string \t \" %s \" \n " , str ) ;
if ( len ! = 0 ) {
str [ len ] = c ;
}
if ( len ! = 0 )
fprintf ( f , " \t .string \t \" %.*s \" \n " , len , str ) ;
else
fprintf ( f , " \t .string \t \" %s \" \n " , str ) ;
}
static void asm_emit_align ( void * e , int a )
@ -179,7 +171,7 @@ static void asm_emit_data(void *e, struct data d)
emit_offset_label ( f , m - > ref , m - > offset ) ;
while ( ( d . len - off ) > = sizeof ( uint32_t ) ) {
asm_emit_cell ( e , fdt32_to_cpu ( * ( ( uin t32_t * ) ( d . val + off ) ) ) ) ;
asm_emit_cell ( e , fdt32_to_cpu ( * ( ( fd t32_t * ) ( d . val + off ) ) ) ) ;
off + = sizeof ( uint32_t ) ;
}
@ -318,17 +310,16 @@ static struct data flatten_reserve_list(struct reserve_info *reservelist,
{
struct reserve_info * re ;
struct data d = empty_data ;
static struct fdt_reserve_entry null_re = { 0 , 0 } ;
int j ;
for ( re = reservelist ; re ; re = re - > next ) {
d = data_append_re ( d , & re - > r e) ;
d = data_append_re ( d , re - > address , re - > siz e) ;
}
/*
* Add additional reserved slots if the user asked for them .
*/
for ( j = 0 ; j < reservenum ; j + + ) {
d = data_append_re ( d , & null_re ) ;
d = data_append_re ( d , 0 , 0 ) ;
}
return d ;
@ -544,11 +535,11 @@ void dt_to_asm(FILE *f, struct dt_info *dti, int version)
fprintf ( f , " \t .globl \t %s \n " , l - > label ) ;
fprintf ( f , " %s: \n " , l - > label ) ;
}
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > re . address > > 32 ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > address > > 32 ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " ,
( unsigned int ) ( re - > re . address & 0xffffffff ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > re . size > > 32 ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > re . size & 0xffffffff ) ) ;
( unsigned int ) ( re - > address & 0xffffffff ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > size > > 32 ) ) ;
ASM_EMIT_BELONG ( f , " 0x%08x " , ( unsigned int ) ( re - > size & 0xffffffff ) ) ;
}
for ( i = 0 ; i < reservenum ; i + + ) {
fprintf ( f , " \t .long \t 0, 0 \n \t .long \t 0, 0 \n " ) ;
@ -609,7 +600,7 @@ static void flat_read_chunk(struct inbuf *inb, void *p, int len)
static uint32_t flat_read_word ( struct inbuf * inb )
{
uin t32_t val ;
fd t32_t val ;
assert ( ( ( inb - > ptr - inb - > base ) % sizeof ( val ) ) = = 0 ) ;
@ -718,13 +709,15 @@ static struct reserve_info *flat_read_mem_reserve(struct inbuf *inb)
* First pass , count entries .
*/
while ( 1 ) {
uint64_t address , size ;
flat_read_chunk ( inb , & re , sizeof ( re ) ) ;
re . address = fdt64_to_cpu ( re . address ) ;
re . size = fdt64_to_cpu ( re . size ) ;
if ( re . size = = 0 )
address = fdt64_to_cpu ( re . address ) ;
size = fdt64_to_cpu ( re . size ) ;
if ( size = = 0 )
break ;
new = build_reserve_entry ( re . address , re . size ) ;
new = build_reserve_entry ( address , size ) ;
reservelist = add_reserve_entry ( reservelist , new ) ;
}
@ -817,6 +810,7 @@ static struct node *unflatten_tree(struct inbuf *dtbuf,
struct dt_info * dt_from_blob ( const char * fname )
{
FILE * f ;
fdt32_t magic_buf , totalsize_buf ;
uint32_t magic , totalsize , version , size_dt , boot_cpuid_phys ;
uint32_t off_dt , off_str , off_mem_rsvmap ;
int rc ;
@ -833,7 +827,7 @@ struct dt_info *dt_from_blob(const char *fname)
f = srcfile_relative_open ( fname , NULL ) ;
rc = fread ( & magic , sizeof ( magic ) , 1 , f ) ;
rc = fread ( & magic_buf , sizeof ( magic_buf ) , 1 , f ) ;
if ( ferror ( f ) )
die ( " Error reading DT blob magic number: %s \n " ,
strerror ( errno ) ) ;
@ -844,11 +838,11 @@ struct dt_info *dt_from_blob(const char *fname)
die ( " Mysterious short read reading magic number \n " ) ;
}
magic = fdt32_to_cpu ( magic ) ;
magic = fdt32_to_cpu ( magic_buf ) ;
if ( magic ! = FDT_MAGIC )
die ( " Blob has incorrect magic number \n " ) ;
rc = fread ( & totalsize , sizeof ( totalsize ) , 1 , f ) ;
rc = fread ( & totalsize_buf , sizeof ( totalsize_buf ) , 1 , f ) ;
if ( ferror ( f ) )
die ( " Error reading DT blob size: %s \n " , strerror ( errno ) ) ;
if ( rc < 1 ) {
@ -858,7 +852,7 @@ struct dt_info *dt_from_blob(const char *fname)
die ( " Mysterious short read reading blob size \n " ) ;
}
totalsize = fdt32_to_cpu ( totalsize ) ;
totalsize = fdt32_to_cpu ( totalsize_buf ) ;
if ( totalsize < FDT_V1_SIZE )
die ( " DT blob size (%d) is too small \n " , totalsize ) ;