ecomp.r140802

 :
   liblccopt: ecomp.r140802

.  ecomp.r140802  liblccopt ()  
   binutils.
This commit is contained in:
stepanov 2023-04-05 22:32:57 +03:00
parent ed7f317b07
commit 530ae2fbb6
3 changed files with 24 additions and 21 deletions

View File

@ -901,16 +901,14 @@ lccrt_irreader_read_int( lccrt_irreader_t *irr, int64_t *value, int is_hex)
}
if ( is_dig0
|| (i > 2) )
|| (i >= 2) )
{
char *p1 = 0;
char *p0 = b->data + b->ind;
if ( is_hex )
{
if ( is_hex ) {
(*value) = strtoull( p0, &p1, 16);
} else
{
} else {
(*value) = strtoll( p0, &p1, 10);
}
@ -960,7 +958,7 @@ lccrt_irreader_read_lexem( lccrt_irreader_t *irr)
* Проверяем, что в начале буфера находится заданная лексема.
*/
static int
lccrt_irreader_is_lexem( lccrt_irreader_t *irr, const char *lexem, int is_skip)
lccrt_irreader_is_lexem( lccrt_irreader_t *irr, const char *lexem, int is_skip_space)
{
int r = 0;
lccrt_irreader_buffer_t *b = irr->b;
@ -977,7 +975,7 @@ lccrt_irreader_is_lexem( lccrt_irreader_t *irr, const char *lexem, int is_skip)
&& (strncmp( lexem, b->data + b->ind, lexem_len) == 0) )
{
r = 1;
lccrt_irreader_skip( irr, strlen( lexem), is_skip);
lccrt_irreader_skip( irr, strlen( lexem), is_skip_space);
}
return (r);
@ -2122,7 +2120,7 @@ lccrt_irreader_read_einfocat( lccrt_irreader_t *irr)
|| (lccrt_module_find_einfo_category( m, cname).id >= 0) )
{
lccrt_irreader_error( irr, "duplicate definition einfo-category '%%c%jd = %s', [%s]",
cident, cname, lccrt_irreader_print_head( irr, 64, s));
cident, lccrt_irreader_print_head( irr, 64, s));
} else
{
lccrt_eic_t ecat = lccrt_module_new_einfo_category( m, cname);
@ -2786,7 +2784,8 @@ lccrt_irreader_read_varinit( lccrt_irreader_t *irr, lccrt_varinit_ptr *vinit)
int64_t shift = 0;
if ( lccrt_irreader_read_ident( irr, &aname)
&& lccrt_irreader_is_lexem( irr, "+", 0)
&& (lccrt_irreader_is_char( irr, 0, '+')
|| lccrt_irreader_is_char( irr, 0, '-'))
&& lccrt_irreader_read_int( irr, &shift, 0) )
{
vi = lccrt_varinit_new_addr_var( irr->addr0, shift);
@ -3086,7 +3085,7 @@ lccrt_irreader_get_label( lccrt_irreader_t *irr, const char *name)
if ( !r )
{
lccrt_irreader_error( irr, "unknown label [%s] in function [%s], [%s ...]",
name, fi->f->name, lccrt_function_get_name( fi->f));
name, lccrt_function_get_name( fi->f));
}
return (r);

View File

@ -647,13 +647,13 @@ lccrt_irwriter_print_varinit( lccrt_irwriter_t *irw, lccrt_varinit_ptr vi)
{
int64_t i;
int fd = irw->fd;
lccrt_var_ptr va = 0;
lccrt_function_ptr fa = 0;
const char *vn = 0;
lccrt_type_ptr t = lccrt_varinit_get_type( vi);
int64_t num_elems = lccrt_varinit_get_num_elems( vi);
lccrt_varinit_inittype_t vitype = lccrt_varinit_get_inittype( vi);
lccrt_printf( irw, "%s ", lccrt_irwriter_get_type_ident( irw, t));
switch ( lccrt_varinit_get_inittype( vi) )
switch ( vitype )
{
case LCCRT_VARINIT_ZERO:
lccrt_printf( irw, "zeroinit");
@ -665,14 +665,17 @@ lccrt_irwriter_print_varinit( lccrt_irwriter_t *irw, lccrt_varinit_ptr vi)
lccrt_print_escaped_bytearray( irw, num_elems, lccrt_varinit_get_str( vi));
break;
case LCCRT_VARINIT_ADDR_VAR:
va = lccrt_varinit_get_addr_var( vi);
lccrt_printf( irw, "&%s+%jd", lccrt_irwriter_get_name_ident( irw, va),
lccrt_varinit_get_num_elems( vi));
break;
case LCCRT_VARINIT_ADDR_FUNC:
fa = lccrt_varinit_get_addr_func( vi);
lccrt_printf( irw, "&%s+%jd", lccrt_irwriter_get_name_ident( irw, fa),
lccrt_varinit_get_num_elems( vi));
if ( vitype == LCCRT_VARINIT_ADDR_VAR ) {
vn = lccrt_irwriter_get_name_ident( irw, lccrt_varinit_get_addr_var( vi));
} else {
vn = lccrt_irwriter_get_name_ident( irw, lccrt_varinit_get_addr_func( vi));
}
if ( num_elems >= 0 ) {
lccrt_printf( irw, "&%s+%jd", vn, num_elems);
} else {
lccrt_printf( irw, "&%s%jd", vn, num_elems);
}
break;
case LCCRT_VARINIT_ARR:
lccrt_printf( irw, "{");

View File

@ -237,7 +237,8 @@ lccrt_varinit_get_num_elems( lccrt_varinit_ptr vi)
if ( lccrt_varinit_is_array( vi)
|| lccrt_varinit_is_str( vi)
|| lccrt_varinit_is_addr_var( vi) )
|| lccrt_varinit_is_addr_var( vi)
|| lccrt_varinit_is_addr_func( vi) )
{
r = vi->num_elems;
}