This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH]: gold sparc unaligned...
> That special hook is only invoked by the dwarf2 CFI emitter
> for pcrel cases. It isn't going to be used for the expressions
> generated by .cfi_personality
You're right. In fact, I've found out why there is no SIGBUS on Solaris with
recent GNU as and Solaris ld. Despite:
/* Define 0/1 if your assembler supports CFI directives. */
#define HAVE_GAS_CFI_DIRECTIVE 1
#define HAVE_GAS_CFI_PERSONALITY_DIRECTIVE 1
in the auto-host file of GCC, the CFI directives are still disabled in this
configuration because of:
/* Decide whether to emit frame unwind via assembler directives. */
int
dwarf2out_do_cfi_asm (void)
{
[...]
/* Make sure the personality encoding is one the assembler can support.
In particular, aligned addresses can't be handled. */
enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
return false;
and config/sparc/sol2.h has:
/* Select a format to encode pointers in exception handling data. CODE
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
true if the symbol may be affected by dynamic relocations.
Some Solaris dynamic linkers don't handle unaligned section relative
relocs properly, so force them to be aligned. */
#ifndef HAVE_AS_SPARC_UA_PCREL
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
((flag_pic || GLOBAL) ? DW_EH_PE_aligned : DW_EH_PE_absptr)
#endif
and HAVE_AS_SPARC_UA_PCREL isn't defined.
--
Eric Botcazou