aboutsummaryrefslogtreecommitdiff
path: root/gold/i386.cc
diff options
context:
space:
mode:
authorDoug Kwan <dougkwan@google.com>2009-06-05 21:32:57 +0000
committerDoug Kwan <dougkwan@google.com>2009-06-05 21:32:57 +0000
commitbb04269c747a7aa5acffa2355efd1d7343338faf (patch)
treec0146d3edcbd719434f09eee57c611a592170761 /gold/i386.cc
parentda1f277114fc1ed98e71bf2fde32fe82757e9314 (diff)
downloadgdb-bb04269c747a7aa5acffa2355efd1d7343338faf.zip
gdb-bb04269c747a7aa5acffa2355efd1d7343338faf.tar.gz
gdb-bb04269c747a7aa5acffa2355efd1d7343338faf.tar.bz2
2009-06-05 Doug Kwan <dougkwan@google.com>
* Makefile.am (CCFILES): Add target.cc. * Makefile.in: Regenerate. * i386.cc (class Target_i386): Define new virtual method to override do_is_local_label_name in parent. * object.cc (Sized_relobj::do_count_local_symbols): Discard local symbols if --discard-locals or -X is given. * options.h (class General_options): Declare new options '--discard-locals' and '-X' for discarding locals. * target.h (class Target): Define new methods is_local_label_name. Declare new virtual method do_is_local_label_name. * target.cc: New file. * testsuite/Makefile.am (check_PROGRAMS): Add discard_locals_test. (check_SCRIPTS): Add discard_locals_test.sh. (check_DATA): Add discard_local_tests.syms. (discard_locals_test_SOURCES, discard_locals_test_LDFLAGS): Define. (discard_local_tests.syms, discard_locals_test.o): New make rules. * testsuite/Makefile.in: Regenerate. * testsuite/discard_locals_test.c: New file. * testsuite/discard_locals_test.sh: Same.
Diffstat (limited to 'gold/i386.cc')
-rw-r--r--gold/i386.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/gold/i386.cc b/gold/i386.cc
index ba01106..11204f4 100644
--- a/gold/i386.cc
+++ b/gold/i386.cc
@@ -155,6 +155,19 @@ class Target_i386 : public Target_freebsd<32, false>
do_is_defined_by_abi(const Symbol* sym) const
{ return strcmp(sym->name(), "___tls_get_addr") == 0; }
+ // Return whether a symbol name implies a local label. The UnixWare
+ // 2.1 cc generates temporary symbols that start with .X, so we
+ // recognize them here. FIXME: do other SVR4 compilers also use .X?.
+ // If so, we should move the .X recognition into
+ // Target::do_is_local_label_name.
+ bool
+ do_is_local_label_name(const char* name) const
+ {
+ if (name[0] == '.' && name[1] == 'X')
+ return true;
+ return Target::do_is_local_label_name(name);
+ }
+
// Return the size of the GOT section.
section_size_type
got_size()