x86: allow @secrel32 also in data definitions
authorJan Beulich <jbeulich@suse.com>
Mon, 3 May 2021 11:28:30 +0000 (13:28 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 3 May 2021 11:28:30 +0000 (13:28 +0200)
Now that lex_got() is uniform for all targets using it, permit COFF
targets to also use @secrel32 with, in particular, .long. This is more
natural than the custom .secrel32 directive, and also allows more
flexibility (the "+six" form of the two added test lines doesn't work
with a .secrel32 equivalent, in that it silently produces an unintended
relocation type).

As an extra benefit this also makes sure that data definitions in Intel
syntax mode would get treated like they do for e.g. ELF targets.

gas/ChangeLog
gas/config/tc-i386.h
gas/testsuite/gas/i386/secrel.d
gas/testsuite/gas/i386/secrel.s

index 9442a3ea49f819478fbe6ffa675cf768e10b51ae..0ec2886e254db30d762202f5e5c882458e185dd5 100644 (file)
@@ -1,3 +1,11 @@
+2021-05-03  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.h (TC_PARSE_CONS_EXPRESSION): Adjust surrounding
+       #if.
+       * testsuite/gas/i386/secrel.s: Convert some .secrel32 to .long.
+       Add two further .long and an .equ.
+       * testsuite/gas/i386/secrel.d: Adjust expecations.
+
 2021-05-03  Jan Beulich  <jbeulich@suse.com>
 
        * testsuite/gas/i386/secrel.d, testsuite/gas/i386/secrel.s:
index 5516a164aa58d10d868adcb33dba8857d2606227..9ca9727d4ca26451fc6b361105ac7cc4ecd3cb95 100644 (file)
@@ -126,7 +126,8 @@ extern const char *i386_comment_chars;
 #define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
 #endif
 
-#if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && !defined (LEX_AT)
+#if ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
+     && !defined (LEX_AT)) || defined (TE_PE)
 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) x86_cons (EXP, NBYTES)
 #endif
 extern bfd_reloc_code_real_type x86_cons (expressionS *, int);
index 17530866546c357a479e9692b18c894cdc691a6c..f6e31c726eaaca606c6b375096e107eac6e34154 100644 (file)
@@ -21,7 +21,9 @@ OFFSET[       ]+TYPE[         ]+VALUE *
 0+89 secrel32          ext2d
 0+8e secrel32          ext36
 0+93 secrel32          ext3f
-0+a2 secrel32          bar
+0+a0 secrel32          \.text
+0+a4 secrel32          \.text
+0+aa secrel32          bar
 
 Contents of section \.text:
  0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c  >>>><<<<>>>>><<<
@@ -37,7 +39,7 @@ Contents of section \.data:
  0070 0000111f 00000011 3c3c3c3c 3c3c3c3c  ........<<<<<<<<
  0080 3e3e3e3e 00000000 11000000 00110000  >>>>............
  0090 00001100 00000011 3c3c3c3c 3c3c3c3c  ........<<<<<<<<
- 00a0 8d902c00 00000000                    ..,..... *
+ 00a0 10000000 1c000000 8d902c00 00000000  ..........,.....
 Contents of section \.rdata:
  0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c  >>>><<<<>>>>><<<
  0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c  >>>>>><<>>>>>>><
index e7de67805816bd7a37a419340e07aaa2007993d1..c43ad9270dd88981373f828d9ad9ca49ca4bef14 100644 (file)
@@ -27,7 +27,7 @@ sam1f:        .ascii "<"
        .byte 0x11
        .secrel32 pre16
        .byte 0x11
-       .secrel32 pre1f
+       .long pre1f@secrel32
        .byte 0x11
        .ascii "<<<<<<<<"
 
@@ -36,7 +36,7 @@ sam1f:        .ascii "<"
        .byte 0x11
        .secrel32 sam0d
        .byte 0x11
-       .secrel32 sam16
+       .long sam16@secrel32
        .byte 0x11
        .secrel32 sam1f
        .byte 0x11
@@ -45,7 +45,7 @@ sam1f:        .ascii "<"
        .ascii ">>>>"
        .secrel32 nex04
        .byte 0x11
-       .secrel32 nex0d
+       .long nex0d@secrel32
        .byte 0x11
        .secrel32 nex16
        .byte 0x11
@@ -54,7 +54,7 @@ sam1f:        .ascii "<"
        .ascii "<<<<<<<<"
 
        .ascii ">>>>"
-       .secrel32 ext24
+       .long ext24@secrel32
        .byte 0x11
        .secrel32 ext2d
        .byte 0x11
@@ -64,6 +64,9 @@ sam1f:        .ascii "<"
        .byte 0x11
        .ascii "<<<<<<<<"
 
+       .long pre0d@secrel32+3
+       .long pre16@secrel32+six
+
        leal    bar@SECREL32+44(%eax), %edx
 
 .section .rdata
@@ -79,3 +82,4 @@ nex1f:        .ascii "<"
        .ascii ">>>>"
 
        .p2align 4,0
+       .equ six,6