{ ADDR, "ADDR" },
{ LOADADDR, "LOADADDR" },
{ CONSTANT, "CONSTANT" },
- { MAX_K, "MAX_K" },
+ { ABSOLUTE, "ABSOLUTE" },
+ { MAX_K, "MAX" },
+ { MIN_K, "MIN" },
+ { ASSERT_K, "ASSERT" },
{ REL, "relocatable" },
{ DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
{ DATA_SEGMENT_RELRO_END, "DATA_SEGMENT_RELRO_END" },
exp_fold_tree_1 (tree->binary.lhs);
/* The SEGMENT_START operator is special because its first
- operand is a string, not the name of a symbol. */
+ operand is a string, not the name of a symbol. Note that the
+ operands have been swapped, so binary.lhs is second (default)
+ operand, binary.rhs is first operand. */
if (expld.result.valid_p && tree->type.node_code == SEGMENT_START)
{
const char *segment_name;
seg->used = TRUE;
expld.result.value = seg->value;
expld.result.str = NULL;
- expld.result.section = NULL;
+ expld.result.section = expld.section;
break;
}
}
return;
}
else if (expld.section != bfd_abs_section_ptr
- && expld.result.section == bfd_abs_section_ptr
- && (tree->type.node_code == '+'
- || tree->type.node_code == '-'))
+ && expld.result.section == bfd_abs_section_ptr
+ && (tree->type.node_code == '+'
+ || tree->type.node_code == '-'))
{
/* Keep the section of the lhs term. */
expld.result.section = lhs.section;
if (expld.phase == lang_allocating_phase_enum)
{
expld.dataseg.phase = exp_dataseg_align_seen;
- expld.dataseg.min_base = align_n (expld.dot, maxpage);
+ expld.dataseg.min_base = expld.dot;
expld.dataseg.base = expld.result.value;
expld.dataseg.pagesize = commonpage;
expld.dataseg.maxpagesize = maxpage;
|| h->type == bfd_link_hash_common)
&& (def_iteration == lang_statement_iteration
|| def_iteration == -1));
- expld.result.section = bfd_abs_section_ptr;
+ expld.result.section = expld.section;
expld.result.valid_p = TRUE;
}
break;
else
{
exp_fold_tree_1 (os->load_base);
- make_abs ();
+ if (expld.result.valid_p)
+ make_abs ();
}
}
}