问题
I'm trying to compile Tremolo for iPhone. I've pulled in the files bitwise.c bitwiseARM.s codebook.c dpen.s dsp.c floor0.c floor1.c floor1ARM.s floor_lookup.c framing.c info.c mapping0.c mdct.c mdctARM.s misc.c res012.c into a new target, added the following custom settings:
GCC_PREPROCESSOR_DEFINITIONS = _ARM_ASSEM_
GCC_C_LANGUAGE_STANDARD = gnu99
GCC_THUMB_SUPPORT = YES
... but as soon as xcode reaches the first assembler file, bitwiseARM.s, I get errors like these:
/tremolo/bitwiseARM.s:3:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:3:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:4:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:4:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:5:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:5:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:6:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:6:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:11:bad instruction `STMFD r13!,{r10,r11,r14}'
/tremolo/bitwiseARM.s:12:bad instruction `LDMIA r0,{r2,r3,r12}'
/tremolo/bitwiseARM.s:16:bad instruction `SUBS r2,r2,r1'
/tremolo/bitwiseARM.s:17:bad instruction `BLT look_slow'
/tremolo/bitwiseARM.s:19:bad instruction `LDR r10,[r3]'
The first error I could google, and changing .global to .globl fixed the first errors, but I still get the bad instructions, and I don't get why. Googling for the ARM instruction set, the above instructions look valid to me. I've tried toggling thumb support, and building for just armv7 instead of armv6, but neither helped.
回答1:
As Igor says, Apple's fork of gas is ancient and wants:
- .global replaced by .globl
- all instructions in lowercase
- replace ';' comment separator with '@'
- stub labels for address imports
I've written a pre-processor awk script for the Tremolo .s files to make them acceptable to Xcode, which I'll contribute back via Robin.
Alternatively, you could try this.
回答2:
It seems like it's trying to compile bitwiseARM.s in Thumb mode (e.g. Thumb uses PUSH
instead of STMFD SP!,
). I'm not sure what directives Apple's gas supports (it's based on some really ancient fork), but try adding .arm
or .code32
at the start of the file.
来源:https://stackoverflow.com/questions/2904597/building-arm-assembler-vorbis-decoder-lib-tremolo-for-iphone