diff options
author | Doug Kwan <dougkwan@google.com> | 2009-06-05 21:32:57 +0000 |
---|---|---|
committer | Doug Kwan <dougkwan@google.com> | 2009-06-05 21:32:57 +0000 |
commit | bb04269c747a7aa5acffa2355efd1d7343338faf (patch) | |
tree | c0146d3edcbd719434f09eee57c611a592170761 /gold/i386.cc | |
parent | da1f277114fc1ed98e71bf2fde32fe82757e9314 (diff) | |
download | gdb-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.cc | 13 |
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() |