mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 10:20:33 +08:00
re PR target/87927 (ICE: segmentation fault with patchable_function_entry attribute for msp430-elf -mlarge)
2018-11-16 Jozef Lawrynowicz <jozef.l@mittosystems.com> PR target/87927 * target-def.h: Initialize TARGET_ASM_{,UN}ALIGNED_P{S,D,T}I_OP. Add them to the TARGET_ASM_{,UN}ALIGNED_INT_OP structs. * target.def: Enumerate TARGET_ASM_{,UN}ALIGNED_P{S,D,T}I_OP in the byte_op hook. * target.h: Add psi, pdi, pti to struct asm_int_op definition. * targhooks.c (default_print_patchable_function_entry): Assert asm_int_op does not return a NULL string. * varasm.c (integer_asm_op): Return the op for a partial int type when the requested size does not correspond to an integer type. * config/msp430/msp430.c: Initialize TARGET_ASM_{,UN}ALIGNED_PSI_OP. * doc/tm.texi: Regenerate. From-SVN: r266226
This commit is contained in:
parent
8808260dfd
commit
cac6691c13
@ -1,3 +1,18 @@
|
||||
2018-11-16 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
PR target/87927
|
||||
* target-def.h: Initialize TARGET_ASM_{,UN}ALIGNED_P{S,D,T}I_OP.
|
||||
Add them to the TARGET_ASM_{,UN}ALIGNED_INT_OP structs.
|
||||
* target.def: Enumerate TARGET_ASM_{,UN}ALIGNED_P{S,D,T}I_OP in
|
||||
the byte_op hook.
|
||||
* target.h: Add psi, pdi, pti to struct asm_int_op definition.
|
||||
* targhooks.c (default_print_patchable_function_entry): Assert
|
||||
asm_int_op does not return a NULL string.
|
||||
* varasm.c (integer_asm_op): Return the op for a partial int type
|
||||
when the requested size does not correspond to an integer type.
|
||||
* config/msp430/msp430.c: Initialize TARGET_ASM_{,UN}ALIGNED_PSI_OP.
|
||||
* doc/tm.texi: Regenerate.
|
||||
|
||||
2018-11-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* gimplify.c (gimplify_case_label_expr): Handle hot/cold attributes.
|
||||
|
@ -3469,6 +3469,11 @@ msp430_print_operand_raw (FILE * file, rtx op)
|
||||
}
|
||||
}
|
||||
|
||||
#undef TARGET_ASM_ALIGNED_PSI_OP
|
||||
#define TARGET_ASM_ALIGNED_PSI_OP "\t.long\t"
|
||||
#undef TARGET_ASM_UNALIGNED_PSI_OP
|
||||
#define TARGET_ASM_UNALIGNED_PSI_OP TARGET_ASM_ALIGNED_PSI_OP
|
||||
|
||||
#undef TARGET_PRINT_OPERAND_ADDRESS
|
||||
#define TARGET_PRINT_OPERAND_ADDRESS msp430_print_operand_addr
|
||||
|
||||
|
@ -8036,12 +8036,18 @@ hook.
|
||||
|
||||
@deftypevr {Target Hook} {const char *} TARGET_ASM_BYTE_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PSI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PDI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PTI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PSI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PDI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PTI_OP
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP
|
||||
These hooks specify assembly directives for creating certain kinds
|
||||
of integer object. The @code{TARGET_ASM_BYTE_OP} directive creates a
|
||||
|
@ -47,6 +47,15 @@
|
||||
#define TARGET_ASM_UNALIGNED_TI_OP NULL
|
||||
#endif /* OBJECT_FORMAT_ELF */
|
||||
|
||||
/* There is no standard way to handle P{S,D,T}Imode, targets must implement them
|
||||
if required. */
|
||||
#define TARGET_ASM_ALIGNED_PSI_OP NULL
|
||||
#define TARGET_ASM_UNALIGNED_PSI_OP NULL
|
||||
#define TARGET_ASM_ALIGNED_PDI_OP NULL
|
||||
#define TARGET_ASM_UNALIGNED_PDI_OP NULL
|
||||
#define TARGET_ASM_ALIGNED_PTI_OP NULL
|
||||
#define TARGET_ASM_UNALIGNED_PTI_OP NULL
|
||||
|
||||
#if !defined(TARGET_ASM_CONSTRUCTOR) && !defined(USE_COLLECT2)
|
||||
# ifdef CTORS_SECTION_ASM_OP
|
||||
# define TARGET_ASM_CONSTRUCTOR default_ctor_section_asm_out_constructor
|
||||
@ -89,14 +98,20 @@
|
||||
|
||||
#define TARGET_ASM_ALIGNED_INT_OP \
|
||||
{TARGET_ASM_ALIGNED_HI_OP, \
|
||||
TARGET_ASM_ALIGNED_PSI_OP, \
|
||||
TARGET_ASM_ALIGNED_SI_OP, \
|
||||
TARGET_ASM_ALIGNED_PDI_OP, \
|
||||
TARGET_ASM_ALIGNED_DI_OP, \
|
||||
TARGET_ASM_ALIGNED_PTI_OP, \
|
||||
TARGET_ASM_ALIGNED_TI_OP}
|
||||
|
||||
#define TARGET_ASM_UNALIGNED_INT_OP \
|
||||
{TARGET_ASM_UNALIGNED_HI_OP, \
|
||||
TARGET_ASM_UNALIGNED_PSI_OP, \
|
||||
TARGET_ASM_UNALIGNED_SI_OP, \
|
||||
TARGET_ASM_UNALIGNED_PDI_OP, \
|
||||
TARGET_ASM_UNALIGNED_DI_OP, \
|
||||
TARGET_ASM_UNALIGNED_PTI_OP, \
|
||||
TARGET_ASM_UNALIGNED_TI_OP}
|
||||
|
||||
#if !defined (TARGET_FUNCTION_INCOMING_ARG)
|
||||
|
@ -45,12 +45,18 @@ DEFHOOKPODX (close_paren, const char *, ")")
|
||||
DEFHOOKPOD
|
||||
(byte_op,
|
||||
"@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PSI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PDI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PTI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PSI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PDI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PTI_OP\n\
|
||||
@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP\n\
|
||||
These hooks specify assembly directives for creating certain kinds\n\
|
||||
of integer object. The @code{TARGET_ASM_BYTE_OP} directive creates a\n\
|
||||
|
@ -158,8 +158,11 @@ extern bool stmt_in_inner_loop_p (struct _stmt_vec_info *);
|
||||
struct asm_int_op
|
||||
{
|
||||
const char *hi;
|
||||
const char *psi;
|
||||
const char *si;
|
||||
const char *pdi;
|
||||
const char *di;
|
||||
const char *pti;
|
||||
const char *ti;
|
||||
};
|
||||
|
||||
|
@ -1807,13 +1807,15 @@ default_print_patchable_function_entry (FILE *file,
|
||||
char buf[256];
|
||||
static int patch_area_number;
|
||||
section *previous_section = in_section;
|
||||
const char *asm_op = integer_asm_op (POINTER_SIZE_UNITS, false);
|
||||
|
||||
gcc_assert (asm_op != NULL);
|
||||
patch_area_number++;
|
||||
ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);
|
||||
|
||||
switch_to_section (get_section ("__patchable_function_entries",
|
||||
0, NULL));
|
||||
fputs (integer_asm_op (POINTER_SIZE_UNITS, false), file);
|
||||
fputs (asm_op, file);
|
||||
assemble_name_raw (file, buf);
|
||||
fputc ('\n', file);
|
||||
|
||||
|
14
gcc/varasm.c
14
gcc/varasm.c
@ -2733,10 +2733,24 @@ integer_asm_op (int size, int aligned_p)
|
||||
return targetm.asm_out.byte_op;
|
||||
case 2:
|
||||
return ops->hi;
|
||||
case 3:
|
||||
return ops->psi;
|
||||
case 4:
|
||||
return ops->si;
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
return ops->pdi;
|
||||
case 8:
|
||||
return ops->di;
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
return ops->pti;
|
||||
case 16:
|
||||
return ops->ti;
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user