/* ehopt.c--optimize gcc exception frame information.
- Copyright 1998, 2000, 2001 Free Software Foundation, Inc.
+ Copyright 1998, 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GAS, the GNU Assembler.
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+02110-1301, USA. */
#include "as.h"
#include "subsegs.h"
int z_augmentation;
};
-static int get_cie_info PARAMS ((struct cie_info *));
+static int get_cie_info (struct cie_info *);
/* Extract information from the CIE. */
static int
-get_cie_info (info)
- struct cie_info *info;
+get_cie_info (struct cie_info *info)
{
fragS *f;
fixS *fix;
/* We should find the CIE at the start of the section. */
-#if defined (BFD_ASSEMBLER) || defined (MANY_SEGMENTS)
f = seg_info (now_seg)->frchainP->frch_root;
-#else
- f = frchain_now->frch_root;
-#endif
-#ifdef BFD_ASSEMBLER
fix = seg_info (now_seg)->frchainP->fix_root;
-#else
- fix = *seg_fix_rootP;
-#endif
/* Look through the frags of the section to find the code alignment. */
change *EXP and *PNBYTES. */
int
-check_eh_frame (exp, pnbytes)
- expressionS *exp;
- unsigned int *pnbytes;
+check_eh_frame (expressionS *exp, unsigned int *pnbytes)
{
struct frame_data
{
}
else
d->state = state_error;
+ if (d->state == state_skipping_aug && d->aug_size == 0)
+ d->state = state_wait_loc4;
break;
case state_skipping_aug:
d->state = state_error;
else
{
- int left = (d->aug_size -= *pnbytes);
+ int left = (d->aug_size -= *pnbytes);
if (left == 0)
d->state = state_wait_loc4;
else if (left < 0)
relaxation loop. We set fr_subtype{0:2} to the expected length. */
int
-eh_frame_estimate_size_before_relax (frag)
- fragS *frag;
+eh_frame_estimate_size_before_relax (fragS *frag)
{
offsetT diff;
int ca = frag->fr_subtype >> 3;
the frag. This returns the change in frag length. */
int
-eh_frame_relax_frag (frag)
- fragS *frag;
+eh_frame_relax_frag (fragS *frag)
{
int oldsize, newsize;
fr_subtype{0:2} will be the desired length of the frag. */
void
-eh_frame_convert_frag (frag)
- fragS *frag;
+eh_frame_convert_frag (fragS *frag)
{
offsetT diff;
fragS *loc4_frag;