aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-07-22 21:53:26 +0930
committerAlan Modra <amodra@gmail.com>2021-07-28 11:45:18 +0930
commitb25f942e18d6ecd7ec3e2d2e9930eb4f996c258a (patch)
tree9659339c01d49ca9ddc5452cbc32274b880439c5 /bfd
parentb30049f188bac3b06c26a7f44821c63622ba3a24 (diff)
downloadfsf-binutils-gdb-b25f942e18d6ecd7ec3e2d2e9930eb4f996c258a.zip
fsf-binutils-gdb-b25f942e18d6ecd7ec3e2d2e9930eb4f996c258a.tar.gz
fsf-binutils-gdb-b25f942e18d6ecd7ec3e2d2e9930eb4f996c258a.tar.bz2
PowerPC: ignore sticky options for .machine
PowerPC gas and objdump for a long time have allowed certain -m/-M options that extend a base cpu with extra functional units to be specified before the base cpu. For example, "-maltivec -mpower4" is the same as "-mpower4 -maltivec". See https://sourceware.org/pipermail/binutils/2008-January/054935.html It doesn't make as much sense that .machine keep any of these "sticky" flags when handling a new base cpu. See gcc PR101393. I think that instead .machine ought to override the command line. That's what this patch does. It is still possible to extend cpu functionality with .machine. For example the following can be assembled when selecting a basic -mppc on the command line: .machine power5 .machine altivec frin 1,2 lvsr 3,4,5 Here, ".machine altivec" extends the ".machine power5" so that both the power5 "frin" instruction and the altivec "lvsr" instruction are enabled. Swapping the two ".machine" directives would result in failure to assemble "lvsr". This change will expose some assembly errors, such as the one in glibc/sysdeps/powerpc/powerpc64/tst-ucontext-ppc64-vscr.c, a file compiled with -maltivec but containing asm volatile (".machine push;\n" ".machine \"power5\";\n" "vspltisb %0,0;\n" "vspltisb %1,-1;\n" "vpkuwus %0,%0,%1;\n" "mfvscr %0;\n" "stvx %0,0,%2;\n" ".machine pop;" : "=v" (v0), "=v" (v1) : "r" (vscr_ptr) : "memory"); It's just wrong to choose power5 for a bunch of altivec instructions and in fact all of those .machine directives are unnecessary. * config/tc-ppc.c (ppc_machine): Don't use command line sticky options.
Diffstat (limited to 'bfd')
0 files changed, 0 insertions, 0 deletions