diff options
author | Alan Modra <amodra@gmail.com> | 2010-12-20 13:00:14 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2010-12-20 13:00:14 +0000 |
commit | 5c3049d2ef5d591dadd42bd074f4866616ef8231 (patch) | |
tree | a8644a05274ecba59667fba45c3725987b59e6c2 /ld/ldexp.c | |
parent | e759c116027e96bb72562d69ae49a86d6f271a3a (diff) | |
download | gdb-5c3049d2ef5d591dadd42bd074f4866616ef8231.zip gdb-5c3049d2ef5d591dadd42bd074f4866616ef8231.tar.gz gdb-5c3049d2ef5d591dadd42bd074f4866616ef8231.tar.bz2 |
* ld.texinfo (Expression Section): Describe treatment of numbers
and absolute symbols.
* ldemul.c (after_open_default): Look up __ld_compatibility.
* ldexp.c (fold_name): Convert absolute symbols to numbers when
inside output section definitions, or when __ld_compatibility >= 221.
(exp_fold_tree_1): Convert numbers to absolute when not in output
section definition and __ld_compatibility < 221. Don't always
convert values outside an output section definition to absolute.
* ldexp.h (uses_defined): Comment.
* ldlang.c (ld_compatibility): New variable.
* ldlang.h (ld_compatibility): Declare.
* emultempl/aix.em, * emultempl/armcoff.em, * emultempl/beos.em,
* emultempl/elf32.em, * emultempl/genelf.em, * emultempl/lnk960.em,
* emultempl/m68kcoff.em, * emultempl/mmo.em, * emultempl/pe.em,
* emultempl/pep.em, * emultempl/sunos.em, * emultempl/z80.em: Call
after_open_default from after_open function.
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r-- | ld/ldexp.c | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -553,7 +553,9 @@ fold_name (etree_type *tree) " referenced in expression\n"), tree->name.name); } - else if (output_section == bfd_abs_section_ptr) + else if (output_section == bfd_abs_section_ptr + && (expld.section != bfd_abs_section_ptr + || ld_compatibility >= 221)) new_number (h->u.def.value + h->u.def.section->output_offset); else new_rel (h->u.def.value + h->u.def.section->output_offset, @@ -700,7 +702,11 @@ exp_fold_tree_1 (etree_type *tree) switch (tree->type.node_class) { case etree_value: - new_number (tree->value.value); + if (expld.section == bfd_abs_section_ptr + && ld_compatibility < 221) + new_abs (tree->value.value); + else + new_number (tree->value.value); expld.result.str = tree->value.str; break; @@ -860,12 +866,6 @@ exp_fold_tree_1 (etree_type *tree) memset (&expld.result, 0, sizeof (expld.result)); break; } - - /* Any value not inside an output section statement is an - absolute value. */ - if (expld.result.valid_p - && expld.section == bfd_abs_section_ptr) - make_abs (); } void |