Thanks for taking a look at this. I'll push this up to GCC. In the meantime, I'll remove SUBALIGN and adjust things as necessary.
Kinsey -----Original Message----- From: Sebastian Huber <sebastian.hu...@embedded-brains.de> Sent: Wednesday, February 17, 2021 11:20 To: Kinsey Moore <kinsey.mo...@oarcorp.com>; devel@rtems.org Subject: Re: splinkersets01 test assumptions On 17/02/2021 17:41, Kinsey Moore wrote: >>>> I would remove the SUBALIGN() from the linker script. You can also add a >>>> new test case for splinkersets01 similar to struct s from above. Then we >>>> should check if the test fails on aarch64 and why it fails. >>> The example above actually shows the issue I'm having in >>> _Linker_set_i_begin and _Linker_set_i_end. The alignment expands for the >>> larger struct, but does not shrink for data types smaller than 8 bytes, >>> leaving padding that the test interprets as additional space in the linker >>> set. >> I still don't see why a larger alignment is an issue. The begin/end >> objects have a size of zero. Where do you observe a padding? > Even when the begin/end objects have a size of 0, they're aligned out to 8 > bytes forcing empty bytes if the content does not exactly fill a multiple of > 8 bytes. Those non-content bytes are counted as part of the section. Ok, it took a while, but I understand now the problem. I think this is a GCC bug. cat test-align.c char i; char j[1]; char z[0]; unsigned long ai = _Alignof(i); unsigned long aj = _Alignof(j); unsigned long az = _Alignof(z); aarch64-rtems6-gcc -O2 -S -o - test-align.c -mabi=ilp32 -fdata-sections .arch armv8-a .file "test-align.c" .text .global az .global aj .global ai .global z .global j .global i .section .bss.i,"aw",@nobits .type i, %object .size i, 1 i: .zero 1 .section .bss.j,"aw",@nobits .align 3 .type j, %object .size j, 1 j: .zero 1 .section .bss.z,"aw",@nobits .align 3 .type z, %object .size z, 0 z: .section .data.ai,"aw" .align 2 .type ai, %object .size ai, 4 ai: .word 1 .section .data.aj,"aw" .align 2 .type aj, %object .size aj, 4 aj: .word 1 .section .data.az,"aw" .align 2 .type az, %object .size az, 4 az: .word 1 .ident "GCC: (GNU) 10.2.1 20210205 (RTEMS 6, RSB 61dcadee0825867ebe51f9f367430ef75b8fe9c0, Newlib d4a756f)" clang --target=aarch64 -O2 -S -o - test-align.c -fdata-sections -fno-common test-align.c:4:20: warning: '_Alignof' applied to an expression is a GNU extension [-Wgnu-alignof-expression] unsigned long ai = _Alignof(i); ^ test-align.c:5:20: warning: '_Alignof' applied to an expression is a GNU extension [-Wgnu-alignof-expression] unsigned long aj = _Alignof(j); ^ test-align.c:6:20: warning: '_Alignof' applied to an expression is a GNU extension [-Wgnu-alignof-expression] unsigned long az = _Alignof(z); ^ .text .file "test-align.c" .type ai,@object // @ai .section .data.ai,"aw",@progbits .globl ai .p2align 3 ai: .xword 1 // 0x1 .size ai, 8 .type aj,@object // @aj .section .data.aj,"aw",@progbits .globl aj .p2align 3 aj: .xword 1 // 0x1 .size aj, 8 .type az,@object // @az .section .data.az,"aw",@progbits .globl az .p2align 3 az: .xword 1 // 0x1 .size az, 8 .type i,@object // @i .section .bss.i,"aw",@nobits .globl i i: .byte 0 // 0x0 .size i, 1 .type j,@object // @j .section .bss.j,"aw",@nobits .globl j j: .zero 1 .size j, 1 .type z,@object // @z .section .bss.z,"aw",@nobits .globl z z: .size z, 0 .ident "clang version 9.0.1 " .section ".note.GNU-stack","",@progbits .addrsig 3 warnings generated. I would file a GCC bug report. -- embedded brains GmbH Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.hu...@embedded-brains.de phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht München Registernummer: HRB 157899 Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler Unsere Datenschutzerklärung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/ _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel