Added the sizeof_headers keyword.

This commit is contained in:
Steve Chamberlain 1991-04-24 20:53:36 +00:00
parent 453063fec9
commit 65c552e308
4 changed files with 27 additions and 4 deletions

View File

@ -282,6 +282,17 @@ bfd_vma dot;
etree_value_type result;
switch (tree->type.node_code)
{
case SIZEOF_HEADERS:
if (allocation_done != lang_first_phase_enum)
{
result = new_abs(bfd_sizeof_headers(output_bfd,
config.relocateable_output));
}
else {
result.valid = false;
}
break;
case DEFINED:
result.value =
ldsym_get_soft(tree->name.name) != (ldsym_type *)NULL;
@ -323,7 +334,7 @@ bfd_vma dot;
((lang_input_statement_type*)(sdef->the_bfd->usrdata))->just_syms_flag == true)
{
result = new_abs(sdef->value + (sdef->section ?
sdef->section->vma : 0));
sdef->section->vma : 0));
}
else {
result = new_rel(sdef->value + sdef->section->output_offset, os);
@ -423,7 +434,14 @@ bfd_vma *dotp;
result.value = -result.value;
break;
case NEXT:
if (allocation_done ==lang_allocating_phase_enum) {
make_abs(&result);
result.value = ALIGN(dot, result.value);
}
else {
/* Return next place aligned to value */
result.valid = false;
}
break;
default:
FAIL();
@ -767,3 +785,4 @@ lang_phase_type allocation_done;
{
return (int)exp_get_vma(tree,(bfd_vma)def,name, allocation_done);
}

View File

@ -113,7 +113,7 @@ boolean ldgram_had_equals = false;
%token SECTIONS
%token '{' '}'
%token ALIGNMENT SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
%token NEXT SIZEOF ADDR SCRIPT ENDSCRIPT
%token NEXT SIZEOF ADDR SCRIPT ENDSCRIPT SIZEOF_HEADERS
%token MEMORY
%token DSECT NOLOAD COPY INFO OVERLAY
%token NAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
@ -621,6 +621,8 @@ exp :
{ $$ = exp_nameop(DEFINED, $3); }
| INT
{ $$ = exp_intop($1); }
| SIZEOF_HEADERS
{ $$ = exp_nameop(SIZEOF_HEADERS,0); }
| SIZEOF '(' NAME ')'
{ $$ = exp_nameop($1,$3); }

View File

@ -1060,7 +1060,7 @@ DEFUN(print_data_statement,(data),
print_space();
print_section("");
print_space();
ASSERT(print_dot == data->output_vma);
/* ASSERT(print_dot == data->output_vma);*/
print_address(data->output_vma);
print_space();
@ -1352,7 +1352,7 @@ DEFUN(lang_size_sections,(s, output_section_statement, prev, fill, dot),
case lang_data_statement_enum:
{
unsigned int size;
s->data_statement.output_vma = dot;
s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
s->data_statement.output_section =
output_section_statement->bfd_section;

View File

@ -74,6 +74,8 @@ keyword_type keywords[] =
"SCRIPT", SCRIPT,
"ENDSCRIPT", ENDSCRIPT,
"NEXT",NEXT,
"sizeof_headers",SIZEOF_HEADERS,
"SIZEOF_HEADERS",SIZEOF_HEADERS,
"MAP",MAP,
"SIZEOF",SIZEOF,
"TARGET",TARGET_K,