diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 765996c624f9b646317f33c7cc07d51ab359e6b4..f550d9e042f4962e0d7c23eae40978610141e77b 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -2164,13 +2164,7 @@ static void s_aarch64_capinit (int ignored ATTRIBUTE_UNUSED) { expressionS exp; - expression (&exp); - if (exp.X_op != O_symbol) - { - as_bad (_(".capinit expects a target symbol as an argument")); - return; - } /* align to 16 bytes. */ do_align (4, (char *) NULL, 0, 0); @@ -2186,13 +2180,7 @@ static void s_aarch64_chericap (int ignored ATTRIBUTE_UNUSED) { expressionS exp; - expression (&exp); - if (exp.X_op != O_symbol) - { - as_bad (_(".chericap expects a target symbol as an argument")); - return; - } #ifdef md_flush_pending_output md_flush_pending_output (); diff --git a/gas/testsuite/gas/aarch64/morello-capinit.d b/gas/testsuite/gas/aarch64/morello-capinit.d index 788449ba7daec9e4131fe6cb0cdca0eff3c94687..6567a2964beafcd8fae1297579deaf7690384139 100644 --- a/gas/testsuite/gas/aarch64/morello-capinit.d +++ b/gas/testsuite/gas/aarch64/morello-capinit.d @@ -6,6 +6,10 @@ RELOCATION RECORDS FOR \[\.text\]: OFFSET TYPE VALUE 0000000000000000 R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000010 +0000000000000008 R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000010 +0000000000000010 R_MORELLO_CAPINIT f\+0x0000000000000008 +0000000000000020 R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000010 +0000000000000030 R_MORELLO_CAPINIT f2\+0x000000000000000c RELOCATION RECORDS FOR \[\.data\]: @@ -21,8 +25,11 @@ OFFSET TYPE VALUE 0000000000000000 R_MORELLO_CAPINIT str2 -Contents of section \.text: - 0000 420040c2 c053c2c2 .* +Contents of section .text: + 0000 420040c2 c053c2c2 420040c2 1f2003d5 .* + 0010 00000000 00000000 00000000 00000000 .* + 0020 420040c2 00000000 00000000 1f2003d5 .* + 0030 00000000 00000000 00000000 00000000 .* Contents of section \.data: 0000 48656c6c 6f20576f 726c6400 00000000 .* 0010 00000000 00000000 00000000 00000000 .* diff --git a/gas/testsuite/gas/aarch64/morello-capinit.s b/gas/testsuite/gas/aarch64/morello-capinit.s index 62b79b1b6a5e82f52384823da6069e062f606954..c3d44b9cbf31e115c5c6c0c8e8e781d81efb58f8 100644 --- a/gas/testsuite/gas/aarch64/morello-capinit.s +++ b/gas/testsuite/gas/aarch64/morello-capinit.s @@ -49,3 +49,20 @@ e: _start: ldr c2, [c2, :lo12:a] ret + + .type f, %function +f: + ldr c2, [c2, :lo12:a] + .p2align 4 +.Llab: + .capinit f+((.Llab+1)-f) + .xword 0 + .xword 0 + .type f2, %function +f2: + ldr c2, [c2, :lo12:a] + .8byte 0 +.Llab2: + .capinit f2+((.Llab2+1)-f2) + .xword 0 + .xword 0 diff --git a/gas/testsuite/gas/aarch64/morello-chericap.d b/gas/testsuite/gas/aarch64/morello-chericap.d index 2d855f283a37cd507954da6fdb2b6b7b74294a25..f8e1fe99f2edd3c7998a0367d1a4d2931297599e 100644 --- a/gas/testsuite/gas/aarch64/morello-chericap.d +++ b/gas/testsuite/gas/aarch64/morello-chericap.d @@ -17,6 +17,8 @@ SYMBOL TABLE: 0000000000000060 l \.data 0000000000000010 d 0000000000000000 l d \.data\.rel\.ro 0000000000000000 \.data\.rel\.ro 0000000000000000 l \.data\.rel\.ro 0000000000000010 e +000000000000001c l F \.text 0000000000000000 g +0000000000000030 l F \.text 0000000000000000 g2 0000000000000000 g F \.text 0000000000000013 f 0000000000000020 g \.data 000000000000000c str 0000000000000000 \*UND\* 0000000000000000 foo @@ -26,6 +28,10 @@ SYMBOL TABLE: RELOCATION RECORDS FOR \[\.text\]: OFFSET TYPE VALUE 0000000000000014 R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000030 +000000000000001c R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000030 +0000000000000020 R_MORELLO_CAPINIT g\+0x0000000000000004 +0000000000000030 R_AARCH64_LDST128_ABS_LO12_NC \.data\+0x0000000000000030 +0000000000000040 R_MORELLO_CAPINIT g2\+0x000000000000000c RELOCATION RECORDS FOR \[\.data\]: @@ -45,7 +51,10 @@ OFFSET TYPE VALUE Contents of section \.text: 0000 fd7bbf62 fdd3c1c2 01000014 fd7bc122 .* - 0010 c053c2c2 420040c2 c053c2c2 .* + 0010 c053c2c2 420040c2 c053c2c2 420040c2 .* + 0020 00000000 00000000 00000000 00000000 .* + 0030 420040c2 00000000 00000000 1f2003d5 .* + 0040 00000000 00000000 00000000 00000000 .* Contents of section \.data: 0000 00000000 00000000 00000000 00000000 .* 0010 00000000 00000000 00000000 00000000 .* diff --git a/gas/testsuite/gas/aarch64/morello-chericap.s b/gas/testsuite/gas/aarch64/morello-chericap.s index 1d44a4ffbb952f13d9abaf4288278d3d06786083..c733bb723e58bf88450a949ff04a9910d7522a1c 100644 --- a/gas/testsuite/gas/aarch64/morello-chericap.s +++ b/gas/testsuite/gas/aarch64/morello-chericap.s @@ -77,3 +77,16 @@ e: _start: ldr c2, [c2, :lo12:a] ret + + .type g, %function +g: + ldr c2, [c2, :lo12:a] + .p2align 4 +.Llab: + .chericap g+((.Llab+1)-g) + .type g2, %function +g2: + ldr c2, [c2, :lo12:a] + .8byte 0 +.Llab2: + .chericap g2+((.Llab2+1)-g2)