Add basic exception frame header, plus test.

This commit is contained in:
Ian Lance Taylor 2007-09-26 05:44:38 +00:00
parent 4dffcebc10
commit 3151305a47
14 changed files with 739 additions and 102 deletions

View File

@ -26,6 +26,7 @@ CCFILES = \
defstd.cc \
dirsearch.cc \
dynobj.cc \
ehframe.cc \
fileread.cc \
gold.cc \
gold-threads.cc \
@ -50,6 +51,7 @@ HFILES = \
defstd.h \
dirsearch.h \
dynobj.h \
ehframe.h \
fileread.h \
gold.h \
gold-threads.h \

View File

@ -71,13 +71,13 @@ ARFLAGS = cru
libgold_a_AR = $(AR) $(ARFLAGS)
libgold_a_LIBADD =
am__objects_1 = archive.$(OBJEXT) common.$(OBJEXT) defstd.$(OBJEXT) \
dirsearch.$(OBJEXT) dynobj.$(OBJEXT) fileread.$(OBJEXT) \
gold.$(OBJEXT) gold-threads.$(OBJEXT) layout.$(OBJEXT) \
merge.$(OBJEXT) object.$(OBJEXT) options.$(OBJEXT) \
output.$(OBJEXT) parameters.$(OBJEXT) readsyms.$(OBJEXT) \
reloc.$(OBJEXT) resolve.$(OBJEXT) script.$(OBJEXT) \
symtab.$(OBJEXT) stringpool.$(OBJEXT) target-select.$(OBJEXT) \
workqueue.$(OBJEXT)
dirsearch.$(OBJEXT) dynobj.$(OBJEXT) ehframe.$(OBJEXT) \
fileread.$(OBJEXT) gold.$(OBJEXT) gold-threads.$(OBJEXT) \
layout.$(OBJEXT) merge.$(OBJEXT) object.$(OBJEXT) \
options.$(OBJEXT) output.$(OBJEXT) parameters.$(OBJEXT) \
readsyms.$(OBJEXT) reloc.$(OBJEXT) resolve.$(OBJEXT) \
script.$(OBJEXT) symtab.$(OBJEXT) stringpool.$(OBJEXT) \
target-select.$(OBJEXT) workqueue.$(OBJEXT)
am__objects_2 =
am__objects_3 = yyscript.$(OBJEXT)
am_libgold_a_OBJECTS = $(am__objects_1) $(am__objects_2) \
@ -271,6 +271,7 @@ CCFILES = \
defstd.cc \
dirsearch.cc \
dynobj.cc \
ehframe.cc \
fileread.cc \
gold.cc \
gold-threads.cc \
@ -295,6 +296,7 @@ HFILES = \
defstd.h \
dirsearch.h \
dynobj.h \
ehframe.h \
fileread.h \
gold.h \
gold-threads.h \
@ -437,6 +439,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defstd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirsearch.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynobj.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehframe.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileread.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gold-threads.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gold.Po@am__quote@

126
gold/ehframe.cc Normal file
View File

@ -0,0 +1,126 @@
// ehframe.cc -- handle exception frame sections for gold
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
#include "gold.h"
#include "elfcpp.h"
#include "dwarf.h"
#include "ehframe.h"
namespace gold
{
// This file handles generation of the exception frame header that
// gcc's runtime support libraries use to find unwind information at
// runtime.
// The exception frame header starts with four bytes:
// 0: The version number, currently 1.
// 1: The encoding of the pointer to the exception frames. This can
// be any DWARF unwind encoding (DW_EH_PE_*). It is normally a 4
// byte PC relative offset (DW_EH_PE_pcrel | DW_EH_PE_sdata4).
// 2: The encoding of the count of the number of FDE pointers in the
// lookup table. This can be any DWARF unwind encoding, and in
// particular can be DW_EH_PE_omit if the count is omitted. It is
// normally a 4 byte unsigned count (DW_EH_PE_udata4).
// 3: The encoding of the lookup table entries. Currently gcc's
// libraries will only support DW_EH_PE_datarel | DW_EH_PE_sdata4,
// which means that the values are 4 byte offsets from the start of
// the table.
// The exception frame header is followed by a pointer to the contents
// of the exception frame section (.eh_frame). This pointer is
// encoded as specified in the byte at offset 1 of the header (i.e.,
// it is normally a 4 byte PC relative offset).
// If there is a lookup table, this is followed by the count of the
// number of FDE pointers, encoded as specified in the byte at offset
// 2 of the header (i.e., normally a 4 byte unsigned integer).
// This is followed by the table, which should start at an 4-byte
// aligned address in memory. Each entry in the table is 8 bytes.
// Each entry represents an FDE. The first four bytes of each entry
// are an offset to the starting PC for the FDE. The last four bytes
// of each entry are an offset to the FDE data. The offsets are from
// the start of the exception frame header information. The entries
// are in sorted order by starting PC.
// FIXME: We currently always generate an empty exception frame
// header.
const int eh_frame_hdr_size = 4;
// Construct the exception frame header.
Eh_frame_hdr::Eh_frame_hdr(const Target* target,
Output_section* eh_frame_section)
: Output_section_data(4),
target_(target), eh_frame_section_(eh_frame_section)
{
}
// Set the final address and size of the exception frame header.
void
Eh_frame_hdr::do_set_address(uint64_t, off_t)
{
this->set_data_size(eh_frame_hdr_size + 4);
}
// Write the data to the flie.
void
Eh_frame_hdr::do_write(Output_file* of)
{
const off_t off = this->offset();
const off_t oview_size = this->data_size();
unsigned char* const oview = of->get_output_view(off, oview_size);
// Version number.
oview[0] = 1;
// Write out a 4 byte PC relative offset to the address of the
// .eh_frame section.
oview[1] = elfcpp::DW_EH_PE_pcrel | elfcpp::DW_EH_PE_sdata4;
uint64_t eh_frame_address = this->eh_frame_section_->address();
uint64_t eh_frame_hdr_address = this->address();
uint64_t eh_frame_offset = (eh_frame_address -
(eh_frame_hdr_address + 4));
if (this->target_->is_big_endian())
elfcpp::Swap<32, true>::writeval(oview + 4, eh_frame_offset);
else
elfcpp::Swap<32, false>::writeval(oview + 4, eh_frame_offset);
// We don't currently write out the sorted table.
oview[2] = elfcpp::DW_EH_PE_omit;
oview[3] = elfcpp::DW_EH_PE_omit;
gold_assert(oview_size == 8);
of->write_output_view(off, oview_size, oview);
}
} // End namespace gold.

