summaryrefslogtreecommitdiff
path: root/ld/ldexp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r--ld/ldexp.c270
1 files changed, 93 insertions, 177 deletions
diff --git a/ld/ldexp.c b/ld/ldexp.c
index cafd56122f..ce57790632 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -41,43 +41,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "libiberty.h"
#include "safe-ctype.h"
-static void exp_print_token
- PARAMS ((token_code_type code, int infix_p));
-static void make_abs
- PARAMS ((etree_value_type *ptr));
-static etree_value_type new_abs
- PARAMS ((bfd_vma value));
-static void check
- PARAMS ((lang_output_section_statement_type *os, const char *name,
- const char *op));
-static etree_value_type new_rel
- PARAMS ((bfd_vma, char *, lang_output_section_statement_type *section));
-static etree_value_type new_rel_from_section
- PARAMS ((bfd_vma value, lang_output_section_statement_type *section));
-static etree_value_type fold_unary
- PARAMS ((etree_type *tree,
- lang_output_section_statement_type *current_section,
- lang_phase_type allocation_done,
- bfd_vma dot, bfd_vma *dotp));
-static etree_value_type fold_binary
- PARAMS ((etree_type *tree,
- lang_output_section_statement_type *current_section,
- lang_phase_type allocation_done,
- bfd_vma dot, bfd_vma *dotp));
-static etree_value_type fold_trinary
- PARAMS ((etree_type *tree,
- lang_output_section_statement_type *current_section,
- lang_phase_type allocation_done,
- bfd_vma dot, bfd_vma *dotp));
-static etree_value_type fold_name
- PARAMS ((etree_type *tree,
- lang_output_section_statement_type *current_section,
- lang_phase_type allocation_done,
- bfd_vma dot));
static etree_value_type exp_fold_tree_no_dot
- PARAMS ((etree_type *tree,
- lang_output_section_statement_type *current_section,
- lang_phase_type allocation_done));
+ (etree_type *, lang_output_section_statement_type *, lang_phase_type);
struct exp_data_seg exp_data_seg;
@@ -85,9 +50,7 @@ struct exp_data_seg exp_data_seg;
with spaces if INFIX_P is TRUE. */
static void
-exp_print_token (code, infix_p)
- token_code_type code;
- int infix_p;
+exp_print_token (token_code_type code, int infix_p)
{
static const struct
{
@@ -159,8 +122,7 @@ exp_print_token (code, infix_p)
}
static void
-make_abs (ptr)
- etree_value_type *ptr;
+make_abs (etree_value_type *ptr)
{
asection *s = ptr->section->bfd_section;
ptr->value += s->vma;
@@ -168,8 +130,7 @@ make_abs (ptr)
}
static etree_value_type
-new_abs (value)
- bfd_vma value;
+new_abs (bfd_vma value)
{
etree_value_type new;
new.valid_p = TRUE;
@@ -179,10 +140,9 @@ new_abs (value)
}
static void
-check (os, name, op)
- lang_output_section_statement_type *os;
- const char *name;
- const char *op;
+check (lang_output_section_statement_type *os,
+ const char *name,
+ const char *op)
{
if (os == NULL)
einfo (_("%F%P: %s uses undefined section %s\n"), op, name);
@@ -191,10 +151,9 @@ check (os, name, op)
}
etree_type *
-exp_intop (value)
- bfd_vma value;
+exp_intop (bfd_vma value)
{
- etree_type *new = (etree_type *) stat_alloc (sizeof (new->value));
+ etree_type *new = stat_alloc (sizeof (new->value));
new->type.node_code = INT;
new->value.value = value;
new->value.str = NULL;
@@ -203,11 +162,9 @@ exp_intop (value)
}
etree_type *
-exp_bigintop (value, str)
- bfd_vma value;
- char *str;
+exp_bigintop (bfd_vma value, char *str)
{
- etree_type *new = (etree_type *) stat_alloc (sizeof (new->value));
+ etree_type *new = stat_alloc (sizeof (new->value));
new->type.node_code = INT;
new->value.value = value;
new->value.str = str;
@@ -218,11 +175,9 @@ exp_bigintop (value, str)
/* Build an expression representing an unnamed relocatable value. */
etree_type *
-exp_relop (section, value)
- asection *section;
- bfd_vma value;
+exp_relop (asection *section, bfd_vma value)
{
- etree_type *new = (etree_type *) stat_alloc (sizeof (new->rel));
+ etree_type *new = stat_alloc (sizeof (new->rel));
new->type.node_code = REL;
new->type.node_class = etree_rel;
new->rel.section = section;
@@ -231,10 +186,9 @@ exp_relop (section, value)
}
static etree_value_type
-new_rel (value, str, section)
- bfd_vma value;
- char *str;
- lang_output_section_statement_type *section;
+new_rel (bfd_vma value,
+ char *str,
+ lang_output_section_statement_type *section)
{
etree_value_type new;
new.valid_p = TRUE;
@@ -245,9 +199,8 @@ new_rel (value, str, section)
}
static etree_value_type
-new_rel_from_section (value, section)
- bfd_vma value;
- lang_output_section_statement_type *section;
+new_rel_from_section (bfd_vma value,
+ lang_output_section_statement_type *section)
{
etree_value_type new;
new.valid_p = TRUE;
@@ -261,12 +214,11 @@ new_rel_from_section (value, section)
}
static etree_value_type
-fold_unary (tree, current_section, allocation_done, dot, dotp)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
- bfd_vma dot;
- bfd_vma *dotp;
+fold_unary (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done,
+ bfd_vma dot,
+ bfd_vma *dotp)
{
etree_value_type result;
@@ -348,12 +300,11 @@ fold_unary (tree, current_section, allocation_done, dot, dotp)
}
static etree_value_type
-fold_binary (tree, current_section, allocation_done, dot, dotp)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
- bfd_vma dot;
- bfd_vma *dotp;
+fold_binary (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done,
+ bfd_vma dot,
+ bfd_vma *dotp)
{
etree_value_type result;
@@ -483,12 +434,11 @@ fold_binary (tree, current_section, allocation_done, dot, dotp)
}
static etree_value_type
-fold_trinary (tree, current_section, allocation_done, dot, dotp)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
- bfd_vma dot;
- bfd_vma *dotp;
+fold_trinary (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done,
+ bfd_vma dot,
+ bfd_vma *dotp)
{
etree_value_type result;
@@ -505,7 +455,7 @@ fold_trinary (tree, current_section, allocation_done, dot, dotp)
}
etree_value_type
-invalid ()
+invalid (void)
{
etree_value_type new;
new.valid_p = FALSE;
@@ -513,11 +463,10 @@ invalid ()
}
static etree_value_type
-fold_name (tree, current_section, allocation_done, dot)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
- bfd_vma dot;
+fold_name (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done,
+ bfd_vma dot)
{
etree_value_type result;
@@ -526,8 +475,7 @@ fold_name (tree, current_section, allocation_done, dot)
case SIZEOF_HEADERS:
if (allocation_done != lang_first_phase_enum)
{
- result = new_abs ((bfd_vma)
- bfd_sizeof_headers (output_bfd,
+ result = new_abs (bfd_sizeof_headers (output_bfd,
link_info.relocatable));
}
else
@@ -545,7 +493,7 @@ fold_name (tree, current_section, allocation_done, dot)
h = bfd_wrapped_link_hash_lookup (output_bfd, &link_info,
tree->name.name,
FALSE, FALSE, TRUE);
- result.value = (h != (struct bfd_link_hash_entry *) NULL
+ result.value = (h != NULL
&& (h->type == bfd_link_hash_defined
|| h->type == bfd_link_hash_defweak
|| h->type == bfd_link_hash_common));
@@ -661,12 +609,11 @@ fold_name (tree, current_section, allocation_done, dot)
}
etree_value_type
-exp_fold_tree (tree, current_section, allocation_done, dot, dotp)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
- bfd_vma dot;
- bfd_vma *dotp;
+exp_fold_tree (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done,
+ bfd_vma dot,
+ bfd_vma *dotp)
{
etree_value_type result;
@@ -774,7 +721,7 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp)
create = FALSE;
h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
create, FALSE, FALSE);
- if (h == (struct bfd_link_hash_entry *) NULL)
+ if (h == NULL)
{
if (tree->type.node_class == etree_assign)
einfo (_("%P%F:%s: hash creation failed\n"),
@@ -814,20 +761,15 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp)
}
static etree_value_type
-exp_fold_tree_no_dot (tree, current_section, allocation_done)
- etree_type *tree;
- lang_output_section_statement_type *current_section;
- lang_phase_type allocation_done;
+exp_fold_tree_no_dot (etree_type *tree,
+ lang_output_section_statement_type *current_section,
+ lang_phase_type allocation_done)
{
- return exp_fold_tree (tree, current_section, allocation_done,
- (bfd_vma) 0, (bfd_vma *) NULL);
+ return exp_fold_tree (tree, current_section, allocation_done, 0, NULL);
}
etree_type *
-exp_binop (code, lhs, rhs)
- int code;
- etree_type *lhs;
- etree_type *rhs;
+exp_binop (int code, etree_type *lhs, etree_type *rhs)
{
etree_type value, *new;
etree_value_type r;
@@ -843,17 +785,13 @@ exp_binop (code, lhs, rhs)
{
return exp_intop (r.value);
}
- new = (etree_type *) stat_alloc (sizeof (new->binary));
- memcpy ((char *) new, (char *) &value, sizeof (new->binary));
+ new = stat_alloc (sizeof (new->binary));
+ memcpy (new, &value, sizeof (new->binary));
return new;
}
etree_type *
-exp_trinop (code, cond, lhs, rhs)
- int code;
- etree_type *cond;
- etree_type *lhs;
- etree_type *rhs;
+exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
{
etree_type value, *new;
etree_value_type r;
@@ -862,21 +800,17 @@ exp_trinop (code, cond, lhs, rhs)
value.trinary.cond = cond;
value.trinary.rhs = rhs;
value.type.node_class = etree_trinary;
- r = exp_fold_tree_no_dot (&value,
- (lang_output_section_statement_type *) NULL,
- lang_first_phase_enum);
+ r = exp_fold_tree_no_dot (&value, NULL, lang_first_phase_enum);
if (r.valid_p)
return exp_intop (r.value);
- new = (etree_type *) stat_alloc (sizeof (new->trinary));
- memcpy ((char *) new, (char *) &value, sizeof (new->trinary));
+ new = stat_alloc (sizeof (new->trinary));
+ memcpy (new, &value, sizeof (new->trinary));
return new;
}
etree_type *
-exp_unop (code, child)
- int code;
- etree_type *child;
+exp_unop (int code, etree_type *child)
{
etree_type value, *new;
@@ -889,15 +823,13 @@ exp_unop (code, child)
if (r.valid_p)
return exp_intop (r.value);
- new = (etree_type *) stat_alloc (sizeof (new->unary));
- memcpy ((char *) new, (char *) &value, sizeof (new->unary));
+ new = stat_alloc (sizeof (new->unary));
+ memcpy (new, &value, sizeof (new->unary));
return new;
}
etree_type *
-exp_nameop (code, name)
- int code;
- const char *name;
+exp_nameop (int code, const char *name)
{
etree_type value, *new;
etree_value_type r;
@@ -905,23 +837,18 @@ exp_nameop (code, name)
value.name.name = name;
value.name.type.node_class = etree_name;
- r = exp_fold_tree_no_dot (&value,
- (lang_output_section_statement_type *) NULL,
- lang_first_phase_enum);
+ r = exp_fold_tree_no_dot (&value, NULL, lang_first_phase_enum);
if (r.valid_p)
return exp_intop (r.value);
- new = (etree_type *) stat_alloc (sizeof (new->name));
- memcpy ((char *) new, (char *) &value, sizeof (new->name));
+ new = stat_alloc (sizeof (new->name));
+ memcpy (new, &value, sizeof (new->name));
return new;
}
etree_type *
-exp_assop (code, dst, src)
- int code;
- const char *dst;
- etree_type *src;
+exp_assop (int code, const char *dst, etree_type *src)
{
etree_type value, *new;
@@ -935,21 +862,19 @@ exp_assop (code, dst, src)
if (exp_fold_tree_no_dot (&value, &result))
return exp_intop (result);
#endif
- new = (etree_type *) stat_alloc (sizeof (new->assign));
- memcpy ((char *) new, (char *) &value, sizeof (new->assign));
+ new = stat_alloc (sizeof (new->assign));
+ memcpy (new, &value, sizeof (new->assign));
return new;
}
/* Handle PROVIDE. */
etree_type *
-exp_provide (dst, src)
- const char *dst;
- etree_type *src;
+exp_provide (const char *dst, etree_type *src)
{
etree_type *n;
- n = (etree_type *) stat_alloc (sizeof (n->assign));
+ n = stat_alloc (sizeof (n->assign));
n->assign.type.node_code = '=';
n->assign.type.node_class = etree_provide;
n->assign.src = src;
@@ -960,13 +885,11 @@ exp_provide (dst, src)
/* Handle ASSERT. */
etree_type *
-exp_assert (exp, message)
- etree_type *exp;
- const char *message;
+exp_assert (etree_type *exp, const char *message)
{
etree_type *n;
- n = (etree_type *) stat_alloc (sizeof (n->assert_s));
+ n = stat_alloc (sizeof (n->assert_s));
n->assert_s.type.node_code = '!';
n->assert_s.type.node_class = etree_assert;
n->assert_s.child = exp;
@@ -975,8 +898,7 @@ exp_assert (exp, message)
}
void
-exp_print_tree (tree)
- etree_type *tree;
+exp_print_tree (etree_type *tree)
{
if (config.map_file == NULL)
config.map_file = stderr;
@@ -999,7 +921,7 @@ exp_print_tree (tree)
return;
case etree_assign:
#if 0
- if (tree->assign.dst->sdefs != (asymbol *) NULL)
+ if (tree->assign.dst->sdefs != NULL)
fprintf (config.map_file, "%s (%x) ", tree->assign.dst->name,
tree->assign.dst->sdefs->value);
else
@@ -1067,11 +989,10 @@ exp_print_tree (tree)
}
bfd_vma
-exp_get_vma (tree, def, name, allocation_done)
- etree_type *tree;
- bfd_vma def;
- char *name;
- lang_phase_type allocation_done;
+exp_get_vma (etree_type *tree,
+ bfd_vma def,
+ char *name,
+ lang_phase_type allocation_done)
{
etree_value_type r;
@@ -1087,21 +1008,19 @@ exp_get_vma (tree, def, name, allocation_done)
}
int
-exp_get_value_int (tree, def, name, allocation_done)
- etree_type *tree;
- int def;
- char *name;
- lang_phase_type allocation_done;
+exp_get_value_int (etree_type *tree,
+ int def,
+ char *name,
+ lang_phase_type allocation_done)
{
- return (int) exp_get_vma (tree, (bfd_vma) def, name, allocation_done);
+ return exp_get_vma (tree, def, name, allocation_done);
}
fill_type *
-exp_get_fill (tree, def, name, allocation_done)
- etree_type *tree;
- fill_type *def;
- char *name;
- lang_phase_type allocation_done;
+exp_get_fill (etree_type *tree,
+ fill_type *def,
+ char *name,
+ lang_phase_type allocation_done)
{
fill_type *fill;
etree_value_type r;
@@ -1119,7 +1038,7 @@ exp_get_fill (tree, def, name, allocation_done)
{
unsigned char *dst;
unsigned char *s;
- fill = (fill_type *) xmalloc ((len + 1) / 2 + sizeof (*fill) - 1);
+ fill = xmalloc ((len + 1) / 2 + sizeof (*fill) - 1);
fill->size = (len + 1) / 2;
dst = fill->data;
s = r.str;
@@ -1144,7 +1063,7 @@ exp_get_fill (tree, def, name, allocation_done)
}
else
{
- fill = (fill_type *) xmalloc (4 + sizeof (*fill) - 1);
+ fill = xmalloc (4 + sizeof (*fill) - 1);
val = r.value;
fill->data[0] = (val >> 24) & 0xff;
fill->data[1] = (val >> 16) & 0xff;
@@ -1156,11 +1075,10 @@ exp_get_fill (tree, def, name, allocation_done)
}
bfd_vma
-exp_get_abs_int (tree, def, name, allocation_done)
- etree_type *tree;
- int def ATTRIBUTE_UNUSED;
- char *name;
- lang_phase_type allocation_done;
+exp_get_abs_int (etree_type *tree,
+ int def ATTRIBUTE_UNUSED,
+ char *name,
+ lang_phase_type allocation_done)
{
etree_value_type res;
res = exp_fold_tree_no_dot (tree, abs_output_section, allocation_done);
@@ -1173,9 +1091,7 @@ exp_get_abs_int (tree, def, name, allocation_done)
return res.value;
}
-bfd_vma align_n (value, align)
- bfd_vma value;
- bfd_vma align;
+bfd_vma align_n (bfd_vma value, bfd_vma align)
{
if (align <= 1)
return value;