| /* Functional tests for the function hotpatching feature. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-options "-mzarch" } */ |
| |
| typedef long (*fn_t)(void); |
| |
| __attribute__ ((hotpatch(1,2))) |
| fn_t outer(void) |
| { |
| __attribute__ ((hotpatch(4,8))) |
| long nested1(void) |
| { |
| __attribute__ ((hotpatch(16,32))) |
| long nested2(void) |
| { |
| return 2; |
| } |
| return (long)(void *)nested2; |
| } |
| |
| return nested1; |
| } |
| |
| /* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */ |
| /* { dg-final { scan-assembler "pre-label.*(4 halfwords)" } } */ |
| /* { dg-final { scan-assembler "pre-label.*(16 halfwords)" } } */ |
| /* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nopr\t" } } */ |
| /* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(8 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */ |
| /* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(32 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */ |
| /* { dg-final { scan-assembler-times "alignment for hotpatch" 3 } } */ |
| /* { dg-final { scan-assembler "nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr" } } */ |