aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-09-15 10:22:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-09-15 10:22:32 +0000
commit7180b1a686163421c1339a11dfd0f33a1e28567d (patch)
tree175e372115b6f7a7dddb27df3e0a92b746e31486 /gcc/config
parent0273c10e7b1d6824932eb6f58d72fd81139154f0 (diff)
downloadgcc-7180b1a686163421c1339a11dfd0f33a1e28567d.zip
gcc-7180b1a686163421c1339a11dfd0f33a1e28567d.tar.gz
gcc-7180b1a686163421c1339a11dfd0f33a1e28567d.tar.bz2
dwarf2asm.h (dw2_asm_output_offset): Add overload with extra offset argument.
2016-09-15 Richard Biener <rguenther@suse.de> * dwarf2asm.h (dw2_asm_output_offset): Add overload with extra offset argument. * dwarf2asm.c (dw2_asm_output_offset): Implement that. * doc/tm.texi.in (ASM_OUTPUT_DWARF_OFFSET): Adjust documentation to reflect new offset parameter. * doc/tm.texi: Regenerate. * config/darwin.h (ASM_OUTPUT_DWARF_OFFSET): Adjust. * config/darwin-protos.h (darwin_asm_output_dwarf_delta): Add offset argument. (darwin_asm_output_dwarf_offset): Likewise. * config/darwin.c (darwin_asm_output_dwarf_delta): Add offset argument. (darwin_asm_output_dwarf_offset): Pass offset argument through. * config/ia64/ia64.h (ASM_OUTPUT_DWARF_OFFSET): Adjust. * config/i386/cygmin.h (ASM_OUTPUT_DWARF_OFFSET): Likewise. From-SVN: r240158
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/darwin-protos.h4
-rw-r--r--gcc/config/darwin.c9
-rw-r--r--gcc/config/darwin.h6
-rw-r--r--gcc/config/i386/cygming.h6
-rw-r--r--gcc/config/ia64/ia64.h4
5 files changed, 19 insertions, 10 deletions
diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h
index 62c7259..7eb096b 100644
--- a/gcc/config/darwin-protos.h
+++ b/gcc/config/darwin-protos.h
@@ -91,9 +91,9 @@ extern void darwin_globalize_label (FILE *, const char *);
extern void darwin_assemble_visibility (tree, int);
extern void darwin_asm_output_dwarf_delta (FILE *, int, const char *,
- const char *);
+ const char *, HOST_WIDE_INT);
extern void darwin_asm_output_dwarf_offset (FILE *, int, const char *,
- section *);
+ HOST_WIDE_INT, section *);
extern void darwin_asm_declare_object_name (FILE *, const char *, tree);
extern void darwin_asm_declare_constant_name (FILE *, const char *,
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 0055d80..f8da959 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -2790,7 +2790,8 @@ static int darwin_dwarf_label_counter;
void
darwin_asm_output_dwarf_delta (FILE *file, int size,
- const char *lab1, const char *lab2)
+ const char *lab1, const char *lab2,
+ HOST_WIDE_INT offset)
{
int islocaldiff = (lab1[0] == '*' && lab1[1] == 'L'
&& lab2[0] == '*' && lab2[1] == 'L');
@@ -2804,6 +2805,8 @@ darwin_asm_output_dwarf_delta (FILE *file, int size,
assemble_name_raw (file, lab1);
fprintf (file, "-");
assemble_name_raw (file, lab2);
+ if (offset != 0)
+ fprintf (file, "+" HOST_WIDE_INT_PRINT_DEC, offset);
if (islocaldiff)
fprintf (file, "\n\t%s L$set$%d", directive, darwin_dwarf_label_counter++);
}
@@ -2815,7 +2818,7 @@ darwin_asm_output_dwarf_delta (FILE *file, int size,
void
darwin_asm_output_dwarf_offset (FILE *file, int size, const char * lab,
- section *base)
+ HOST_WIDE_INT offset, section *base)
{
char sname[64];
int namelen;
@@ -2826,7 +2829,7 @@ darwin_asm_output_dwarf_offset (FILE *file, int size, const char * lab,
namelen = strchr (base->named.name + 8, ',') - (base->named.name + 8);
sprintf (sname, "*Lsection%.*s", namelen, base->named.name + 8);
- darwin_asm_output_dwarf_delta (file, size, lab, sname);
+ darwin_asm_output_dwarf_delta (file, size, lab, sname, offset);
}
/* Called from the within the TARGET_ASM_FILE_START for each target. */
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 944548a..3782eb3 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -835,10 +835,10 @@ enum machopic_addr_class {
((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
#define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \
- darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2)
+ darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2, 0)
-#define ASM_OUTPUT_DWARF_OFFSET(FILE,SIZE,LABEL,BASE) \
- darwin_asm_output_dwarf_offset (FILE, SIZE, LABEL, BASE)
+#define ASM_OUTPUT_DWARF_OFFSET(FILE,SIZE,LABEL,OFFSET,BASE) \
+ darwin_asm_output_dwarf_offset (FILE, SIZE, LABEL, OFFSET, BASE)
#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(ASM_OUT_FILE, ENCODING, SIZE, ADDR, DONE) \
if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) { \
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index d6c2254..228d6a2 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -102,13 +102,15 @@ along with GCC; see the file COPYING3. If not see
/* Use section relative relocations for debugging offsets. Unlike
other targets that fake this by putting the section VMA at 0, PE
won't allow it. */
-#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION) \
+#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, OFFSET, SECTION) \
do { \
switch (SIZE) \
{ \
case 4: \
fputs ("\t.secrel32\t", FILE); \
assemble_name (FILE, LABEL); \
+ if (offset != 0) \
+ fprintf (FILE, "+" HOST_WIDE_INT_PRINT_DEC, offset) \
break; \
case 8: \
/* This is a hack. There is no 64-bit section relative \
@@ -118,6 +120,8 @@ along with GCC; see the file COPYING3. If not see
Fake the 64-bit offset by zero-extending it. */ \
fputs ("\t.secrel32\t", FILE); \
assemble_name (FILE, LABEL); \
+ if (offset != 0) \
+ fprintf (FILE, "+" HOST_WIDE_INT_PRINT_DEC, offset) \
fputs ("\n\t.long\t0", FILE); \
break; \
default: \
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index daf717b..aab2d7a 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1581,11 +1581,13 @@ do { \
/* Use section-relative relocations for debugging offsets. Unlike other
targets that fake this by putting the section VMA at 0, IA-64 has
proper relocations for them. */
-#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION) \
+#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, OFFSET, SECTION) \
do { \
fputs (integer_asm_op (SIZE, FALSE), FILE); \
fputs ("@secrel(", FILE); \
assemble_name (FILE, LABEL); \
+ if (offset != 0) \
+ fprintf (FILE, "+" HOST_WIDE_INT_PRINT_DEC, OFFSET); \
fputc (')', FILE); \
} while (0)