summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2007-11-06 17:15:10 +0000
committerNick Clifton <nickc@redhat.com>2007-11-06 17:15:10 +0000
commit8c7504802aa101a9df8e799e1d1943ab7b5ff80b (patch)
tree304a13d2252064bcff551cb28d724bef16deffb1
parent102890f04c44b64cf5cef4588267dd9f24086ac7 (diff)
downloadppe42-binutils-8c7504802aa101a9df8e799e1d1943ab7b5ff80b.tar.gz
ppe42-binutils-8c7504802aa101a9df8e799e1d1943ab7b5ff80b.zip
* ehopt.c (check_eh_frame): If md_allow_eh_opt is defined, invoke it to see if the optimizations should be applied.
* config/tc-mn10300.h (md_allow_eh_opt): Define. Only allow call frame optimization if linker relaxation is not enabled. * gas/elf/elf.exp: Disable ehopt test for mn10300.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-mn10300.h5
-rw-r--r--gas/doc/internals.texi5
-rw-r--r--gas/ehopt.c5
-rw-r--r--gas/testsuite/ChangeLog4
-rw-r--r--gas/testsuite/gas/elf/elf.exp7
6 files changed, 32 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 637be807f1..e92fccbca9 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-06 Nick Clifton <nickc@redhat.com>
+
+ * ehopt.c (check_eh_frame): If md_allow_eh_opt is defined, invoke
+ it to see if the optimizations should be applied.
+ * config/tc-mn10300.h (md_allow_eh_opt): Define. Only allow call
+ frame optimization if linker relaxation is not enabled.
+
2007-11-05 Danny Smith <dannysmith@users.sourceforge.net>
* read.c (ALIGN_LIMIT): Rename to ...
diff --git a/gas/config/tc-mn10300.h b/gas/config/tc-mn10300.h
index 8a2e457eb5..ca51eda7a3 100644
--- a/gas/config/tc-mn10300.h
+++ b/gas/config/tc-mn10300.h
@@ -120,3 +120,8 @@ extern bfd_boolean mn10300_allow_local_subtract (expressionS *, expressionS *, s
#define HANDLE_ALIGN(frag) mn10300_handle_align (frag)
extern void mn10300_handle_align (fragS *);
+
+/* Only allow call frame debug info optimization when linker relaxation is
+ not enabled as otherwise we could generate the DWARF directives without
+ the relocs necessary to patch them up. */
+#define md_allow_eh_opt (linkrelax == 0)
diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi
index 62f16f7f3d..78b767e5f9 100644
--- a/gas/doc/internals.texi
+++ b/gas/doc/internals.texi
@@ -1547,6 +1547,11 @@ evaluated. Targets which implement link time relaxation which may change the
position of the two symbols relative to each other should ensure that this
macro returns zero in situations where this can occur.
+@item md_allow_eh_opt
+If defined, GAS will check this macro before performing any optimizations on
+the DWARF call frame debug information that is emitted. Targets which
+implement link time relaxation may need to define this macro and set it to zero
+if it is possible to change the size of a function's prologue.
@end table
@node Object format backend
diff --git a/gas/ehopt.c b/gas/ehopt.c
index 2b0609be00..048bc57b5a 100644
--- a/gas/ehopt.c
+++ b/gas/ehopt.c
@@ -275,6 +275,11 @@ check_eh_frame (expressionS *exp, unsigned int *pnbytes)
if (flag_traditional_format)
return 0;
+#ifdef md_allow_eh_opt
+ if (! md_allow_eh_opt)
+ return 0;
+#endif
+
/* Select the proper section data. */
if (strcmp (segment_name (now_seg), ".eh_frame") == 0)
d = &eh_frame_data;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index bbce8cabf4..fdb57bc0ee 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2007-11-06 Nick Clifton <nickc@redhat.com>
+
+ * gas/elf/elf.exp: Disable ehopt test for mn10300.
+
2007-11-01 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/i386.d: New.
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index c5e2921623..28f8e51a40 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -73,7 +73,12 @@ if { ([istarget "*-*-*elf*"]
set target_machine -armelf
}
}
- run_dump_test "ehopt0"
+
+ # The MN10300 port disables the assembler's call frame optimization
+ # because it interfers with link time relaxation of function prologues.
+ if (![istarget "mn10300-*-*"] && ![istarget "am3*-*-*"]} then {
+ run_dump_test "ehopt0"
+ }
run_dump_test "group0a"
run_dump_test "group0b"
run_dump_test "group1a"
OpenPOWER on IntegriCloud