(CommandList children: [ (FuncDef name: usage body: (BraceGroup children: [ (C {(echo)} {(DQ ('Usage: embedspu [flags] symbol_name input_filename output_filename'))}) (C {(echo)}) (C {(echo)} {(DQ (' input_filename: SPU ELF executable to be embedded'))}) (C {(echo)} {(DQ (' output_filename: Resulting PowerPC object file'))}) (C {(echo)} {(DQ (' symbol_name: Name of program handle struct to be defined'))}) (C {(echo)} {(DQ (' flags: GCC flags defining PowerPC object file format'))} ) (C {(echo)} {(DQ (' (e.g. -m32 or -m64)'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [69] ) spids: [64 68] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:program_transform_name) op: Equal rhs: {(EmptyPart)} spids: [124] ) ] spids: [124] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mydir) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(dirname)} {(DQ ($ VSub_Number '$0'))})]) left_token: <Left_Backtick '`'> spids: [127 133] ) } spids: [126] ) ] spids: [126] ) (FuncDef name: find_prog body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:prog) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Number '$1')}) (C {(sed)} {(DQ ($ VSub_Name '$program_transform_name'))}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [145 157] ) } spids: [144] ) ] spids: [144] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:prog) op: Equal rhs: {(DQ ($ VSub_Name '$mydir') (/) ($ VSub_Name '$prog'))} spids: [160] ) ] spids: [160] ) (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-x)} {(DQ ($ VSub_Name '$prog'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:prog) op: Equal rhs: {(DQ ($ VSub_Name '$mydir') (/) ($ VSub_Number '$1'))} spids: [183] ) ] spids: [183] ) (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-x)} {(DQ ($ VSub_Name '$prog'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:prog) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Number '$1')}) (C {(sed)} {(DQ ($ VSub_Name '$program_transform_name'))}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [207 219] ) } spids: [206] ) ] spids: [206] ) (AndOr ops: [Op_DAmp] children: [ (SimpleCommand words: [{(which)} {($ VSub_Name '$prog')}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [226] ) (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [230] ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [141] ) spids: [136 140] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:SYMBOL) op:Equal rhs:{(EmptyPart)} spids:[248])] spids: [248] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:INFILE) op:Equal rhs:{(EmptyPart)} spids:[250])] spids: [250] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OUTFILE) op:Equal rhs:{(EmptyPart)} spids:[252])] spids: [252] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FLAGS) op:Equal rhs:{(EmptyPart)} spids:[254])] spids: [254] ) (FuncDef name: parse_args body: (BraceGroup children: [ (While cond: [ (Sentence child: (C {(test)} {(-n)} {(DQ ($ VSub_Number '$1'))}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(-) (Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FLAGS) op: Equal rhs: {(DQ (${ VSub_Name FLAGS) (' ') ($ VSub_Number '$1'))} spids: [292] ) ] spids: [292] ) ] spids: [288 290 301 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$SYMBOL'))}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:SYMBOL) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [321] ) ] spids: [321] ) ] spids: [16777215 318] ) (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$INFILE'))}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:INFILE) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [341] ) ] spids: [341] ) ] spids: [327 338] ) (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$OUTFILE'))}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:OUTFILE) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [361] ) ] spids: [361] ) ] spids: [347 358] ) ] else_action: [(C {(echo)} {(DQ ('Too many arguments!'))}) (C {(usage)})] spids: [367 380] ) ] spids: [304 305 382 16777215] ) ] spids: [279 285 385] ) (C {(shift)}) ] spids: [276 391] ) ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$OUTFILE'))}) terminator: <Op_Semi ';'> ) ] action: [(C {(usage)})] spids: [16777215 405] ) ] spids: [16777215 411] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang '!')} {(-r)} {(DQ ($ VSub_Name '$INFILE'))}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ (${ VSub_Name INFILE) (': File not found'))}) (C {(usage)})] spids: [16777215 427] ) ] spids: [16777215 443] ) ] spids: [262] ) spids: [257 261] ) (FuncDef name: main body: (BraceGroup children: [ (C {(parse_args)} {(DQ ($ VSub_At '$@'))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-x)} {(DQ ($ VSub_Name '$mydir') (/../gcc/xgcc))}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CC) op: Equal rhs: { (DQ ($ VSub_Name '$mydir') ('/../gcc/xgcc -B') ($ VSub_Name '$mydir') (/../gcc/) ) } spids: [483] ) ] spids: [483] ) ] spids: [16777215 480] ) ] else_action: [ (C {(find_prog)} {(gcc)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {($ VSub_QMark '$?')} {(-ne)} {(0)}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Cannot find ') ($ VSub_Name '$prog'))}) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [16777215 511] ) ] spids: [16777215 527] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CC) op: Equal rhs: {(DQ ($ VSub_Name '$prog'))} spids: [530] ) ] spids: [530] ) ] spids: [492 536] ) (C {(find_prog)} {(readelf)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {($ VSub_QMark '$?')} {(-ne)} {(0)}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(which)} {(readelf)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [569] ) (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [573] ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:prog) op: Equal rhs: {(readelf)} spids: [581] ) ] spids: [581] ) ] spids: [16777215 578] ) ] else_action: [ (C {(echo)} {(DQ ('Cannot find ') ($ VSub_Name '$prog'))}) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [585 601] ) ] spids: [16777215 560] ) ] spids: [16777215 604] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:READELF) op: Equal rhs: {(DQ ($ VSub_Name '$prog'))} spids: [607] ) ] spids: [607] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DPipe Op_DPipe] children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)}) (SimpleCommand words: [{(grep)} {(SQ <'Class:.*ELF32'>)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [640] ) (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [643] ) ] ) ] negated: T ) (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)}) (SimpleCommand words: [{(grep)} {(SQ <'Type:.*EXEC'>)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [670] ) (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [673] ) ] ) ] negated: T ) (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)}) (SimpleCommand words: [{(egrep)} {(SQ <'Machine:.*(SPU|17)'>)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [700] ) (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [703] ) ] ) ] negated: T ) ] ) ] action: [ (C {(echo)} {(DQ (${ VSub_Name INFILE) (': Does not appear to be an SPU executable'))} ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 707] ) ] spids: [16777215 725] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:toe) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)}) (C {(sed)} {(-n)} {(-e)} { (SQ < 's, *\\[ *\\([0-9]*\\)\\] *\\.toe *[PROGN]*BITS *\\([0-9a-f]*\\).*,\\1 \\2,p' > ) } ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [730 752] ) } spids: [729] ) ] spids: [729] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:toe_addr) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$toe')}) (C {(sed)} {(-n)} {(-e)} {(SQ <'s,.* ,,p'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [756 772] ) } spids: [755] ) ] spids: [755] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:toe) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$toe')}) (C {(sed)} {(-n)} {(-e)} {(SQ <'s, .*,,p'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [776 792] ) } spids: [775] ) ] spids: [775] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:has_ea) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)}) (C {(sed)} {(-n)} {(-e)} {(SQ <'s, *\\[ *\\([0-9]*\\)\\] *\\._ea *PROGBITS.*,\\1,p'>)} ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [796 818] ) } spids: [795] ) ] spids: [795] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sections) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)}) (C {(sed)} {(-n)} {(-e)} { (SQ < 's, *\\[ *\\([0-9]*\\)\\] *[^ ]* *PROGBITS *\\([0-9a-f]*\\) *\\([0-9a-f]*\\).*,\\1 \\2 \\3,p' > ) } ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [826 848] ) } spids: [825] ) ] spids: [825] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sections) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(echo)} {(${ VSub_Name sections)})]) left_token: <Left_Backtick '`'> spids: [852 858] ) } spids: [851] ) ] spids: [851] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relas) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)}) (C {(sed)} {(-n)} {(-e)} { (SQ < 's, *\\[ *[0-9]*\\] *[^ ]* *RELA *[0-9a-f]* *0*\\([0-9a-f][0-9a-f]*\\).* \\([0-9a-f][0-9a-f]*\\) *[0-9a-f][0-9a-f]*$,\\1 \\2,p' > ) } ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [870 892] ) } spids: [869] ) ] spids: [869] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relas) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(echo)} {(${ VSub_Name relas)})]) left_token: <Left_Backtick '`'> spids: [896 902] ) } spids: [895] ) ] spids: [895] ) (SimpleCommand words: [ {(${ VSub_Name CC)} {(${ VSub_Name FLAGS)} {(-x)} {(assembler-with-cpp)} {(-nostartfiles)} {(-nostdlib)} {(-Wa) (Lit_Comma ',') (-mbig)} {(-Wa) (Lit_Comma ',') (-noexecstack)} {(-Wl) (Lit_Comma ',') (-r)} {(-Wl) (Lit_Comma ',') (-x)} {(-o)} {(${ VSub_Name OUTFILE)} {(-)} ] redirects: [ (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ (' .section .data.spetoe,') (Right_DoubleQuote '"') (aw) (Right_DoubleQuote '"') (',@progbits\n') (' .p2align 7\n') ('__spetoe__:\n') (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-s)} {(-W)} {(${ VSub_Name INFILE)}) (C {(grep)} {(SQ <' _EAR_'>)}) (C {(sort)} {(-k)} {(2)}) (C {(awk)} {(SQ <'BEGIN { \\\n'> <'\taddr = strtonum ("0x" "'>) (BracedVarSub token: <VSub_Name toe_addr> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(0)} ) spids: [1064 1068] ) (SQ <'"); \\\n'> <'\tsplit ("'>) (DQ (${ VSub_Name sections)) (SQ <'", s, " "); \\\n'> <'\tfor (i = 1; i in s; i += 3) { \\\n'> <'\t sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \\\n'> <'\t} \\\n'> <'} \\\n'> <'$7 == "'> ) (${ VSub_Name toe) (SQ <'" && strtonum ("0x" $2) != addr { \\\n'> < '\tprint "#error Symbol " $8 " not in 16 byte element toe array!"; \\\n' > <'} \\\n'> <'$7 == "'> ) (${ VSub_Name toe) (SQ <'" { \\\n'> <'\taddr = addr + 16; \\\n'> <'} \\\n'> <'$7 == "'>) (${ VSub_Name toe) (SQ <'" { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> < '\tprint " .quad " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0"; \\\n' > <'\tprint "#else"; \\\n'> < '\tprint " .int 0, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0, 0"; \\\n' > <'\tprint "#endif"; \\\n'> <'} \\\n'> <'$7 != "'> ) (${ VSub_Name toe) (SQ <'" && $7 in sec_off { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] ", R_PPC64_ADDR64, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \\\n' > <'\tprint "#else"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] + 4 ", R_PPC_ADDR32, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \\\n' > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> <'} \\\n'> <'$7 != "'> ) (${ VSub_Name toe) (SQ <'" && ! $7 in sec_off { \\\n'> <'\tprint "#error Section not found for " $8; \\\n'> <'} \\\n'> ) } ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [1026 1139] ) ('\n') (CommandSubPart command_list: (CommandList children: [ (AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-z)} {(DQ (${ VSub_Name relas))}) (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-r)} {(-W)} {(${ VSub_Name INFILE)}) (C {(awk)} {(SQ <'BEGIN { \\\n'> <'\tsplit ("'>) (DQ (${ VSub_Name sections)) (SQ <'", s, " "); \\\n'> <'\tfor (i = 1; i in s; i += 3) { \\\n'> <'\t sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \\\n'> <'\t} \\\n'> <'\tsplit ("'> ) (DQ (${ VSub_Name relas)) (SQ <'", s, " "); \\\n'> <'\tfor (i = 1; i in s; i += 2) { \\\n'> <'\t rela[s[i]] = strtonum (s[i+1]); \\\n'> <'\t} \\\n'> <'} \\\n'> <'/^Relocation section/ { \\\n'> <'\tsec = substr($6, 3); \\\n'> <'} \\\n'> <'$3 ~ /R_SPU_PPU/ { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" substr($3, 10) ", " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \\\n' > <'\tprint "#else"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + (substr($3, 10) == "64" ? 4 : 0)", R_PPC_ADDR32, " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \\\n' > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> <'} \\\n'> <'$3 ~ /unrecognized:/ { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" ($4 == "f" ? "64" : "32") ", " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \\\n' > <'\tprint "#else"; \\\n'> < '\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + ($4 == "f" ? 4 : 0)", R_PPC_ADDR32, " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \\\n' > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> <'} \\\n'> ) } ) ] negated: F ) ] ) ] ) left_token: <Left_Backtick '`'> spids: [1141 1218] ) ('\n') ('#if ') (BracedVarSub token: <VSub_Name has_ea> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)}) spids: [1221 1225] ) ('\n') (' .section .data.speelf,') (Right_DoubleQuote '"') (aw) (Right_DoubleQuote '"') (',@progbits\n') ( '#elif defined (HAS_RELOCS) && (defined (__PIC__) || defined (__PIE__))\n' ) (' .section .data.rel.ro.speelf,') (Right_DoubleQuote '"') (a) (Right_DoubleQuote '"') (',@progbits\n') ('#else\n') (' .section .rodata.speelf,') (Right_DoubleQuote '"') (a) (Right_DoubleQuote '"') (',@progbits\n') ('#endif\n') (' .p2align 7\n') ('__speelf__:\n') (' .incbin ') (Right_DoubleQuote '"') (${ VSub_Name INFILE) (Right_DoubleQuote '"') ('\n') ('\n') (' .section .data.spehandle,') (Right_DoubleQuote '"') (aw) (Right_DoubleQuote '"') (',@progbits\n') (' .globl ') (${ VSub_Name SYMBOL) ('\n') (' .type ') (${ VSub_Name SYMBOL) (', @object\n') ('# fill in a struct spe_program_handle\n') ('#ifdef _LP64\n') (' .p2align 3\n') (${ VSub_Name SYMBOL) (':\n') (' .int 24\n') (' .int 0\n') (' .quad __speelf__\n') (' .quad __spetoe__\n') ('#else\n') (' .p2align 2\n') (${ VSub_Name SYMBOL) (':\n') (' .int 12\n') (' .int __speelf__\n') (' .int __spetoe__\n') ('#endif\n') (' .size ') (${ VSub_Name SYMBOL) (', . - ') (${ VSub_Name SYMBOL) ('\n') ('\n') (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name READELF)} {(-s)} {(-W)} {(${ VSub_Name INFILE)}) (C {(grep)} {(SQ <' _SPUEAR_'>)}) (C {(sort)} {(-k)} {(2)}) (C {(awk)} {(SQ <'{ \\\n'> <'\tprint " .globl '>) (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9); \\\n'> <'\tprint " .type '>) (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9) ", @object"; \\\n'> <'\tprint " .size '>) (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9) ", 4"; \\\n'> <'\tprint "'>) (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9) ":"; \\\n'> <'\tprint " .int 0x" $2; \\\n'> <'} \\\n'> ) } ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [1301 1368] ) ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [1016] ) ] ) ] spids: [453] ) spids: [448 452] ) (C {(main)} {(DQ ($ VSub_At '$@'))}) ] )