# HG changeset patch # User diego # Date 1203175051 0 # Node ID 78aa57eba353f6957db8ba375ff148c72c913aa1 # Parent 3d999e9c2093e29bdb109b3f696d746943a800b3 FLAT objects cannot have multiple sections, so using the L1 attributes breaks linking. The FDPIC relocs also break for any other format. Thus check the compiler environment and select the appropriate sections/relocs. patch by Mike Frysinger, vapier.adi a gmail d com diff -r 3d999e9c2093 -r 78aa57eba353 bfin/config_bfin.h --- a/bfin/config_bfin.h Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/config_bfin.h Sat Feb 16 15:17:31 2008 +0000 @@ -35,10 +35,14 @@ #ifndef DEFUN +#define mL3 .text #ifndef mL1 +#ifdef __FDPIC__ #define mL1 .l1.text +#else +#define mL1 mL3 #endif -#define mL3 .text +#endif #define DEFUN(fname,where,interface) \ .section where; \ @@ -50,6 +54,11 @@ #define DEFUN_END(fname) \ .size _ff_bfin_ ## fname, . - _ff_bfin_ ## fname +#ifdef __FDPIC__ +#define RELOC(reg,got,obj) reg = [got + obj@GOT17M4] +#else +#define RELOC(reg,got,obj) reg.L = obj; reg.H = obj +#endif #endif diff -r 3d999e9c2093 -r 78aa57eba353 bfin/dsputil_bfin.c --- a/bfin/dsputil_bfin.c Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/dsputil_bfin.c Sat Feb 16 15:17:31 2008 +0000 @@ -173,7 +173,7 @@ + ff_bfin_z_sad16x16 (blk2,blk2+stride,stride<<1,stride<<1,h); } -static uint8_t vtmp_blk[256] __attribute__((l1_data_B)); +static uint8_t vtmp_blk[256] attribute_l1_data_b; static int bfin_pix_abs16_x2 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h) { diff -r 3d999e9c2093 -r 78aa57eba353 bfin/dsputil_bfin.h --- a/bfin/dsputil_bfin.h Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/dsputil_bfin.h Sat Feb 16 15:17:31 2008 +0000 @@ -24,7 +24,13 @@ #ifndef FFMPEG_DSPUTIL_BFIN_H #define FFMPEG_DSPUTIL_BFIN_H +#ifdef __FDPIC__ #define attribute_l1_text __attribute__ ((l1_text)) +#define attribute_l1_data_b __attribute__((l1_data_B)) +#else +#define attribute_l1_text +#define attribute_l1_data_b +#endif #ifdef BFIN_PROFILE diff -r 3d999e9c2093 -r 78aa57eba353 bfin/fdct_bfin.S --- a/bfin/fdct_bfin.S Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/fdct_bfin.S Sat Feb 16 15:17:31 2008 +0000 @@ -129,23 +129,30 @@ #include "config_bfin.h" +#ifdef __FDPIC__ .section .l1.data.B,"aw",@progbits +#else +.data +#endif .align 4; dct_coeff: .short 0x5a82, 0x2d41, 0x187e, 0x3b21, 0x0c7c, 0x3ec5, 0x238e, 0x3537; +#ifdef __FDPIC__ .section .l1.data.A,"aw",@progbits +#endif .align 4 vtmp: .space 128 +.text DEFUN(fdct,mL1, (DCTELEM *block)): [--SP] = (R7:4, P5:3); // Push the registers onto the stack. b0 = r0; - r0 = [P3+dct_coeff@GOT17M4]; + RELOC(r0, P3, dct_coeff); b3 = r0; - r0 = [P3+vtmp@GOT17M4]; + RELOC(r0, P3, vtmp); b2 = r0; L3 = 16; // L3 is set to 16 to make the coefficient diff -r 3d999e9c2093 -r 78aa57eba353 bfin/idct_bfin.S --- a/bfin/idct_bfin.S Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/idct_bfin.S Sat Feb 16 15:17:31 2008 +0000 @@ -57,7 +57,11 @@ #include "config_bfin.h" +#ifdef __FDPIC__ .section .l1.data.B,"aw",@progbits +#else +.data +#endif .align 4; coefs: @@ -72,7 +76,9 @@ .short 0x18F9; //cos(7pi/16) .short 0x7D8A; //cos(pi/16) -.section .l1.data.A +#ifdef __FDPIC__ +.section .l1.data.A,"aw",@progbits +#endif vtmp: .space 256 @@ -81,6 +87,7 @@ #define TMP2 FP-16 +.text DEFUN(idct,mL1, (DCTELEM *block)): @@ -88,8 +95,8 @@ link 16; [--SP] = (R7:4, P5:3); // Push the registers onto the stack. B0 = R0; // Pointer to Input matrix - R1 = [P3+coefs@GOT17M4]; // Pointer to Coefficients - R2 = [P3+vtmp@GOT17M4]; // Pointer to Temporary matrix + RELOC(R1, P3, coefs); // Pointer to Coefficients + RELOC(R2, P3, vtmp); // Pointer to Temporary matrix B3 = R1; B2 = R2; L3 = 20; // L3 is used for making the coefficient array diff -r 3d999e9c2093 -r 78aa57eba353 bfin/vp3_idct_bfin.S --- a/bfin/vp3_idct_bfin.S Fri Feb 15 21:01:10 2008 +0000 +++ b/bfin/vp3_idct_bfin.S Sat Feb 16 15:17:31 2008 +0000 @@ -30,7 +30,11 @@ #include "config_bfin.h" +#ifdef __FDPIC__ .section .l1.data.B,"aw",@progbits +#else +.data +#endif .align 4; coefs: @@ -45,7 +49,9 @@ .short 0x18F9; //cos(7pi/16) .short 0x7D8A; //cos(pi/16) +#ifdef __FDPIC__ .section .l1.data.A +#endif vtmp: .space 256 @@ -54,6 +60,7 @@ #define TMP2 FP-16 +.text DEFUN(vp3_idct,mL1, (DCTELEM *block)): @@ -61,8 +68,8 @@ link 16; [--SP] = (R7:4, P5:3); // Push the registers onto the stack. B0 = R0; // Pointer to Input matrix - R1 = [P3+coefs@GOT17M4]; // Pointer to Coefficients - R2 = [P3+vtmp@GOT17M4]; // Pointer to Temporary matrix + RELOC(R1, P3, coefs); // Pointer to Coefficients + RELOC(R2, P3, vtmp); // Pointer to Temporary matrix B3 = R1; B2 = R2; L3 = 20; // L3 is used for making the coefficient array