From: tbsaunde <tbsaunde@138bc75d-0d04-0410-961f-82ee72b054a4> Last patch I'm squeezing in for stage 1. Jeff approved this back in september, but I never committed it for some reason. So I updated it to trunk, rebootstrapped and regtested and committed it.
Thanks! Trev gcc/ChangeLog: 2016-08-20 Trevor Saunders <tbsaunde+...@tbsaunde.org> * acinclude.m4 (gcc_GAS_CHECK_FEATURE): Support doing an action if the feature isn't available. * configure: Regenerate. * configure.ac: define HAVE_AS_LEB128 to 0 when not available. * dwarf2asm.c (dw2_asm_output_data_uleb128): Always compile code for HAVE_AS_LEB128. (dw2_asm_output_data_sleb128): Likewise. (dw2_asm_output_delta_uleb128): Likewise. (dw2_asm_output_delta_sleb128): Likewise. * except.c (output_one_function_exception_table): Likewise. (dw2_size_of_call_site_table): Likewise. (sjlj_size_of_call_site_table): Likewise. * dwarf2out.c (output_loc_list): Likewise. (output_rnglists): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242381 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/acinclude.m4 | 4 ++ gcc/configure | 106 +++++++++++++++++++++++++++++++- gcc/configure.ac | 2 + gcc/dwarf2asm.c | 184 +++++++++++++++++++++++++++---------------------------- gcc/dwarf2out.c | 153 ++++++++++++++++++++++----------------------- gcc/except.c | 162 ++++++++++++++++++++++++------------------------ 6 files changed, 357 insertions(+), 254 deletions(-) diff --git a/gcc/acinclude.m4 b/gcc/acinclude.m4 index 38dd899..791f2a7 100644 --- a/gcc/acinclude.m4 +++ b/gcc/acinclude.m4 @@ -550,6 +550,10 @@ AC_CACHE_CHECK([assembler for $1], [$2], ifelse([$7],,,[dnl if test $[$2] = yes; then $7 +fi]) +ifelse([$8],,,[dnl +if test $[$2] != yes; then + $8 fi])]) dnl gcc_SUN_LD_VERSION diff --git a/gcc/configure b/gcc/configure index 0f04033..197a152 100755 --- a/gcc/configure +++ b/gcc/configure @@ -22432,6 +22432,7 @@ $as_echo "#define HAVE_GAS_BALIGN_AND_P2ALIGN 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .p2align with maximum skip" >&5 $as_echo_n "checking assembler for .p2align with maximum skip... " >&6; } if test "${gcc_cv_as_max_skip_p2align+set}" = set; then : @@ -22467,6 +22468,7 @@ $as_echo "#define HAVE_GAS_MAX_SKIP_P2ALIGN 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .literal16" >&5 $as_echo_n "checking assembler for .literal16... " >&6; } if test "${gcc_cv_as_literal16+set}" = set; then : @@ -22502,6 +22504,7 @@ $as_echo "#define HAVE_GAS_LITERAL16 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for working .subsection -1" >&5 $as_echo_n "checking assembler for working .subsection -1... " >&6; } if test "${gcc_cv_as_subsection_m1+set}" = set; then : @@ -22549,6 +22552,7 @@ $as_echo "#define HAVE_GAS_SUBSECTION_ORDERING 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .weak" >&5 $as_echo_n "checking assembler for .weak... " >&6; } if test "${gcc_cv_as_weak+set}" = set; then : @@ -22584,6 +22588,7 @@ $as_echo "#define HAVE_GAS_WEAK 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .weakref" >&5 $as_echo_n "checking assembler for .weakref... " >&6; } if test "${gcc_cv_as_weakref+set}" = set; then : @@ -22619,6 +22624,7 @@ $as_echo "#define HAVE_GAS_WEAKREF 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .nsubspa comdat" >&5 $as_echo_n "checking assembler for .nsubspa comdat... " >&6; } if test "${gcc_cv_as_nsubspa_comdat+set}" = set; then : @@ -22655,6 +22661,7 @@ $as_echo "#define HAVE_GAS_NSUBSPA_COMDAT 1" >>confdefs.h fi + # .hidden needs to be supported in both the assembler and the linker, # because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN. # This is irritatingly difficult to feature test for; we have to check the @@ -22702,6 +22709,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_hidden" >&5 $as_echo "$gcc_cv_as_hidden" >&6; } + case "${target}" in *-*-darwin*) # Darwin as has some visibility support, though with a different syntax. @@ -23157,6 +23165,11 @@ if test $gcc_cv_as_leb128 = yes; then $as_echo "#define HAVE_AS_LEB128 1" >>confdefs.h fi +if test $gcc_cv_as_leb128 != yes; then + +$as_echo "#define HAVE_AS_LEB128 0" >>confdefs.h + +fi # Check if we have assembler support for unwind directives. { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for cfi directives" >&5 @@ -23236,6 +23249,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_cfi_directive" >&5 $as_echo "$gcc_cv_as_cfi_directive" >&6; } + if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for working cfi advance" >&5 $as_echo_n "checking assembler for working cfi advance... " >&6; } @@ -23273,6 +23287,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_cfi_advance_working" >&5 $as_echo "$gcc_cv_as_cfi_advance_working" >&6; } + else # no objdump, err on the side of caution gcc_cv_as_cfi_advance_working=no @@ -23316,6 +23331,7 @@ fi $as_echo "$gcc_cv_as_cfi_personality_directive" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_GAS_CFI_PERSONALITY_DIRECTIVE `if test $gcc_cv_as_cfi_personality_directive = yes; then echo 1; else echo 0; fi` @@ -23368,6 +23384,7 @@ $as_echo "$gcc_cv_as_cfi_sections_directive" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_GAS_CFI_SECTIONS_DIRECTIVE `if test $gcc_cv_as_cfi_sections_directive = yes; then echo 1; else echo 0; fi` @@ -23471,6 +23488,7 @@ fi $as_echo "$gcc_cv_as_eh_frame" >&6; } + if test $gcc_cv_as_eh_frame = buggy; then $as_echo "#define USE_AS_TRADITIONAL_FORMAT 1" >>confdefs.h @@ -23508,6 +23526,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_shf_merge" >&5 $as_echo "$gcc_cv_as_shf_merge" >&6; } + if test $gcc_cv_as_shf_merge = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for section merging support" >&5 $as_echo_n "checking assembler for section merging support... " >&6; } @@ -23540,6 +23559,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_shf_merge" >&5 $as_echo "$gcc_cv_as_shf_merge" >&6; } + fi cat >>confdefs.h <<_ACEOF @@ -23578,6 +23598,7 @@ $as_echo "#define HAVE_AS_STABS_DIRECTIVE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for COMDAT group support (GNU as)" >&5 $as_echo_n "checking assembler for COMDAT group support (GNU as)... " >&6; } if test "${gcc_cv_as_comdat_group+set}" = set; then : @@ -23609,6 +23630,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_comdat_group" >&5 $as_echo "$gcc_cv_as_comdat_group" >&6; } + if test $gcc_cv_as_comdat_group = yes; then gcc_cv_as_comdat_group_percent=no gcc_cv_as_comdat_group_group=no @@ -23644,6 +23666,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_comdat_group_percent" >&5 $as_echo "$gcc_cv_as_comdat_group_percent" >&6; } + if test $gcc_cv_as_comdat_group_percent = yes; then gcc_cv_as_comdat_group_group=no else @@ -23694,6 +23717,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_comdat_group_group" >&5 $as_echo "$gcc_cv_as_comdat_group_group" >&6; } + ;; esac if test -z "${gcc_cv_as_comdat_group_group+set}"; then @@ -23801,6 +23825,7 @@ $as_echo "#define HAVE_GAS_DISCRIMINATOR 1" >>confdefs.h fi + # Thread-local storage - the check is heavily parameterized. conftest_s= tls_first_major= @@ -24298,6 +24323,7 @@ $as_echo "$gcc_cv_as_tls" >&6; } if test $gcc_cv_as_tls = yes; then set_have_as_tls=yes fi + fi if test $set_have_as_tls = yes ; then @@ -24471,6 +24497,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_aarch64_mabi" >&5 $as_echo "$gcc_cv_as_aarch64_mabi" >&6; } + if test x$gcc_cv_as_aarch64_mabi = xyes; then $as_echo "#define HAVE_AS_MABI_OPTION 1" >>confdefs.h @@ -24530,6 +24557,7 @@ if test $gcc_cv_as_aarch64_picreloc = yes; then $as_echo "#define HAVE_AS_SMALL_PIC_RELOCS 1" >>confdefs.h fi + # Enable default workaround for AArch64 Cortex-A53 erratum 835769. # Check whether --enable-fix-cortex-a53-835769 was given. if test "${enable_fix_cortex_a53_835769+set}" = set; then : @@ -24618,6 +24646,7 @@ if test $gcc_cv_as_alpha_explicit_relocs = yes; then $as_echo "#define HAVE_AS_EXPLICIT_RELOCS 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for jsrdirect relocation support" >&5 $as_echo_n "checking assembler for jsrdirect relocation support... " >&6; } if test "${gcc_cv_as_alpha_jsrdirect_relocs+set}" = set; then : @@ -24655,6 +24684,7 @@ if test $gcc_cv_as_alpha_jsrdirect_relocs = yes; then $as_echo "#define HAVE_AS_JSRDIRECT_RELOCS 1" >>confdefs.h fi + ;; avr-*-*) @@ -24689,6 +24719,7 @@ $as_echo "#define HAVE_AS_AVR_MLINK_RELAX_OPTION 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mrmw option" >&5 $as_echo_n "checking assembler for -mrmw option... " >&6; } if test "${gcc_cv_as_avr_mrmw+set}" = set; then : @@ -24719,6 +24750,7 @@ if test $gcc_cv_as_avr_mrmw = yes; then $as_echo "#define HAVE_AS_AVR_MRMW_OPTION 1" >>confdefs.h fi + ;; cris-*-*) @@ -24756,6 +24788,7 @@ if test $gcc_cv_as_cris_no_mul_bug = yes; then $as_echo "#define HAVE_AS_NO_MUL_BUG_ABORT_OPTION 1" >>confdefs.h fi + ;; sparc*-*-*) @@ -24790,6 +24823,7 @@ $as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -relax option" >&5 $as_echo_n "checking assembler for -relax option... " >&6; } if test "${gcc_cv_as_sparc_relax+set}" = set; then : @@ -24821,6 +24855,7 @@ $as_echo "#define HAVE_AS_RELAX_OPTION 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTDATA_OP relocs" >&5 $as_echo_n "checking assembler for GOTDATA_OP relocs... " >&6; } if test "${gcc_cv_as_sparc_gotdata_op+set}" = set; then : @@ -24870,6 +24905,7 @@ $as_echo "#define HAVE_AS_SPARC_GOTDATA_OP 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for unaligned pcrel relocs" >&5 $as_echo_n "checking assembler for unaligned pcrel relocs... " >&6; } if test "${gcc_cv_as_sparc_ua_pcrel+set}" = set; then : @@ -24960,7 +24996,9 @@ $as_echo "#define HAVE_AS_SPARC_UA_PCREL_HIDDEN 1" >>confdefs.h fi -fi # unaligned pcrel relocs + +fi + # unaligned pcrel relocs { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for offsetable %lo()" >&5 $as_echo_n "checking assembler for offsetable %lo()... " >&6; } @@ -24999,6 +25037,7 @@ $as_echo "#define HAVE_AS_OFFSETABLE_LO10 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for FMAF, HPC, and VIS 3.0 instructions" >&5 $as_echo_n "checking assembler for FMAF, HPC, and VIS 3.0 instructions... " >&6; } if test "${gcc_cv_as_sparc_fmaf+set}" = set; then : @@ -25037,6 +25076,7 @@ $as_echo "#define HAVE_AS_FMAF_HPC_VIS3 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for SPARC4 instructions" >&5 $as_echo_n "checking assembler for SPARC4 instructions... " >&6; } if test "${gcc_cv_as_sparc_sparc4+set}" = set; then : @@ -25079,6 +25119,7 @@ $as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for SPARC5 and VIS 4.0 instructions" >&5 $as_echo_n "checking assembler for SPARC5 and VIS 4.0 instructions... " >&6; } if test "${gcc_cv_as_sparc_sparc5+set}" = set; then : @@ -25115,6 +25156,7 @@ $as_echo "#define HAVE_AS_SPARC5_VIS4 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5 $as_echo_n "checking assembler for LEON instructions... " >&6; } if test "${gcc_cv_as_sparc_leon+set}" = set; then : @@ -25151,6 +25193,7 @@ if test $gcc_cv_as_sparc_leon = yes; then $as_echo "#define HAVE_AS_LEON 1" >>confdefs.h fi + ;; i[34567]86-*-* | x86_64-*-*) @@ -25216,6 +25259,7 @@ fi $as_echo "$gcc_cv_as_comm_has_align" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_GAS_ALIGNED_COMM `if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi` _ACEOF @@ -25262,6 +25306,7 @@ if test $gcc_cv_as_ix86_pe_secrel32 = yes; then $as_echo "#define HAVE_GAS_PE_SECREL32_RELOC 1" >>confdefs.h fi + # Test if the assembler supports the extended form of the .section # directive that specifies section alignment. LTO support uses this, # but normally only after installation, so we warn but don't fail the @@ -25296,6 +25341,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_section_has_align" >&5 $as_echo "$gcc_cv_as_section_has_align" >&6; } + if test x$gcc_cv_as_section_has_align != xyes; then case ",$enable_languages," in *,lto,*) @@ -25341,6 +25387,7 @@ fi $as_echo "$gcc_cv_as_section_has_e" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_GAS_SECTION_EXCLUDE `if test $gcc_cv_as_section_has_e = yes; then echo 1; else echo 0; fi` _ACEOF @@ -25377,6 +25424,7 @@ $as_echo "#define HAVE_AS_IX86_FILDS 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for fildq and fistpq mnemonics" >&5 $as_echo_n "checking assembler for fildq and fistpq mnemonics... " >&6; } if test "${gcc_cv_as_ix86_fildq+set}" = set; then : @@ -25408,6 +25456,7 @@ $as_echo "#define HAVE_AS_IX86_FILDQ 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for cmov syntax" >&5 $as_echo_n "checking assembler for cmov syntax... " >&6; } if test "${gcc_cv_as_ix86_cmov_sun_syntax+set}" = set; then : @@ -25439,6 +25488,7 @@ $as_echo "#define HAVE_AS_IX86_CMOV_SUN_SYNTAX 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ffreep mnemonic" >&5 $as_echo_n "checking assembler for ffreep mnemonic... " >&6; } if test "${gcc_cv_as_ix86_ffreep+set}" = set; then : @@ -25470,6 +25520,7 @@ $as_echo "#define HAVE_AS_IX86_FFREEP 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .quad directive" >&5 $as_echo_n "checking assembler for .quad directive... " >&6; } if test "${gcc_cv_as_ix86_quad+set}" = set; then : @@ -25501,6 +25552,7 @@ $as_echo "#define HAVE_AS_IX86_QUAD 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for sahf mnemonic" >&5 $as_echo_n "checking assembler for sahf mnemonic... " >&6; } if test "${gcc_cv_as_ix86_sahf+set}" = set; then : @@ -25533,6 +25585,7 @@ $as_echo "#define HAVE_AS_IX86_SAHF 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for interunit movq mnemonic" >&5 $as_echo_n "checking assembler for interunit movq mnemonic... " >&6; } if test "${gcc_cv_as_ix86_interunit_movq+set}" = set; then : @@ -25562,6 +25615,7 @@ fi $as_echo "$gcc_cv_as_ix86_interunit_movq" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_IX86_INTERUNIT_MOVQ `if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 0; fi` _ACEOF @@ -25598,6 +25652,7 @@ $as_echo "#define HAVE_AS_IX86_HLE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for swap suffix" >&5 $as_echo_n "checking assembler for swap suffix... " >&6; } if test "${gcc_cv_as_ix86_swap+set}" = set; then : @@ -25629,6 +25684,7 @@ $as_echo "#define HAVE_AS_IX86_SWAP 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for different section symbol subtraction" >&5 $as_echo_n "checking assembler for different section symbol subtraction... " >&6; } if test "${gcc_cv_as_ix86_diff_sect_delta+set}" = set; then : @@ -25666,6 +25722,7 @@ $as_echo "#define HAVE_AS_IX86_DIFF_SECT_DELTA 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for rep and lock prefix" >&5 $as_echo_n "checking assembler for rep and lock prefix... " >&6; } if test "${gcc_cv_as_ix86_rep_lock_prefix+set}" = set; then : @@ -25703,6 +25760,7 @@ $as_echo "#define HAVE_AS_IX86_REP_LOCK_PREFIX 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5 $as_echo_n "checking assembler for ud2 mnemonic... " >&6; } if test "${gcc_cv_as_ix86_ud2+set}" = set; then : @@ -25734,6 +25792,7 @@ $as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h fi + # Enforce 32-bit output with gas and gld. if test x$gas = xyes; then as_ix86_gas_32_opt="--32" @@ -25781,6 +25840,7 @@ $as_echo "#define HAVE_AS_IX86_TLSGDPLT 1" >>confdefs.h fi + conftest_s=' .section .tdata,"aw'$tls_section_flag'",@progbits tls_ld: @@ -25818,6 +25878,7 @@ fi $as_echo "$gcc_cv_as_ix86_tlsldmplt" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_IX86_TLSLDMPLT `if test $gcc_cv_as_ix86_tlsldmplt = yes; then echo 1; else echo 0; fi` _ACEOF @@ -25868,6 +25929,7 @@ fi $as_echo "$gcc_cv_as_ix86_tlsldm" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_IX86_TLSLDM `if test $gcc_cv_as_ix86_tlsldm = yes; then echo 1; else echo 0; fi` _ACEOF @@ -25921,6 +25983,7 @@ fi $as_echo "$gcc_cv_as_ix86_got32x" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_IX86_GOT32X `if test x"$gcc_cv_as_ix86_got32x" = xyes; then echo 1; else echo 0; fi` _ACEOF @@ -25961,6 +26024,7 @@ fi $as_echo "$gcc_cv_as_ix86_gotoff_in_data" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_GOTOFF_IN_DATA `if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi` _ACEOF @@ -26015,6 +26079,7 @@ fi $as_echo "$gcc_cv_as_ix86_tls_get_addr_via_got" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_IX86_TLS_GET_ADDR_GOT `if test x"$gcc_cv_as_ix86_tls_get_addr_via_got" = xyes; then echo 1; else echo 0; fi` _ACEOF @@ -26060,6 +26125,7 @@ $as_echo "#define HAVE_AS_LTOFFX_LDXMOV_RELOCS 1" >>confdefs.h fi + ;; powerpc*-*-*) @@ -26092,6 +26158,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_machine_directive" >&5 $as_echo "$gcc_cv_as_machine_directive" >&6; } + if test x$gcc_cv_as_machine_directive != xyes; then echo "*** This target requires an assembler supporting \".machine\"" >&2 echo you can get it from: ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2 @@ -26146,6 +26213,7 @@ $as_echo "#define HAVE_AS_MFCRF 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr5" .csect .text[PR] @@ -26190,6 +26258,7 @@ $as_echo "#define HAVE_AS_POPCNTB 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr5x" .csect .text[PR] @@ -26234,6 +26303,7 @@ $as_echo "#define HAVE_AS_FPRND 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr6" .csect .text[PR] @@ -26278,6 +26348,7 @@ $as_echo "#define HAVE_AS_MFPGPR 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .csect .text[PR] LCF..0: @@ -26326,6 +26397,7 @@ $as_echo "#define HAVE_AS_REL16 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr6" .csect .text[PR] @@ -26370,6 +26442,7 @@ $as_echo "#define HAVE_AS_CMPB 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr6" .csect .text[PR] @@ -26414,6 +26487,7 @@ $as_echo "#define HAVE_AS_DFP 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr7" .csect .text[PR] @@ -26458,6 +26532,7 @@ $as_echo "#define HAVE_AS_VSX 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr7" .csect .text[PR] @@ -26502,6 +26577,7 @@ $as_echo "#define HAVE_AS_POPCNTD 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr8" .csect .text[PR]';; @@ -26544,6 +26620,7 @@ $as_echo "#define HAVE_AS_POWER8 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "pwr9" .csect .text[PR]';; @@ -26586,6 +26663,7 @@ $as_echo "#define HAVE_AS_POWER9 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .csect .text[PR] lwsync';; @@ -26628,6 +26706,7 @@ $as_echo "#define HAVE_AS_LWSYNC 1" >>confdefs.h fi + case $target in *-*-aix*) conftest_s=' .machine "476" .csect .text[PR] @@ -26672,6 +26751,7 @@ $as_echo "#define HAVE_AS_DCI 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .gnu_attribute support" >&5 $as_echo_n "checking assembler for .gnu_attribute support... " >&6; } if test "${gcc_cv_as_powerpc_gnu_attribute+set}" = set; then : @@ -26707,6 +26787,7 @@ $as_echo "#define HAVE_AS_GNU_ATTRIBUTE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for tls marker support" >&5 $as_echo_n "checking assembler for tls marker support... " >&6; } if test "${gcc_cv_as_powerpc_tls_markers+set}" = set; then : @@ -26742,6 +26823,7 @@ $as_echo "#define HAVE_AS_TLS_MARKERS 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for prologue entry point marker support" >&5 $as_echo_n "checking assembler for prologue entry point marker support... " >&6; } if test "${gcc_cv_as_powerpc_entry_markers+set}" = set; then : @@ -26777,6 +26859,7 @@ $as_echo "#define HAVE_AS_ENTRY_MARKERS 1" >>confdefs.h fi + case $target in *-*-aix*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for AIX .ref support" >&5 @@ -26819,6 +26902,7 @@ $as_echo "#define HAVE_AS_REF 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for AIX DWARF location lists section support" >&5 $as_echo_n "checking assembler for AIX DWARF location lists section support... " >&6; } if test "${gcc_cv_as_aix_dwloc+set}" = set; then : @@ -26856,6 +26940,7 @@ if test $gcc_cv_as_aix_dwloc = yes; then $as_echo "#define HAVE_XCOFF_DWARF_EXTRAS 1" >>confdefs.h fi + ;; esac ;; @@ -26897,6 +26982,7 @@ if test $gcc_cv_as_mips_explicit_relocs = yes; then fi fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mno-shared support" >&5 $as_echo_n "checking assembler for -mno-shared support... " >&6; } if test "${gcc_cv_as_mips_no_shared+set}" = set; then : @@ -26932,6 +27018,7 @@ $as_echo "#define HAVE_AS_NO_SHARED 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .gnu_attribute support" >&5 $as_echo_n "checking assembler for .gnu_attribute support... " >&6; } if test "${gcc_cv_as_mips_gnu_attribute+set}" = set; then : @@ -26967,6 +27054,7 @@ $as_echo "#define HAVE_AS_GNU_ATTRIBUTE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .module support" >&5 $as_echo_n "checking assembler for .module support... " >&6; } if test "${gcc_cv_as_mips_dot_module+set}" = set; then : @@ -26998,6 +27086,7 @@ if test $gcc_cv_as_mips_dot_module = yes; then $as_echo "#define HAVE_AS_DOT_MODULE 1" >>confdefs.h fi + if test x$gcc_cv_as_mips_dot_module = xno \ && test x$with_fp_32 != x; then as_fn_error "Requesting --with-fp-32= requires assembler support for .module." "$LINENO" 5 @@ -27034,6 +27123,7 @@ $as_echo "#define HAVE_GAS_MICROMIPS 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .dtprelword support" >&5 $as_echo_n "checking assembler for .dtprelword support... " >&6; } if test "${gcc_cv_as_mips_dtprelword+set}" = set; then : @@ -27073,6 +27163,7 @@ $as_echo "#define HAVE_AS_DTPRELWORD 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for DSPR1 mult with four accumulators support" >&5 $as_echo_n "checking assembler for DSPR1 mult with four accumulators support... " >&6; } if test "${gcc_cv_as_mips_dspr1_mult+set}" = set; then : @@ -27112,6 +27203,7 @@ $as_echo "#define HAVE_AS_DSPR1_MULT 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker for explicit JALR relocation" >&5 $as_echo_n "checking assembler and linker for explicit JALR relocation... " >&6; } gcc_cv_as_ld_jalr_reloc=no @@ -27231,6 +27323,7 @@ if test $gcc_cv_as_mips_nan = yes; then $as_echo "#define HAVE_AS_NAN 1" >>confdefs.h fi + if test x$gcc_cv_as_mips_nan = xno \ && test x$with_nan != x; then as_fn_error "Requesting --with-nan= requires assembler support for -mnan=" "$LINENO" 5 @@ -27271,6 +27364,7 @@ if test $gcc_cv_as_s390_gnu_attribute = yes; then $as_echo "#define HAVE_AS_GNU_ATTRIBUTE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .machine and .machinemode support" >&5 $as_echo_n "checking assembler for .machine and .machinemode support... " >&6; } if test "${gcc_cv_as_s390_machine_machinemode+set}" = set; then : @@ -27308,6 +27402,7 @@ if test $gcc_cv_as_s390_machine_machinemode = yes; then $as_echo "#define HAVE_AS_MACHINE_MACHINEMODE 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for architecture modifiers support" >&5 $as_echo_n "checking assembler for architecture modifiers support... " >&6; } if test "${gcc_cv_as_s390_architecture_modifiers+set}" = set; then : @@ -27342,6 +27437,7 @@ if test $gcc_cv_as_s390_architecture_modifiers = yes; then $as_echo "#define HAVE_AS_ARCHITECTURE_MODIFIERS 1" >>confdefs.h fi + ;; esac @@ -27422,6 +27518,7 @@ fi $as_echo "$gcc_cv_as_dwarf2_debug_line" >&6; } + # The .debug_line file table must be in the exact order that # we specified the files, since these indices are also used # by DW_AT_decl_file. Approximate this test by testing if @@ -27454,6 +27551,7 @@ fi $as_echo "$gcc_cv_as_dwarf2_file_buggy" >&6; } + if test $gcc_cv_as_dwarf2_debug_line = yes \ && test $gcc_cv_as_dwarf2_file_buggy = no; then @@ -27497,6 +27595,7 @@ $as_echo "#define HAVE_AS_GDWARF2_DEBUG_FLAG 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for --gstabs option" >&5 $as_echo_n "checking assembler for --gstabs option... " >&6; } if test "${gcc_cv_as_gstabs_flag+set}" = set; then : @@ -27533,6 +27632,7 @@ $as_echo "#define HAVE_AS_GSTABS_DEBUG_FLAG 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for --debug-prefix-map option" >&5 $as_echo_n "checking assembler for --debug-prefix-map option... " >&6; } if test "${gcc_cv_as_debug_prefix_map_flag+set}" = set; then : @@ -27567,6 +27667,7 @@ if test $gcc_cv_as_debug_prefix_map_flag = yes; then $as_echo "#define HAVE_AS_DEBUG_PREFIX_MAP 1" >>confdefs.h fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for compressed debug sections" >&5 @@ -27617,6 +27718,7 @@ fi $as_echo "$gcc_cv_as_compress_debug" >&6; } + cat >>confdefs.h <<_ACEOF #define HAVE_AS_COMPRESS_DEBUG $gcc_cv_as_compress_debug _ACEOF @@ -27663,6 +27765,7 @@ $as_echo "#define HAVE_GAS_LCOMM_WITH_ALIGNMENT 1" >>confdefs.h fi + if test x$with_sysroot = x && test x$host = x$target \ && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \ && test "$prefix" != "NONE"; then @@ -27759,6 +27862,7 @@ if test $glibc_version_major -gt 2 \ fi fi + fi if test x$enable_gnu_unique_object = xyes; then diff --git a/gcc/configure.ac b/gcc/configure.ac index 2f9b859..140b9f9 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2753,6 +2753,8 @@ L2:], fi fi]], [AC_DEFINE(HAVE_AS_LEB128, 1, + [Define if your assembler supports .sleb128 and .uleb128.])], + [AC_DEFINE(HAVE_AS_LEB128, 0, [Define if your assembler supports .sleb128 and .uleb128.])]) # Check if we have assembler support for unwind directives. diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c index 2e0aae4..922a0c1 100644 --- a/gcc/dwarf2asm.c +++ b/gcc/dwarf2asm.c @@ -622,53 +622,55 @@ dw2_asm_output_data_uleb128 (unsigned HOST_WIDE_INT value, va_start (ap, comment); -#ifdef HAVE_AS_LEB128 - fputs ("\t.uleb128 ", asm_out_file); - fprint_whex (asm_out_file, value); - - if (flag_debug_asm && comment) + if (HAVE_AS_LEB128) { - fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); - vfprintf (asm_out_file, comment, ap); + fputs ("\t.uleb128 ", asm_out_file); + fprint_whex (asm_out_file, value); + + if (flag_debug_asm && comment) + { + fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); + vfprintf (asm_out_file, comment, ap); + } } -#else - { - unsigned HOST_WIDE_INT work = value; - const char *byte_op = targetm.asm_out.byte_op; - - if (byte_op) - fputs (byte_op, asm_out_file); - do - { - int byte = (work & 0x7f); - work >>= 7; - if (work != 0) - /* More bytes to follow. */ - byte |= 0x80; - - if (byte_op) - { - fprintf (asm_out_file, "%#x", byte); - if (work != 0) - fputc (',', asm_out_file); - } - else - assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); - } - while (work != 0); - - if (flag_debug_asm) + else { - fprintf (asm_out_file, "\t%s uleb128 " HOST_WIDE_INT_PRINT_HEX, - ASM_COMMENT_START, value); - if (comment) + unsigned HOST_WIDE_INT work = value; + const char *byte_op = targetm.asm_out.byte_op; + + if (byte_op) + fputs (byte_op, asm_out_file); + do { - fputs ("; ", asm_out_file); - vfprintf (asm_out_file, comment, ap); + int byte = (work & 0x7f); + work >>= 7; + if (work != 0) + /* More bytes to follow. */ + byte |= 0x80; + + if (byte_op) + { + fprintf (asm_out_file, "%#x", byte); + if (work != 0) + fputc (',', asm_out_file); + } + else + assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); + } + while (work != 0); + + if (flag_debug_asm) + { + fprintf (asm_out_file, "\t%s uleb128 " HOST_WIDE_INT_PRINT_HEX, + ASM_COMMENT_START, value); + if (comment) + { + fputs ("; ", asm_out_file); + vfprintf (asm_out_file, comment, ap); + } } } - } -#endif + putc ('\n', asm_out_file); va_end (ap); @@ -707,55 +709,57 @@ dw2_asm_output_data_sleb128 (HOST_WIDE_INT value, va_start (ap, comment); -#ifdef HAVE_AS_LEB128 - fprintf (asm_out_file, "\t.sleb128 " HOST_WIDE_INT_PRINT_DEC, value); - - if (flag_debug_asm && comment) + if (HAVE_AS_LEB128) { - fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); - vfprintf (asm_out_file, comment, ap); + fprintf (asm_out_file, "\t.sleb128 " HOST_WIDE_INT_PRINT_DEC, value); + + if (flag_debug_asm && comment) + { + fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); + vfprintf (asm_out_file, comment, ap); + } } -#else - { - HOST_WIDE_INT work = value; - int more, byte; - const char *byte_op = targetm.asm_out.byte_op; - - if (byte_op) - fputs (byte_op, asm_out_file); - do - { - byte = (work & 0x7f); - /* arithmetic shift */ - work >>= 7; - more = !((work == 0 && (byte & 0x40) == 0) - || (work == -1 && (byte & 0x40) != 0)); - if (more) - byte |= 0x80; - - if (byte_op) - { - fprintf (asm_out_file, "%#x", byte); - if (more) - fputc (',', asm_out_file); - } - else - assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); - } - while (more); - - if (flag_debug_asm) + else { - fprintf (asm_out_file, "\t%s sleb128 " HOST_WIDE_INT_PRINT_DEC, - ASM_COMMENT_START, value); - if (comment) + HOST_WIDE_INT work = value; + int more, byte; + const char *byte_op = targetm.asm_out.byte_op; + + if (byte_op) + fputs (byte_op, asm_out_file); + do { - fputs ("; ", asm_out_file); - vfprintf (asm_out_file, comment, ap); + byte = (work & 0x7f); + /* arithmetic shift */ + work >>= 7; + more = !((work == 0 && (byte & 0x40) == 0) + || (work == -1 && (byte & 0x40) != 0)); + if (more) + byte |= 0x80; + + if (byte_op) + { + fprintf (asm_out_file, "%#x", byte); + if (more) + fputc (',', asm_out_file); + } + else + assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); + } + while (more); + + if (flag_debug_asm) + { + fprintf (asm_out_file, "\t%s sleb128 " HOST_WIDE_INT_PRINT_DEC, + ASM_COMMENT_START, value); + if (comment) + { + fputs ("; ", asm_out_file); + vfprintf (asm_out_file, comment, ap); + } } } - } -#endif + fputc ('\n', asm_out_file); va_end (ap); @@ -770,14 +774,12 @@ dw2_asm_output_delta_uleb128 (const char *lab1 ATTRIBUTE_UNUSED, va_start (ap, comment); -#ifdef HAVE_AS_LEB128 + gcc_assert (HAVE_AS_LEB128); + fputs ("\t.uleb128 ", asm_out_file); assemble_name (asm_out_file, lab1); putc ('-', asm_out_file); assemble_name (asm_out_file, lab2); -#else - gcc_unreachable (); -#endif if (flag_debug_asm && comment) { @@ -800,14 +802,12 @@ dw2_asm_output_delta_sleb128 (const char *lab1 ATTRIBUTE_UNUSED, va_start (ap, comment); -#ifdef HAVE_AS_LEB128 + gcc_assert (HAVE_AS_LEB128); + fputs ("\t.sleb128 ", asm_out_file); assemble_name (asm_out_file, lab1); putc ('-', asm_out_file); assemble_name (asm_out_file, lab2); -#else - gcc_unreachable (); -#endif if (flag_debug_asm && comment) { diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index f9ec090..58a5e1a 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -9550,10 +9550,8 @@ output_loc_list (dw_loc_list_ref list_head) ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); dw_loc_list_ref curr = list_head; -#ifdef HAVE_AS_LEB128 const char *last_section = NULL; const char *base_label = NULL; -#endif /* Walk the location list, and output each range + expression. */ for (curr = list_head; curr != NULL; curr = curr->dw_loc_next) @@ -9588,8 +9586,7 @@ output_loc_list (dw_loc_list_ref list_head) "Location list length (%s)", list_head->ll_symbol); } -#ifdef HAVE_AS_LEB128 - else if (!have_multiple_function_sections) + else if (!have_multiple_function_sections && HAVE_AS_LEB128) { /* If all code is in .text section, the base address is already provided by the CU attributes. Use @@ -9605,7 +9602,7 @@ output_loc_list (dw_loc_list_ref list_head) "Location list end address (%s)", list_head->ll_symbol); } - else + else if (HAVE_AS_LEB128) { /* Otherwise, find out how many consecutive entries could share the same base entry. If just one, emit DW_LLE_start_length, @@ -9668,7 +9665,6 @@ output_loc_list (dw_loc_list_ref list_head) "(%s)", list_head->ll_symbol); } } -#else /* The assembler does not support .uleb128 directive. Emit DW_LLE_start_end with a pair of absolute addresses. */ else @@ -9683,7 +9679,6 @@ output_loc_list (dw_loc_list_ref list_head) "Location list end address (%s)", list_head->ll_symbol); } -#endif } else if (dwarf_split_debug_info) { @@ -11054,9 +11049,7 @@ output_rnglists (void) dw_ranges *r; char l1[MAX_ARTIFICIAL_LABEL_BYTES]; char l2[MAX_ARTIFICIAL_LABEL_BYTES]; -#ifdef HAVE_AS_LEB128 char basebuf[MAX_ARTIFICIAL_LABEL_BYTES]; -#endif switch_to_section (debug_ranges_section); ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label); @@ -11090,10 +11083,8 @@ output_rnglists (void) } const char *lab = ""; -#ifdef HAVE_AS_LEB128 unsigned int len = vec_safe_length (ranges_table); const char *base = NULL; -#endif FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r) { int block_num = r->num; @@ -11103,10 +11094,8 @@ output_rnglists (void) ASM_OUTPUT_LABEL (asm_out_file, r->label); lab = r->label; } -#ifdef HAVE_AS_LEB128 - if (r->label || r->maybe_new_sec) + if (HAVE_AS_LEB128 && (r->label || r->maybe_new_sec)) base = NULL; -#endif if (block_num > 0) { char blabel[MAX_ARTIFICIAL_LABEL_BYTES]; @@ -11115,62 +11104,65 @@ output_rnglists (void) ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num); ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num); -#ifdef HAVE_AS_LEB128 - /* If all code is in the text section, then the compilation - unit base address defaults to DW_AT_low_pc, which is the - base of the text section. */ - if (!have_multiple_function_sections) + if (HAVE_AS_LEB128) { - dw2_asm_output_data (1, DW_RLE_offset_pair, - "DW_RLE_offset_pair (%s)", lab); - dw2_asm_output_delta_uleb128 (blabel, text_section_label, - "Range begin address (%s)", lab); - dw2_asm_output_delta_uleb128 (elabel, text_section_label, - "Range end address (%s)", lab); - continue; - } - if (base == NULL) - { - dw_ranges *r2 = NULL; - if (i < len - 1) - r2 = &(*ranges_table)[i + 1]; - if (r2 - && r2->num != 0 - && r2->label == NULL - && !r2->maybe_new_sec) + /* If all code is in the text section, then the compilation + unit base address defaults to DW_AT_low_pc, which is the + base of the text section. */ + if (!have_multiple_function_sections) { - dw2_asm_output_data (1, DW_RLE_base_address, - "DW_RLE_base_address (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, - "Base address (%s)", lab); - strcpy (basebuf, blabel); - base = basebuf; + dw2_asm_output_data (1, DW_RLE_offset_pair, + "DW_RLE_offset_pair (%s)", lab); + dw2_asm_output_delta_uleb128 (blabel, text_section_label, + "Range begin address (%s)", lab); + dw2_asm_output_delta_uleb128 (elabel, text_section_label, + "Range end address (%s)", lab); + continue; + } + if (base == NULL) + { + dw_ranges *r2 = NULL; + if (i < len - 1) + r2 = &(*ranges_table)[i + 1]; + if (r2 + && r2->num != 0 + && r2->label == NULL + && !r2->maybe_new_sec) + { + dw2_asm_output_data (1, DW_RLE_base_address, + "DW_RLE_base_address (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + "Base address (%s)", lab); + strcpy (basebuf, blabel); + base = basebuf; + } } + if (base) + { + dw2_asm_output_data (1, DW_RLE_offset_pair, + "DW_RLE_offset_pair (%s)", lab); + dw2_asm_output_delta_uleb128 (blabel, base, + "Range begin address (%s)", lab); + dw2_asm_output_delta_uleb128 (elabel, base, + "Range end address (%s)", lab); + continue; + } + dw2_asm_output_data (1, DW_RLE_start_length, + "DW_RLE_start_length (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + "Range begin address (%s)", lab); + dw2_asm_output_delta_uleb128 (elabel, blabel, + "Range length (%s)", lab); } - if (base) + else { - dw2_asm_output_data (1, DW_RLE_offset_pair, - "DW_RLE_offset_pair (%s)", lab); - dw2_asm_output_delta_uleb128 (blabel, base, - "Range begin address (%s)", lab); - dw2_asm_output_delta_uleb128 (elabel, base, - "Range end address (%s)", lab); - continue; + dw2_asm_output_data (1, DW_RLE_start_end, + "DW_RLE_start_end (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + "Range begin address (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, + "Range end address (%s)", lab); } - dw2_asm_output_data (1, DW_RLE_start_length, - "DW_RLE_start_length (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, - "Range begin address (%s)", lab); - dw2_asm_output_delta_uleb128 (elabel, blabel, - "Range length (%s)", lab); -#else - dw2_asm_output_data (1, DW_RLE_start_end, - "DW_RLE_start_end (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, - "Range begin address (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, - "Range end address (%s)", lab); -#endif } /* Negative block_num stands for an index into ranges_by_label. */ @@ -11182,21 +11174,24 @@ output_rnglists (void) if (!have_multiple_function_sections) gcc_unreachable (); -#ifdef HAVE_AS_LEB128 - dw2_asm_output_data (1, DW_RLE_start_length, - "DW_RLE_start_length (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, - "Range begin address (%s)", lab); - dw2_asm_output_delta_uleb128 (elabel, blabel, - "Range length (%s)", lab); -#else - dw2_asm_output_data (1, DW_RLE_start_end, - "DW_RLE_start_end (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, - "Range begin address (%s)", lab); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, - "Range end address (%s)", lab); -#endif + if (HAVE_AS_LEB128) + { + dw2_asm_output_data (1, DW_RLE_start_length, + "DW_RLE_start_length (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + "Range begin address (%s)", lab); + dw2_asm_output_delta_uleb128 (elabel, blabel, + "Range length (%s)", lab); + } + else + { + dw2_asm_output_data (1, DW_RLE_start_end, + "DW_RLE_start_end (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + "Range begin address (%s)", lab); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, + "Range end address (%s)", lab); + } } else dw2_asm_output_data (1, DW_RLE_end_of_list, diff --git a/gcc/except.c b/gcc/except.c index e811b56..2379fb3 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -216,10 +216,8 @@ static int add_call_site (rtx, int, int); static void push_uleb128 (vec<uchar, va_gc> **, unsigned int); static void push_sleb128 (vec<uchar, va_gc> **, int); -#ifndef HAVE_AS_LEB128 static int dw2_size_of_call_site_table (int); static int sjlj_size_of_call_site_table (void); -#endif static void dw2_output_call_site_table (int, int); static void sjlj_output_call_site_table (void); @@ -2696,7 +2694,6 @@ push_sleb128 (vec<uchar, va_gc> **data_area, int value) } -#ifndef HAVE_AS_LEB128 static int dw2_size_of_call_site_table (int section) { @@ -2731,7 +2728,6 @@ sjlj_size_of_call_site_table (void) return size; } -#endif static void dw2_output_call_site_table (int cs_format, int section) @@ -2921,13 +2917,10 @@ static void output_one_function_exception_table (int section) { int tt_format, cs_format, lp_format, i; -#ifdef HAVE_AS_LEB128 char ttype_label[32]; char cs_after_size_label[32]; char cs_end_label[32]; -#else int call_site_len; -#endif int have_tt_data; int tt_format_size = 0; @@ -2942,11 +2935,11 @@ output_one_function_exception_table (int section) else { tt_format = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1); -#ifdef HAVE_AS_LEB128 - ASM_GENERATE_INTERNAL_LABEL (ttype_label, - section ? "LLSDATTC" : "LLSDATT", - current_function_funcdef_no); -#endif + if (HAVE_AS_LEB128) + ASM_GENERATE_INTERNAL_LABEL (ttype_label, + section ? "LLSDATTC" : "LLSDATT", + current_function_funcdef_no); + tt_format_size = size_of_encoded_value (tt_format); assemble_align (tt_format_size * BITS_PER_UNIT); @@ -2972,86 +2965,93 @@ output_one_function_exception_table (int section) dw2_asm_output_data (1, tt_format, "@TType format (%s)", eh_data_format_name (tt_format)); -#ifndef HAVE_AS_LEB128 - if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) - call_site_len = sjlj_size_of_call_site_table (); - else - call_site_len = dw2_size_of_call_site_table (section); -#endif + if (!HAVE_AS_LEB128) + { + if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) + call_site_len = sjlj_size_of_call_site_table (); + else + call_site_len = dw2_size_of_call_site_table (section); + } /* A pc-relative 4-byte displacement to the @TType data. */ if (have_tt_data) { -#ifdef HAVE_AS_LEB128 - char ttype_after_disp_label[32]; - ASM_GENERATE_INTERNAL_LABEL (ttype_after_disp_label, - section ? "LLSDATTDC" : "LLSDATTD", - current_function_funcdef_no); - dw2_asm_output_delta_uleb128 (ttype_label, ttype_after_disp_label, - "@TType base offset"); - ASM_OUTPUT_LABEL (asm_out_file, ttype_after_disp_label); -#else - /* Ug. Alignment queers things. */ - unsigned int before_disp, after_disp, last_disp, disp; + if (HAVE_AS_LEB128) + { + char ttype_after_disp_label[32]; + ASM_GENERATE_INTERNAL_LABEL (ttype_after_disp_label, + section ? "LLSDATTDC" : "LLSDATTD", + current_function_funcdef_no); + dw2_asm_output_delta_uleb128 (ttype_label, ttype_after_disp_label, + "@TType base offset"); + ASM_OUTPUT_LABEL (asm_out_file, ttype_after_disp_label); + } + else + { + /* Ug. Alignment queers things. */ + unsigned int before_disp, after_disp, last_disp, disp; - before_disp = 1 + 1; - after_disp = (1 + size_of_uleb128 (call_site_len) - + call_site_len - + vec_safe_length (crtl->eh.action_record_data) - + (vec_safe_length (cfun->eh->ttype_data) - * tt_format_size)); + before_disp = 1 + 1; + after_disp = (1 + size_of_uleb128 (call_site_len) + + call_site_len + + vec_safe_length (crtl->eh.action_record_data) + + (vec_safe_length (cfun->eh->ttype_data) + * tt_format_size)); - disp = after_disp; - do - { - unsigned int disp_size, pad; + disp = after_disp; + do + { + unsigned int disp_size, pad; - last_disp = disp; - disp_size = size_of_uleb128 (disp); - pad = before_disp + disp_size + after_disp; - if (pad % tt_format_size) - pad = tt_format_size - (pad % tt_format_size); - else - pad = 0; - disp = after_disp + pad; - } - while (disp != last_disp); + last_disp = disp; + disp_size = size_of_uleb128 (disp); + pad = before_disp + disp_size + after_disp; + if (pad % tt_format_size) + pad = tt_format_size - (pad % tt_format_size); + else + pad = 0; + disp = after_disp + pad; + } + while (disp != last_disp); - dw2_asm_output_data_uleb128 (disp, "@TType base offset"); -#endif - } + dw2_asm_output_data_uleb128 (disp, "@TType base offset"); + } + } /* Indicate the format of the call-site offsets. */ -#ifdef HAVE_AS_LEB128 - cs_format = DW_EH_PE_uleb128; -#else - cs_format = DW_EH_PE_udata4; -#endif + if (HAVE_AS_LEB128) + cs_format = DW_EH_PE_uleb128; + else + cs_format = DW_EH_PE_udata4; + dw2_asm_output_data (1, cs_format, "call-site format (%s)", eh_data_format_name (cs_format)); -#ifdef HAVE_AS_LEB128 - ASM_GENERATE_INTERNAL_LABEL (cs_after_size_label, - section ? "LLSDACSBC" : "LLSDACSB", - current_function_funcdef_no); - ASM_GENERATE_INTERNAL_LABEL (cs_end_label, - section ? "LLSDACSEC" : "LLSDACSE", - current_function_funcdef_no); - dw2_asm_output_delta_uleb128 (cs_end_label, cs_after_size_label, - "Call-site table length"); - ASM_OUTPUT_LABEL (asm_out_file, cs_after_size_label); - if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) - sjlj_output_call_site_table (); - else - dw2_output_call_site_table (cs_format, section); - ASM_OUTPUT_LABEL (asm_out_file, cs_end_label); -#else - dw2_asm_output_data_uleb128 (call_site_len, "Call-site table length"); - if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) - sjlj_output_call_site_table (); + if (HAVE_AS_LEB128) + { + ASM_GENERATE_INTERNAL_LABEL (cs_after_size_label, + section ? "LLSDACSBC" : "LLSDACSB", + current_function_funcdef_no); + ASM_GENERATE_INTERNAL_LABEL (cs_end_label, + section ? "LLSDACSEC" : "LLSDACSE", + current_function_funcdef_no); + dw2_asm_output_delta_uleb128 (cs_end_label, cs_after_size_label, + "Call-site table length"); + ASM_OUTPUT_LABEL (asm_out_file, cs_after_size_label); + if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) + sjlj_output_call_site_table (); + else + dw2_output_call_site_table (cs_format, section); + ASM_OUTPUT_LABEL (asm_out_file, cs_end_label); + } else - dw2_output_call_site_table (cs_format, section); -#endif + { + dw2_asm_output_data_uleb128 (call_site_len, "Call-site table length"); + if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ) + sjlj_output_call_site_table (); + else + dw2_output_call_site_table (cs_format, section); + } /* ??? Decode and interpret the data for flag_debug_asm. */ { @@ -3070,10 +3070,8 @@ output_one_function_exception_table (int section) output_ttype (type, tt_format, tt_format_size); } -#ifdef HAVE_AS_LEB128 - if (have_tt_data) - ASM_OUTPUT_LABEL (asm_out_file, ttype_label); -#endif + if (HAVE_AS_LEB128 && have_tt_data) + ASM_OUTPUT_LABEL (asm_out_file, ttype_label); /* ??? Decode and interpret the data for flag_debug_asm. */ if (targetm.arm_eabi_unwinder) -- 2.9.3.dirty