64
gold/ehframe.h Normal file
View File

@ -0,0 +1,64 @@
// ehframe.h -- handle exception frame sections for gold -*- C++ -*-
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
#ifndef GOLD_EHFRAME_H
#define GOLD_EHFRAME_H
#include "output.h"
namespace gold
{
// This class manages the .eh_frame_hdr section, which holds the data
// for the PT_GNU_EH_FRAME segment. gcc's unwind support code uses
// the PT_GNU_EH_FRAME segment to find the list of FDEs. This saves
// the time required to register the exception handlers at startup
// time and when a shared object is loaded, and the time required to
// deregister the exception handlers when a shared object is unloaded.
// FIXME: gcc supports using storing a sorted lookup table for the
// FDEs in the PT_GNU_EH_FRAME segment, but we do not yet generate
// that.
class Eh_frame_hdr : public Output_section_data
{
public:
Eh_frame_hdr(const Target*, Output_section* eh_frame_section);
// Set the final data size.
void
do_set_address(uint64_t address, off_t offset);
// Write the data to the file.
void
do_write(Output_file*);
private:
// The output target.
const Target* target_;
// The .eh_frame section.
Output_section* eh_frame_section_;
};
} // End namespace gold.
#endif // !defined(GOLD_EHFRAME_H)

View File

@ -31,6 +31,7 @@
#include "output.h"
#include "symtab.h"
#include "dynobj.h"
#include "ehframe.h"
#include "layout.h"
namespace gold
@ -65,7 +66,8 @@ Layout::Layout(const General_options& options)
section_name_map_(), segment_list_(), section_list_(),
unattached_section_list_(), special_output_list_(),
tls_segment_(NULL), symtab_section_(NULL),
dynsym_section_(NULL), dynamic_section_(NULL), dynamic_data_(NULL)
dynsym_section_(NULL), dynamic_section_(NULL), dynamic_data_(NULL),
eh_frame_section_(NULL)
{
// Make space for more than enough segments for a typical file.
// This is just for efficiency--it's OK if we wind up needing more.
@ -206,6 +208,17 @@ Layout::layout(Relobj* object, unsigned int shndx, const char* name,
shdr.get_sh_type(),
shdr.get_sh_flags());
// Special GNU handling of sections named .eh_frame.
if (!parameters->output_is_object()
&& strcmp(name, ".eh_frame") == 0
&& shdr.get_sh_size() > 0
&& shdr.get_sh_type() == elfcpp::SHT_PROGBITS
&& shdr.get_sh_flags() == elfcpp::SHF_ALLOC)
{
this->layout_eh_frame(object, shndx, name, shdr, os, off);
return os;
}
// FIXME: Handle SHF_LINK_ORDER somewhere.
*off = os->add_input_section(object, shndx, name, shdr);
@ -213,6 +226,46 @@ Layout::layout(Relobj* object, unsigned int shndx, const char* name,
return os;
}
// Special GNU handling of sections named .eh_frame. They will
// normally hold exception frame data.
template<int size, bool big_endian>
void
Layout::layout_eh_frame(Relobj* object,
unsigned int shndx,
const char* name,
const elfcpp::Shdr<size, big_endian>& shdr,
Output_section* os, off_t* off)
{
if (this->eh_frame_section_ == NULL)
{
this->eh_frame_section_ = os;
if (this->options_.create_eh_frame_hdr())
{
Stringpool::Key hdr_name_key;
const char* hdr_name = this->namepool_.add(".eh_frame_hdr",
&hdr_name_key);
Output_section* hdr_os =
this->get_output_section(hdr_name, hdr_name_key,
elfcpp::SHT_PROGBITS,
elfcpp::SHF_ALLOC);
Eh_frame_hdr* hdr_posd = new Eh_frame_hdr(object->target(), os);
hdr_os->add_output_section_data(hdr_posd);
Output_segment* hdr_oseg =
new Output_segment(elfcpp::PT_GNU_EH_FRAME, elfcpp::PF_R);
this->segment_list_.push_back(hdr_oseg);
hdr_oseg->add_output_section(hdr_os, elfcpp::PF_R);
}
}
gold_assert(this->eh_frame_section_ == os);
*off = os->add_input_section(object, shndx, name, shdr);
}
// Add POSD to an output section using NAME, TYPE, and FLAGS.
void

View File

@ -206,6 +206,13 @@ class Layout
static const Linkonce_mapping linkonce_mapping[];
static const int linkonce_mapping_count;
// Handle an exception frame section.
template<int size, bool big_endian>
void
layout_eh_frame(Relobj*, unsigned int, const char*,
const elfcpp::Shdr<size, big_endian>&,
Output_section*, off_t*);
// Find the first read-only PT_LOAD segment, creating one if
// necessary.
Output_segment*
@ -356,6 +363,8 @@ class Layout
Output_section* dynamic_section_;
// The dynamic data which goes into dynamic_section_.
Output_data_dynamic* dynamic_data_;
// The exception frame section.
Output_section* eh_frame_section_;
};
// This task handles writing out data which is not part of a section

