mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
Update PRU assembler to corect hardware register numbering for DWARF.
A small rework of the PRU GCC port exposed that CIE data alignment is erroneously set to 4 for PRU in GAS. In fact PRU stack must be aligned to 1. Set the macro to -1, to allow output from GCC to be assembled without errors. Also, while at it, set DWARF2 HW register numbering to follow latest * config/tc-pru.c (pru_regname_to_dw2regnum): Return the starting HW byte-register number. (pru_frame_initial_instructions): Use byte-numbering for FP index. * config/tc-pru.h (DWARF2_DEFAULT_RETURN_COLUMN): Use number from latest GCC. (DWARF2_CIE_DATA_ALIGNMENT): Set to -1.
This commit is contained in:
parent
dbf8be89ed
commit
2688aab226
@ -1,3 +1,12 @@
|
||||
2018-08-03 Dimitar Dimitrov <dimitar@dinux.eu>
|
||||
|
||||
* config/tc-pru.c (pru_regname_to_dw2regnum): Return the starting HW
|
||||
byte-register number.
|
||||
(pru_frame_initial_instructions): Use byte-numbering for FP index.
|
||||
* config/tc-pru.h (DWARF2_DEFAULT_RETURN_COLUMN): Use number from
|
||||
latest GCC.
|
||||
(DWARF2_CIE_DATA_ALIGNMENT): Set to -1.
|
||||
|
||||
2018-08-03 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* config/tc-i386.c (Operand_Mem): Define.
|
||||
|
@ -1920,14 +1920,28 @@ pru_cons_fix_new (fragS *frag, int where, unsigned int nbytes,
|
||||
}
|
||||
|
||||
/* Implement tc_regname_to_dw2regnum, to convert REGNAME to a DWARF-2
|
||||
register number. */
|
||||
register number. Return the starting HW byte-register number. */
|
||||
|
||||
int
|
||||
pru_regname_to_dw2regnum (char *regname)
|
||||
{
|
||||
static const unsigned int regstart[RSEL_NUM_ITEMS] =
|
||||
{
|
||||
[RSEL_7_0] = 0,
|
||||
[RSEL_15_8] = 1,
|
||||
[RSEL_23_16] = 2,
|
||||
[RSEL_31_24] = 3,
|
||||
[RSEL_15_0] = 0,
|
||||
[RSEL_23_8] = 1,
|
||||
[RSEL_31_16] = 2,
|
||||
[RSEL_31_0] = 0,
|
||||
};
|
||||
|
||||
struct pru_reg *r = pru_reg_lookup (regname);
|
||||
if (r == NULL)
|
||||
|
||||
if (r == NULL || r->regsel >= RSEL_NUM_ITEMS)
|
||||
return -1;
|
||||
return r->index;
|
||||
return r->index * 4 + regstart[r->regsel];
|
||||
}
|
||||
|
||||
/* Implement tc_cfi_frame_initial_instructions, to initialize the DWARF-2
|
||||
@ -1935,7 +1949,7 @@ pru_regname_to_dw2regnum (char *regname)
|
||||
void
|
||||
pru_frame_initial_instructions (void)
|
||||
{
|
||||
const unsigned fp_regno = 4;
|
||||
const unsigned fp_regno = 4 * 4;
|
||||
cfi_add_CFA_def_cfa (fp_regno, 0);
|
||||
}
|
||||
|
||||
|
@ -138,8 +138,14 @@ extern int pru_validate_fix_sub (struct fix *);
|
||||
|
||||
/* We want .cfi_* pseudo-ops for generating unwind info. */
|
||||
#define TARGET_USE_CFIPOP 1
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 31
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
||||
|
||||
/* Program Counter register number is not defined by TI documents.
|
||||
Pick the virtual number used by GCC. */
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 132
|
||||
|
||||
/* The stack grows down, and is only byte aligned. */
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT -1
|
||||
|
||||
#define tc_regname_to_dw2regnum pru_regname_to_dw2regnum
|
||||
extern int pru_regname_to_dw2regnum (char *regname);
|
||||
#define tc_cfi_frame_initial_instructions pru_frame_initial_instructions
|
||||
|
@ -424,7 +424,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
|
||||
/* PR ld/20906. A corrupt input file
|
||||
can contain bogus strings. */
|
||||
len = strlen (yylval.name);
|
||||
if (len > yyleng - 2)
|
||||
if (len > (bfd_size_type) yyleng - 2)
|
||||
len = yyleng - 2;
|
||||
yylval.name[len] = 0;
|
||||
return NAME;
|
||||
|
Loading…
Reference in New Issue
Block a user