On Mon, Sep 15, 2014 at 12:16 PM, <jackie.hu...@windriver.com> wrote: > From: Jackie Huang <jackie.hu...@windriver.com> > > libgcrypt.so.20 contains .text relocations, backport a patch > to fix it. > > Signed-off-by: Jackie Huang <jackie.hu...@windriver.com> > --- > ...ibgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch | 169 > ++++++++++++++++++++ > meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb | 2 + > 2 files changed, 171 insertions(+), 0 deletions(-) > create mode 100644 > meta/recipes-support/libgcrypt/files/libgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch > > diff --git > a/meta/recipes-support/libgcrypt/files/libgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch > > b/meta/recipes-support/libgcrypt/files/libgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch > new file mode 100644 > index 0000000..3400872 > --- /dev/null > +++ > b/meta/recipes-support/libgcrypt/files/libgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch > @@ -0,0 +1,169 @@ > +Fix ARM assembly when building __PIC__ > + > +* cipher/camellia-arm.S (GET_DATA_POINTER): New. > +(_gcry_camellia_arm_encrypt_block): Use GET_DATA_POINTER. > +(_gcry_camellia_arm_decrypt_block): Ditto. > +* cipher/cast5-arm.S (GET_DATA_POINTER): New. > +(_gcry_cast5_arm_encrypt_block, _gcry_cast5_arm_decrypt_block) > +(_gcry_cast5_arm_enc_blk2, _gcry_cast5_arm_dec_blk2): Use > +GET_DATA_POINTER. > +* cipher/rijndael-arm.S (GET_DATA_POINTER): New. > +(_gcry_aes_arm_encrypt_block, _gcry_aes_arm_decrypt_block): Use > +GET_DATA_POINTER. > +-- > + > +Signed-off-by: Jussi Kivilinna <jussi.kivili...@iki.fi> > + > +Upstream-Status: Backport > + > +Signed-off-by: Jackie Huang <jackie.hu...@windriver.com> > +--- > + cipher/camellia-arm.S | 17 +++++++++++++++-- > + cipher/cast5-arm.S | 21 +++++++++++++++++---- > + cipher/rijndael-arm.S | 17 +++++++++++++++-- > + 3 files changed, 47 insertions(+), 8 deletions(-) > + > +diff --git a/cipher/camellia-arm.S b/cipher/camellia-arm.S > +index c30d194..cdeaf8b 100644 > +--- a/cipher/camellia-arm.S > ++++ b/cipher/camellia-arm.S > +@@ -28,6 +28,19 @@ > + .syntax unified > + .arm > + > ++#ifdef __PIC__ > ++# define GET_DATA_POINTER(reg, name, rtmp) \ > ++ ldr reg, 1f; \ > ++ ldr rtmp, 2f; \ > ++ b 3f; \ > ++ 1: .word _GLOBAL_OFFSET_TABLE_-(3f+8); \ > ++ 2: .word name(GOT); \ > ++ 3: add reg, pc, reg; \ > ++ ldr reg, [reg, rtmp]; > ++#else > ++# define GET_DATA_POINTER(reg, name, rtmp) ldr reg, =name > ++#endif > ++ > + /* struct camellia_ctx: */ > + #define key_table 0 > + > +@@ -261,7 +274,7 @@ _gcry_camellia_arm_encrypt_block: > + */ > + push {%r1, %r4-%r11, %ip, %lr}; > + > +- ldr RTAB1, =.Lcamellia_sp1110; > ++ GET_DATA_POINTER(RTAB1, .Lcamellia_sp1110, RTAB3); > + mov RMASK, #0xff; > + add RTAB3, RTAB1, #(2 * 4); > + push {%r3}; > +@@ -309,7 +322,7 @@ _gcry_camellia_arm_decrypt_block: > + */ > + push {%r1, %r4-%r11, %ip, %lr}; > + > +- ldr RTAB1, =.Lcamellia_sp1110; > ++ GET_DATA_POINTER(RTAB1, .Lcamellia_sp1110, RTAB3); > + mov RMASK, #0xff; > + add RTAB3, RTAB1, #(2 * 4); > + mov RMASK, RMASK, lsl#4 /* byte mask */ > +diff --git a/cipher/cast5-arm.S b/cipher/cast5-arm.S > +index ce7fa93..db96db4 100644 > +--- a/cipher/cast5-arm.S > ++++ b/cipher/cast5-arm.S > +@@ -30,6 +30,19 @@ > + > + .extern _gcry_cast5_s1to4; > + > ++#ifdef __PIC__ > ++# define GET_DATA_POINTER(reg, name, rtmp) \ > ++ ldr reg, 1f; \ > ++ ldr rtmp, 2f; \ > ++ b 3f; \ > ++ 1: .word _GLOBAL_OFFSET_TABLE_-(3f+8); \ > ++ 2: .word name(GOT); \ > ++ 3: add reg, pc, reg; \ > ++ ldr reg, [reg, rtmp]; > ++#else > ++# define GET_DATA_POINTER(reg, name, rtmp) ldr reg, =name > ++#endif > ++ > + /* structure of crypto context */ > + #define Km 0 > + #define Kr (Km + (16 * 4)) > +@@ -260,7 +273,7 @@ _gcry_cast5_arm_encrypt_block: > + */ > + push {%r1, %r4-%r11, %ip, %lr}; > + > +- ldr Rs1, =_gcry_cast5_s1to4; > ++ GET_DATA_POINTER(Rs1, _gcry_cast5_s1to4, Rs2); > + mov RMASK, #(0xff << 2); > + add Rs2, Rs1, #(0x100*4); > + add Rs3, Rs1, #(0x100*4*2); > +@@ -306,7 +319,7 @@ _gcry_cast5_arm_decrypt_block: > + */ > + push {%r1, %r4-%r11, %ip, %lr}; > + > +- ldr Rs1, =_gcry_cast5_s1to4; > ++ GET_DATA_POINTER(Rs1, _gcry_cast5_s1to4, Rs2); > + mov RMASK, #(0xff << 2); > + add Rs2, Rs1, #(0x100 * 4); > + add Rs3, Rs1, #(0x100 * 4 * 2); > +@@ -500,7 +513,7 @@ _gcry_cast5_arm_enc_blk2: > + */ > + push {%lr}; > + > +- ldr Rs1, =_gcry_cast5_s1to4; > ++ GET_DATA_POINTER(Rs1, _gcry_cast5_s1to4, Rs2); > + mov RMASK, #(0xff << 2); > + add Rs2, Rs1, #(0x100 * 4); > + > +@@ -631,7 +644,7 @@ _gcry_cast5_arm_dec_blk2: > + * [RR0, RL0], [RR1, RL1]: dst > + */ > + > +- ldr Rs1, =_gcry_cast5_s1to4; > ++ GET_DATA_POINTER(Rs1, _gcry_cast5_s1to4, Rs2); > + mov RMASK, #(0xff << 2); > + add Rs2, Rs1, #(0x100 * 4); > + > +diff --git a/cipher/rijndael-arm.S b/cipher/rijndael-arm.S > +index 22c350c..421c3b4 100644 > +--- a/cipher/rijndael-arm.S > ++++ b/cipher/rijndael-arm.S > +@@ -28,6 +28,19 @@ > + .syntax unified > + .arm > + > ++#ifdef __PIC__ > ++# define GET_DATA_POINTER(reg, name, rtmp) \ > ++ ldr reg, 1f; \ > ++ ldr rtmp, 2f; \ > ++ b 3f; \ > ++ 1: .word _GLOBAL_OFFSET_TABLE_-(3f+8); \ > ++ 2: .word name(GOT); \ > ++ 3: add reg, pc, reg; \ > ++ ldr reg, [reg, rtmp]; > ++#else > ++# define GET_DATA_POINTER(reg, name, rtmp) ldr reg, =name > ++#endif > ++ > + /* register macros */ > + #define CTX %r0 > + #define RTAB %lr > +@@ -249,7 +262,7 @@ _gcry_aes_arm_encrypt_block: > + 2: > + sub %sp, #16; > + > +- ldr RTAB, =.LtableE0; > ++ GET_DATA_POINTER(RTAB, .LtableE0, RMASK); > + > + str %r1, [%sp, #4]; /* dst */ > + mov RMASK, #0xff; > +@@ -503,7 +516,7 @@ _gcry_aes_arm_decrypt_block: > + 2: > + sub %sp, #16; > + > +- ldr RTAB, =.LtableD0; > ++ GET_DATA_POINTER(RTAB, .LtableD0, RMASK); > + > + mov RMASK, #0xff; > + str %r1, [%sp, #4]; /* dst */ > diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb > b/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb > index 1657ea4..903ed66 100644 > --- a/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb > +++ b/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb > @@ -1,4 +1,6 @@ > require libgcrypt.inc > > +SRC_URI += "file://libgcrypt-1.6.1-make-arm-asm-fPIC-friendly.patch" > + > SRC_URI[md5sum] = "d155aa1b06fa879175922ba28f6a6509" > SRC_URI[sha256sum] = > "7c1007197bef49c3b8740cf6af8b4eb4eb74c7a69796ebcf555d928c287255de" > -- > 1.7.1 > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core
Hi, back in July I realized the same issue (http://lists.openembedded.org/pipermail/openembedded-core/2014-July/094960.html). Instead of patching 1.6.1, wouldn't it be better to update to libgcrypt_1.6.2 ? Cheers Andrea -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core