View File

@ -8,6 +8,8 @@ dirsearch.cc
dirsearch.h
dynobj.cc
dynobj.h
ehframe.cc
ehframe.h
fileread.cc
fileread.h
gold.cc

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-09-22 13:59-0700\n"
"POT-Creation-Date: 2007-09-25 22:42-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -21,42 +21,42 @@ msgstr ""
msgid "%s: %s: no archive symbol table (run ranlib)\n"
msgstr ""
#: archive.cc:141
#: archive.cc:144
#, c-format
msgid "%s: %s: bad archive symbol table names\n"
msgstr ""
#: archive.cc:173
#: archive.cc:176
#, c-format
msgid "%s; %s: malformed archive header at %ld\n"
msgstr ""
#: archive.cc:194
#: archive.cc:197
#, c-format
msgid "%s: %s: malformed archive header size at %ld\n"
msgstr ""
#: archive.cc:206
#: archive.cc:209
#, c-format
msgid "%s: %s: malformed archive header name at %ld\n"
msgstr ""
#: archive.cc:232
#: archive.cc:235
#, c-format
msgid "%s: %s: bad extended name index at %ld\n"
msgstr ""
#: archive.cc:243
#: archive.cc:246
#, c-format
msgid "%s: %s: bad extended name entry at header %ld\n"
msgstr ""
#: archive.cc:338
#: archive.cc:341
#, c-format
msgid "%s: %s: short archive header at %ld\n"
msgstr ""
#: archive.cc:387 archive.cc:400
#: archive.cc:396 archive.cc:411
#, c-format
msgid "%s: %s: member at %ld is not an ELF object"
msgstr ""
@ -76,132 +76,142 @@ msgstr ""
msgid "%s: %s: unexpected link in section %u header: %u != %u\n"
msgstr ""
#: dynobj.cc:209
#: dynobj.cc:210
#, c-format
msgid "%s: %s: DYNAMIC section %u link out of range: %u\n"
msgstr ""
#: dynobj.cc:219
#: dynobj.cc:220
#, c-format
msgid "%s: %s: DYNAMIC section %u link %u is not a strtab\n"
msgstr ""
#: dynobj.cc:241
#: dynobj.cc:242
#, c-format
msgid "%s: %s: DT_SONAME value out of range: %lld >= %lld\n"
msgstr ""
#: dynobj.cc:258
#: dynobj.cc:259
#, c-format
msgid "%s: %s: missing DT_NULL in dynamic segment\n"
msgstr ""
#: dynobj.cc:306
#: dynobj.cc:307
#, c-format
msgid "%s: %s: invalid dynamic symbol table name index: %u\n"
msgstr ""
#: dynobj.cc:314
#: dynobj.cc:315
#, c-format
msgid "%s: %s: dynamic symbol table name section has wrong type: %u\n"
msgstr ""
#: dynobj.cc:388 object.cc:439
#: dynobj.cc:390 object.cc:440
#, c-format
msgid "%s: %s: bad section name offset for section %u: %lu\n"
msgstr ""
#: dynobj.cc:419
#: dynobj.cc:421
#, c-format
msgid "%s: %s: duplicate definition for version %u\n"
msgstr ""
#: dynobj.cc:451
#: dynobj.cc:453
#, c-format
msgid "%s: %s: unexpected verdef version %u\n"
msgstr ""
#: dynobj.cc:467
#: dynobj.cc:469
#, c-format
msgid "%s: %s: verdef vd_cnt field too small: %u\n"
msgstr ""
#: dynobj.cc:476
#: dynobj.cc:478
#, c-format
msgid "%s: %s: verdef vd_aux field out of range: %u\n"
msgstr ""
#: dynobj.cc:488
#: dynobj.cc:490
#, c-format
msgid "%s: %s: verdaux vda_name field out of range: %u\n"
msgstr ""
#: dynobj.cc:499
#: dynobj.cc:501
#, c-format
msgid "%s: %s: verdef vd_next field out of range: %u\n"
msgstr ""
#: dynobj.cc:533
#: dynobj.cc:535
#, c-format
msgid "%s: %s: unexpected verneed version %u\n"
msgstr ""
#: dynobj.cc:544
#: dynobj.cc:546
#, c-format
msgid "%s: %s: verneed vn_aux field out of range: %u\n"
msgstr ""
#: dynobj.cc:559
#: dynobj.cc:561
#, c-format
msgid "%s: %s: vernaux vna_name field out of range: %u\n"
msgstr ""
#: dynobj.cc:572
#: dynobj.cc:574
#, c-format
msgid "%s: %s: verneed vna_next field out of range: %u\n"
msgstr ""
#: dynobj.cc:585
#: dynobj.cc:587
#, c-format
msgid "%s: %s: verneed vn_next field out of range: %u\n"
msgstr ""
#: dynobj.cc:633
#: dynobj.cc:635
#, c-format
msgid "%s: %s: size of dynamic symbols is not multiple of symbol size\n"
msgstr ""
#: dynobj.cc:1264
#: dynobj.cc:1266
#, c-format
msgid "%s: symbol %s has undefined version %s\n"
msgstr ""
#: fileread.cc:75
#: fileread.cc:48
#, c-format
msgid "%s: munmap failed: %s\n"
msgstr ""
#: fileread.cc:83
#, c-format
msgid "%s: warning: close(%s) failed: %s"
msgstr ""
#: fileread.cc:163
#: fileread.cc:108
#, c-format
msgid "%s: %s: lseek to %lld failed: %s"
msgid "%s: %s: fstat failed: %s"
msgstr ""
#: fileread.cc:173
#: fileread.cc:198
#, c-format
msgid "%s: %s: read failed: %s\n"
msgid "%s: %s: pread failed: %s\n"
msgstr ""
#: fileread.cc:193 fileread.cc:276
#: fileread.cc:205
#, c-format
msgid "%s: %s: file too short: read only %lld of %lld bytes at %lld\n"
msgstr ""
#: fileread.cc:385
#: fileread.cc:283
#, c-format
msgid "%s: %s: mmap offset %lld size %lld failed: %s\n"
msgstr ""
#: fileread.cc:402
#, c-format
msgid "%s: cannot find %s\n"
msgstr ""
#: fileread.cc:393
#: fileread.cc:410
#, c-format
msgid "%s: cannot open %s: %s\n"
msgstr ""
@ -255,68 +265,68 @@ msgid "pthread_cond_signal failed"
msgstr ""
#. FIXME: This needs to specify the location somehow.
#: i386.cc:125
#: i386.cc:130
#, c-format
msgid "%s: missing expected TLS relocation\n"
msgstr ""
#: i386.cc:746 i386.cc:896 i386.cc:1158
#: i386.cc:751 i386.cc:912 i386.cc:1174
#, c-format
msgid "%s: %s: unexpected reloc %u in object file\n"
msgstr ""
#: i386.cc:783 i386.cc:803
#: i386.cc:788 i386.cc:808
#, c-format
msgid "%s: %s: unsupported reloc %u against local symbol\n"
msgstr ""
#: i386.cc:932 i386.cc:953
#: i386.cc:948 i386.cc:969
#, c-format
msgid "%s: %s: unsupported reloc %u against global symbol %s\n"
msgstr ""
#: i386.cc:976
#: i386.cc:992
#, c-format
msgid "%s: %s: unsupported RELA reloc section\n"
msgstr ""
#: i386.cc:1066
#: i386.cc:1082
#, c-format
msgid "%s: %s: missing expected TLS relocation\n"
msgstr ""
#: i386.cc:1190 i386.cc:1267 i386.cc:1278
#: i386.cc:1206 i386.cc:1283 i386.cc:1294
#, c-format
msgid "%s: %s: unsupported reloc %u\n"
msgstr ""
#: i386.cc:1217
#: i386.cc:1233
#, c-format
msgid "%s: %s: TLS reloc but no TLS segment\n"
msgstr ""
#: i386.cc:1252
#: i386.cc:1268
#, c-format
msgid "%s: %s: unsupported reloc type %u\n"
msgstr ""
#: i386.cc:1461
#: i386.cc:1477
#, c-format
msgid "%s: %s: TLS relocation out of range\n"
msgstr ""
#: i386.cc:1479
#: i386.cc:1495
#, c-format
msgid "%s: %s: TLS relocation against invalid instruction\n"
msgstr ""
#: merge.cc:246
#: merge.cc:247
#, c-format
msgid ""
"%s: %s: mergeable string section length not multiple of character size\n"
msgstr ""
#: merge.cc:263
#: merge.cc:264
#, c-format
msgid "%s: %s: entry in mergeable string section not null terminated\n"
msgstr ""
@ -346,92 +356,92 @@ msgstr ""
msgid "%s: %s: section group %u info %u out of range\n"
msgstr ""
#: object.cc:329
#: object.cc:330
#, c-format
msgid "%s: %s: symbol %u name offset %u out of range\n"
msgstr ""
#: object.cc:363
#: object.cc:364
#, c-format
msgid "%s: %s: section %u in section group %u out of range"
msgstr ""
#: object.cc:507
#: object.cc:508
#, c-format
msgid "%s: %s: size of symbols is not multiple of symbol size\n"
msgstr ""
#: object.cc:595
#: object.cc:597
#, c-format
msgid "%s: %s: unknown section index %u for local symbol %u\n"
msgstr ""
#: object.cc:606
#: object.cc:608
#, c-format
msgid "%s: %s: local symbol %u section index %u out of range\n"
msgstr ""
#: object.cc:640
#: object.cc:642
#, c-format
msgid "%s: %s: local symbol %u section name out of range: %u >= %u\n"
msgstr ""
#: object.cc:854
#: object.cc:857
#, c-format
msgid "%s: %s: unsupported ELF file type %d\n"
msgstr ""
#: object.cc:873 object.cc:926 object.cc:961
#: object.cc:876 object.cc:929 object.cc:964
#, c-format
msgid "%s: %s: ELF file too short\n"
msgstr ""
#: object.cc:882
#: object.cc:885
#, c-format
msgid "%s: %s: invalid ELF version 0\n"
msgstr ""
#: object.cc:885
#: object.cc:888
#, c-format
msgid "%s: %s: unsupported ELF version %d\n"
msgstr ""
#: object.cc:893
#: object.cc:896
#, c-format
msgid "%s: %s: invalid ELF class 0\n"
msgstr ""
#: object.cc:900
#: object.cc:903
#, c-format
msgid "%s: %s: unsupported ELF class %d\n"
msgstr ""
#: object.cc:908
#: object.cc:911
#, c-format
msgid "%s: %s: invalid ELF data encoding\n"
msgstr ""
#: object.cc:915
#: object.cc:918
#, c-format
msgid "%s: %s: unsupported ELF data encoding %d\n"
msgstr ""
#: object.cc:938
#: object.cc:941
#, c-format
msgid "%s: %s: not configured to support 32-bit big-endian object\n"
msgstr ""
#: object.cc:951
#: object.cc:954
#, c-format
msgid "%s: %s: not configured to support 32-bit little-endian object\n"
msgstr ""
#: object.cc:973
#: object.cc:976
#, c-format
msgid "%s: %s: not configured to support 64-bit big-endian object\n"
msgstr ""
#: object.cc:986
#: object.cc:989
#, c-format
msgid "%s: %s: not configured to support 64-bit little-endian object\n"
msgstr ""
@ -577,7 +587,7 @@ msgstr ""
msgid "%s: use the --help option for usage information\n"
msgstr ""
#: options.cc:617 script.cc:1153
#: options.cc:617 script.cc:1158
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
@ -587,73 +597,73 @@ msgstr ""
msgid "%s: -%c: %s\n"
msgstr ""
#: output.cc:921
#: output.cc:922
#, c-format
msgid "%s: %s: invalid alignment %lu for section \"%s\"\n"
msgstr ""
#: output.cc:1570
#: output.cc:1571
#, c-format
msgid "%s: %s: open: %s\n"
msgstr ""
#: output.cc:1579
#: output.cc:1580
#, c-format
msgid "%s: %s: lseek: %s\n"
msgstr ""
#: output.cc:1586
#: output.cc:1587
#, c-format
msgid "%s: %s: write: %s\n"
msgstr ""
#: output.cc:1596
#: output.cc:1597
#, c-format
msgid "%s: %s: mmap: %s\n"
msgstr ""
#: output.cc:1610
#: output.cc:1611
#, c-format
msgid "%s: %s: munmap: %s\n"
msgstr ""
#: output.cc:1618
#: output.cc:1619
#, c-format
msgid "%s: %s: close: %s\n"
msgstr ""
#: readsyms.cc:113
#, c-format
msgid "%s: %s: ordinary object found in input group\n"
msgstr ""
#: readsyms.cc:154
#: readsyms.cc:93
#, c-format
msgid "%s: %s: file is empty\n"
msgstr ""
#: readsyms.cc:127
#, c-format
msgid "%s: %s: ordinary object found in input group\n"
msgstr ""
#. Here we have to handle any other input file types we need.
#: readsyms.cc:167
#: readsyms.cc:175
#, c-format
msgid "%s: %s: not an object or archive\n"
msgstr ""
#: reloc.cc:189 reloc.cc:433
#: reloc.cc:190 reloc.cc:436
#, c-format
msgid "%s: %s: relocation section %u has bad info %u\n"
msgstr ""
#: reloc.cc:208 reloc.cc:450
#: reloc.cc:209 reloc.cc:453
#, c-format
msgid "%s: %s: relocation section %u uses unexpected symbol table %u\n"
msgstr ""
#: reloc.cc:224 reloc.cc:469
#: reloc.cc:225 reloc.cc:472
#, c-format
msgid "%s: %s: unexpected entsize for reloc section %u: %lu != %u"
msgstr ""
#: reloc.cc:235 reloc.cc:480
#: reloc.cc:236 reloc.cc:483
#, c-format
msgid "%s: %s: reloc section %u size %lu uneven"
msgstr ""
@ -698,12 +708,12 @@ msgstr ""
msgid "%s: %s: versym for symbol %zu has no name: %u\n"
msgstr ""
#: symtab.cc:1200 symtab.cc:1372
#: symtab.cc:1200 symtab.cc:1373
#, c-format
msgid "%s: %s: unsupported symbol section 0x%x\n"
msgstr ""
#: symtab.cc:1565
#: symtab.cc:1570
#, c-format
msgid "%s: %s: warning: %s\n"
msgstr ""

View File

@ -30,7 +30,14 @@ NATIVE_PROGS = \
two_file_shared_2_nonpic_test \
two_file_same_shared_nonpic_test \
two_file_separate_shared_12_nonpic_test \
two_file_separate_shared_21_nonpic_test
two_file_separate_shared_21_nonpic_test \
exception_test \
exception_static_test \
exception_shared_1_test \
exception_shared_2_test \
exception_same_shared_test \
exception_separate_shared_12_test \
exception_separate_shared_21_test
NATIVE_TESTING = \
basic_test \
@ -177,5 +184,61 @@ two_file_shared_2_nonpic.so: two_file_test_2.o
two_file_shared_nonpic.so: two_file_test_1.o two_file_test_2.o
$(CXXLINK) -shared two_file_test_1.o two_file_test_2.o
exception_test_SOURCES = \
exception_test_main.cc \
exception_test_1.cc \
exception_test_2.cc \
exception_test.h
exception_test_DEPENDENCIES = gcctestdir/ld
exception_test_LDFLAGS = -Bgcctestdir/
exception_static_test_SOURCES = \
exception_test_main.cc \
exception_test_1.cc \
exception_test_2.cc
exception_static_test_DEPENDENCIES = gcctestdir/ld
exception_static_test_LDFLAGS = -Bgcctestdir/ -static
exception_shared_1_test_SOURCES = exception_test_2.cc exception_test_main.cc
exception_shared_1_test_DEPENDENCIES = gcctestdir/ld exception_shared_1.so
exception_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
exception_shared_1_test_LDADD = exception_shared_1.so
exception_shared_2_test_SOURCES = exception_test_1.cc exception_test_main.cc
exception_shared_2_test_DEPENDENCIES = gcctestdir/ld exception_shared_2.so
exception_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
exception_shared_2_test_LDADD = exception_shared_2.so
exception_same_shared_test_SOURCES = exception_test_main.cc
exception_same_shared_test_DEPENDENCIES = gcctestdir/ld exception_shared.so
exception_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
exception_same_shared_test_LDADD = exception_shared.so
exception_separate_shared_12_test_SOURCES = exception_test_main.cc
exception_separate_shared_12_test_DEPENDENCIES = \
gcctestdir/ld exception_shared_1.so exception_shared_2.so
exception_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
exception_separate_shared_12_test_LDADD = \
exception_shared_1.so exception_shared_2.so
exception_separate_shared_21_test_SOURCES = exception_test_main.cc
exception_separate_shared_21_test_DEPENDENCIES = \
gcctestdir/ld exception_shared_1.so exception_shared_2.so
exception_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
exception_separate_shared_21_test_LDADD = \
exception_shared_2.so exception_shared_1.so
exception_test_1_pic.o: exception_test_1.cc
$(CXXCOMPILE) -c -fpic -o $@ $<
exception_test_2_pic.o: exception_test_2.cc
$(CXXCOMPILE) -c -fpic -o $@ $<
exception_shared_1.so: exception_test_1_pic.o
$(CXXLINK) -shared exception_test_1_pic.o
exception_shared_2.so: exception_test_2_pic.o
$(CXXLINK) -shared exception_test_2_pic.o
exception_shared.so: exception_test_1_pic.o exception_test_2_pic.o
$(CXXLINK) -shared exception_test_1_pic.o exception_test_2_pic.o
endif
endif

View File

@ -53,6 +53,13 @@ check_PROGRAMS = object_unittest$(EXEEXT) $(am__EXEEXT_1)
@GCC_FALSE@two_file_test_DEPENDENCIES = libgoldtest.a ../libgold.a
@NATIVE_LINKER_FALSE@two_file_test_DEPENDENCIES = libgoldtest.a \
@NATIVE_LINKER_FALSE@ ../libgold.a
@GCC_FALSE@exception_test_DEPENDENCIES = libgoldtest.a ../libgold.a
@NATIVE_LINKER_FALSE@exception_test_DEPENDENCIES = libgoldtest.a \
@NATIVE_LINKER_FALSE@ ../libgold.a
@GCC_FALSE@exception_static_test_DEPENDENCIES = libgoldtest.a \
@GCC_FALSE@ ../libgold.a
@NATIVE_LINKER_FALSE@exception_static_test_DEPENDENCIES = \
@NATIVE_LINKER_FALSE@ libgoldtest.a ../libgold.a
subdir = testsuite
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -87,7 +94,14 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_nonpic_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_nonpic_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test$(EXEEXT)
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_static_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_1_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_2_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_same_shared_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_12_test$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_21_test$(EXEEXT)
am__constructor_static_test_SOURCES_DIST = constructor_test.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_constructor_static_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ constructor_test.$(OBJEXT)
@ -99,6 +113,53 @@ am__constructor_test_SOURCES_DIST = constructor_test.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@ constructor_test.$(OBJEXT)
constructor_test_OBJECTS = $(am_constructor_test_OBJECTS)
constructor_test_LDADD = $(LDADD)
am__exception_same_shared_test_SOURCES_DIST = exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_same_shared_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT)
exception_same_shared_test_OBJECTS = \
$(am_exception_same_shared_test_OBJECTS)
am__exception_separate_shared_12_test_SOURCES_DIST = \
exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_separate_shared_12_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT)
exception_separate_shared_12_test_OBJECTS = \
$(am_exception_separate_shared_12_test_OBJECTS)
am__exception_separate_shared_21_test_SOURCES_DIST = \
exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_separate_shared_21_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT)
exception_separate_shared_21_test_OBJECTS = \
$(am_exception_separate_shared_21_test_OBJECTS)
am__exception_shared_1_test_SOURCES_DIST = exception_test_2.cc \
exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_shared_1_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_2.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT)
exception_shared_1_test_OBJECTS = \
$(am_exception_shared_1_test_OBJECTS)
am__exception_shared_2_test_SOURCES_DIST = exception_test_1.cc \
exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_shared_2_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT)
exception_shared_2_test_OBJECTS = \
$(am_exception_shared_2_test_OBJECTS)
am__exception_static_test_SOURCES_DIST = exception_test_main.cc \
exception_test_1.cc exception_test_2.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_static_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_2.$(OBJEXT)
exception_static_test_OBJECTS = $(am_exception_static_test_OBJECTS)
exception_static_test_LDADD = $(LDADD)
am__exception_test_SOURCES_DIST = exception_test_main.cc \
exception_test_1.cc exception_test_2.cc exception_test.h
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_exception_test_OBJECTS = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.$(OBJEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_2.$(OBJEXT)
exception_test_OBJECTS = $(am_exception_test_OBJECTS)
exception_test_LDADD = $(LDADD)
am_object_unittest_OBJECTS = object_unittest.$(OBJEXT)
object_unittest_OBJECTS = $(am_object_unittest_OBJECTS)
object_unittest_LDADD = $(LDADD)
@ -185,7 +246,14 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libgoldtest_a_SOURCES) $(constructor_static_test_SOURCES) \
$(constructor_test_SOURCES) $(object_unittest_SOURCES) \
$(constructor_test_SOURCES) \
$(exception_same_shared_test_SOURCES) \
$(exception_separate_shared_12_test_SOURCES) \
$(exception_separate_shared_21_test_SOURCES) \
$(exception_shared_1_test_SOURCES) \
$(exception_shared_2_test_SOURCES) \
$(exception_static_test_SOURCES) $(exception_test_SOURCES) \
$(object_unittest_SOURCES) \
$(two_file_same_shared_nonpic_test_SOURCES) \
$(two_file_same_shared_test_SOURCES) \
$(two_file_separate_shared_12_nonpic_test_SOURCES) \
@ -199,7 +267,13 @@ SOURCES = $(libgoldtest_a_SOURCES) $(constructor_static_test_SOURCES) \
DIST_SOURCES = $(libgoldtest_a_SOURCES) \
$(am__constructor_static_test_SOURCES_DIST) \
$(am__constructor_test_SOURCES_DIST) \
$(object_unittest_SOURCES) \
$(am__exception_same_shared_test_SOURCES_DIST) \
$(am__exception_separate_shared_12_test_SOURCES_DIST) \
$(am__exception_separate_shared_21_test_SOURCES_DIST) \
$(am__exception_shared_1_test_SOURCES_DIST) \
$(am__exception_shared_2_test_SOURCES_DIST) \
$(am__exception_static_test_SOURCES_DIST) \
$(am__exception_test_SOURCES_DIST) $(object_unittest_SOURCES) \
$(am__two_file_same_shared_nonpic_test_SOURCES_DIST) \
$(am__two_file_same_shared_test_SOURCES_DIST) \
$(am__two_file_separate_shared_12_nonpic_test_SOURCES_DIST) \
@ -354,7 +428,14 @@ INCLUDES = -D_GNU_SOURCE \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_nonpic_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_nonpic_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_static_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_1_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_2_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_same_shared_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_12_test \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_21_test
@GCC_TRUE@@NATIVE_LINKER_TRUE@NATIVE_TESTING = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_test \
@ -451,6 +532,49 @@ object_unittest_SOURCES = object_unittest.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_separate_shared_21_nonpic_test_LDADD = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic.so two_file_shared_1_nonpic.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_SOURCES = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.cc \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.cc \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_2.cc \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test.h
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_DEPENDENCIES = gcctestdir/ld
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_LDFLAGS = -Bgcctestdir/
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_static_test_SOURCES = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.cc \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.cc \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_2.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_static_test_DEPENDENCIES = gcctestdir/ld
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_static_test_LDFLAGS = -Bgcctestdir/ -static
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_1_test_SOURCES = exception_test_2.cc exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_1_test_DEPENDENCIES = gcctestdir/ld exception_shared_1.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_1_test_LDADD = exception_shared_1.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_2_test_SOURCES = exception_test_1.cc exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_2_test_DEPENDENCIES = gcctestdir/ld exception_shared_2.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_2_test_LDADD = exception_shared_2.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_same_shared_test_SOURCES = exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_same_shared_test_DEPENDENCIES = gcctestdir/ld exception_shared.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_same_shared_test_LDADD = exception_shared.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_12_test_SOURCES = exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_12_test_DEPENDENCIES = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld exception_shared_1.so exception_shared_2.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_12_test_LDADD = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_1.so exception_shared_2.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_21_test_SOURCES = exception_test_main.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_21_test_DEPENDENCIES = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld exception_shared_1.so exception_shared_2.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_separate_shared_21_test_LDADD = \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_2.so exception_shared_1.so
all: all-am
.SUFFIXES:
@ -500,6 +624,27 @@ constructor_static_test$(EXEEXT): $(constructor_static_test_OBJECTS) $(construct
constructor_test$(EXEEXT): $(constructor_test_OBJECTS) $(constructor_test_DEPENDENCIES)
@rm -f constructor_test$(EXEEXT)
$(CXXLINK) $(constructor_test_LDFLAGS) $(constructor_test_OBJECTS) $(constructor_test_LDADD) $(LIBS)
exception_same_shared_test$(EXEEXT): $(exception_same_shared_test_OBJECTS) $(exception_same_shared_test_DEPENDENCIES)
@rm -f exception_same_shared_test$(EXEEXT)
$(CXXLINK) $(exception_same_shared_test_LDFLAGS) $(exception_same_shared_test_OBJECTS) $(exception_same_shared_test_LDADD) $(LIBS)
exception_separate_shared_12_test$(EXEEXT): $(exception_separate_shared_12_test_OBJECTS) $(exception_separate_shared_12_test_DEPENDENCIES)
@rm -f exception_separate_shared_12_test$(EXEEXT)
$(CXXLINK) $(exception_separate_shared_12_test_LDFLAGS) $(exception_separate_shared_12_test_OBJECTS) $(exception_separate_shared_12_test_LDADD) $(LIBS)
exception_separate_shared_21_test$(EXEEXT): $(exception_separate_shared_21_test_OBJECTS) $(exception_separate_shared_21_test_DEPENDENCIES)
@rm -f exception_separate_shared_21_test$(EXEEXT)
$(CXXLINK) $(exception_separate_shared_21_test_LDFLAGS) $(exception_separate_shared_21_test_OBJECTS) $(exception_separate_shared_21_test_LDADD) $(LIBS)
exception_shared_1_test$(EXEEXT): $(exception_shared_1_test_OBJECTS) $(exception_shared_1_test_DEPENDENCIES)
@rm -f exception_shared_1_test$(EXEEXT)
$(CXXLINK) $(exception_shared_1_test_LDFLAGS) $(exception_shared_1_test_OBJECTS) $(exception_shared_1_test_LDADD) $(LIBS)
exception_shared_2_test$(EXEEXT): $(exception_shared_2_test_OBJECTS) $(exception_shared_2_test_DEPENDENCIES)
@rm -f exception_shared_2_test$(EXEEXT)
$(CXXLINK) $(exception_shared_2_test_LDFLAGS) $(exception_shared_2_test_OBJECTS) $(exception_shared_2_test_LDADD) $(LIBS)
exception_static_test$(EXEEXT): $(exception_static_test_OBJECTS) $(exception_static_test_DEPENDENCIES)
@rm -f exception_static_test$(EXEEXT)
$(CXXLINK) $(exception_static_test_LDFLAGS) $(exception_static_test_OBJECTS) $(exception_static_test_LDADD) $(LIBS)
exception_test$(EXEEXT): $(exception_test_OBJECTS) $(exception_test_DEPENDENCIES)
@rm -f exception_test$(EXEEXT)
$(CXXLINK) $(exception_test_LDFLAGS) $(exception_test_OBJECTS) $(exception_test_LDADD) $(LIBS)
object_unittest$(EXEEXT): $(object_unittest_OBJECTS) $(object_unittest_DEPENDENCIES)
@rm -f object_unittest$(EXEEXT)
$(CXXLINK) $(object_unittest_LDFLAGS) $(object_unittest_OBJECTS) $(object_unittest_LDADD) $(LIBS)
@ -544,6 +689,9 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constructor_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception_test_1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception_test_2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception_test_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testfile.Po@am__quote@
@ -845,6 +993,18 @@ uninstall-am: uninstall-info-am
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -shared two_file_test_2.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_nonpic.so: two_file_test_1.o two_file_test_2.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -shared two_file_test_1.o two_file_test_2.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_1_pic.o: exception_test_1.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_2_pic.o: exception_test_2.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_1.so: exception_test_1_pic.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -shared exception_test_1_pic.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared_2.so: exception_test_2_pic.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -shared exception_test_2_pic.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_shared.so: exception_test_1_pic.o exception_test_2_pic.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -shared exception_test_1_pic.o exception_test_2_pic.o
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,27 @@
// exception_test.h -- exception test case for gold, header file -*- C++ -*-
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
// This tests references between files. This is the shared header
// file. See exception_test_1.cc for details.
extern bool t1();
extern void f1();

View File

@ -0,0 +1,52 @@
// exception_test_1.cc -- test exception handling for gold, file 1 of 2
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
// This tests throwing an exception across various boundaries. This
// is a general test of the exception frame handling, and the
// interaction with the compiler support libraries. This is file 1,
// which catches the exception. We test in several different ways:
// Files 1 and 2 linked together in executable.
// File 1 in executable, file 2 in shared library.
// File 1 in shared library, file 2 in executable.
// Files 1 and 2 linked together in shared library.
// Files 1 and 2 in different shared libraries.
#include "exception_test.h"
bool
t1()
{
int i;
try
{
i = 0;
f1();
i = 1;
}
catch (...)
{
return i == 0;
}
return false;
}

View File

@ -0,0 +1,31 @@
// exception_test_1.cc -- test exception handling for gold, file 1 of 2
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
// Second part of exception test. See exception_test_1.cc for details.
#include "exception_test.h"
void
f1()
{
throw 0;
}

View File

@ -0,0 +1,35 @@
// exception_test_main.cc -- an exception test case for gold, main function
// Copyright 2006, 2007 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
// This tests references between files. This is the main file. See
// two_file_test_1.cc for details.
#include <cassert>
#include "exception_test.h"
int
main()
{
assert(t1());
return 0;
}